2012-07-21 11 views
1

我要找的建議從社區的最佳方式來處理這個問題:策略廚師配方文件的簽字部分,以防止篡改

  1. 我在git的廚師食譜的集合,定義實驗室例如一個jenkins CI設置,人們可以根據自己的喜好進行調整和修改

  2. 但是,我可以預見當有人可能想要添加食譜的某些不可變部分時,防火牆設置

  3. 什麼策略將是有意義的鎖定文件的某些部分,以驗證它沒有被改變,同時允許之外的

  4. 任意修改理想的情況下,也可以解決混淆的能力部分如果需要

我會加入我自己的DSL到代碼 - 爲每個受保護塊的校驗 - 預處理它解開,並把它傳遞給廚師之前驗證呢?

例如我在格式第一次嘗試 - 仍然沒有解決的人只是刪除所有已簽署的部分問題 - 除非所有的文件必須簽署

#---SIGNED-FILE SHA-256 507e74380188c07bad2fa66acb8cbbeeb63f84fcee5fd639499575654239cd49 

# 
# Cookbook Name:: jenkins 
# Recipe:: default 
# 

# https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu 
# This is super-simple, compared to the other Chef cookbook I found 
# for Jenkins (https://github.com/fnichol/chef-jenkins). 
# 
# This doesn't include Chef libraries for adding Jenkin's jobs via 
# the command line, but it does get Jenkins up and running. 

include_recipe "apt" 
include_recipe "java" 

#---SIGNED-SECTION-START SHA-256 e4d3d02f14ee2a6d815a91307c610c3e182979ce8fca92cef05e53ea9c90f5c7 
apt_repository "jenkins" do 
    uri "http://pkg.jenkins-ci.org/debian" 
    key "http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key" 
    components ["binary/"] 
    action :add 
end 
#---SIGNED-SECTION-END 

#---OBFUSCATED-SECTION-START SHA-256 5f536f2137dc7e2c5817de861d1329ead72b1e9d2dbb9dbe181ec7bc274dddeb 
YXB0X3JlcG9zaXRvcnkgImplbmtpbnMiIGRvCiAgdXJpICJodHRwOi8vcGtnLmplbmtpbnMtY2kub3JnL2RlYmlhbiIKICBrZXkgImh0dHA6Ly9wa2cuamVua2lucy1jaS5vcmcvZGViaWFuL2plbmtpbnMtY2kub3JnLmtleSIKICBjb21wb25lbnRzIFsiYmluYXJ5LyJdCiAgYWN0aW9uIDphZGQKZW5k 
#---OBFUSCATED-SECTION-END 

package "jenkins" 

service "jenkins" do 
    supports [:stop, :start, :restart] 
    action [:start, :enable] 
end 
+0

我的一位同事的建議讓我們探索一條有趣的路線: 如果我們試圖提供一個人們可以繼承的不變的「基本配方」,那麼也許我們可以使用SHA-1密鑰git的基類,以確保我們保留這些部分。還沒有想過所有的細節呢。 – velniukas 2012-07-21 09:54:15

回答

0

如何設計從而使文件以簽署的部分,描述將在整個文件中找到的簽名實體。然後,您的解析代碼將需要檢查每個實體是否按描述存在且尚未被刪除。

要防止重放攻擊,您需要在每個簽名中包含一個時間戳記,並且每次對任何已簽名部分進行更改時,都要在整個文件中重新計算簽名。因此,文件僅在以下情況下有效:

  • 「標題」中描述的簽名實體出現在文件中。

  • 每個簽名驗證幷包含相同的時間戳。

  • 可選:簽名時間戳與文件時間戳相匹配(在可接受的增量範圍內)嗎?

仍然存在的風險是,有人替換先前版本中的整個文件(即有效地刪除一個新的部分,他們不喜歡)。我不知道如何防禦,除了通過檢查上面建議的文件時間戳。

NB。我的答案對你在創建和解析文件時可以達到什麼做出了假設。我可能誤解了你的環境的限制(我對git不熟悉),如果是這樣,請不理我!

+0

鄧肯 - 謝謝你的回答。這基本上是我想到的戰略。目前,我正在嘗試在現實世界中測試幾種不同的場景,以查看操作上的「需要」等,並將在此處發佈我的經驗更新。 – velniukas 2012-09-03 03:54:51