默認的Jenkins不包含任何的安全檢查,任何人可以修改Jenkins設置,job和啟動build等。顯然地在大規模的公司需要多個部門一起協調工作的時候,沒有任何安全檢查會帶來很多的問題。 在系統管理-Configure Global Security頁面可以“訪問控制”進行相應的設置。如下圖:
Jenkins的權限配置文件存放在JENKINS_HOME目錄。進入JENKINS_HOME目錄,找到config.xml文件。打開config.xml,里面有一堆的東西,找找。。。找到了<useSecurity>和<authorizationStrategy>節點。<useSecurity>節點代表是否使用用戶權限,<authorizationStrategy>節點代表用戶權限是怎么划分的。
1) Security Realm,用來決定用戶名和密碼,且指定用戶屬於哪個組;
2) Authorization Strategy,用來決定用戶對那些資源有訪問權限;
一、詳細講解4種授權策略
1、任何用戶可以做任何事(沒有任何限制)
1)頁面設置如下圖:
2)config.xml腳本如下:
<useSecurity>true</useSecurity> <authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/> <securityRealm class="hudson.security.HudsonPrivateSecurityRealm"> <disableSignup>true</disableSignup> <enableCaptcha>false</enableCaptcha> </securityRealm>
2、登錄用戶可以做任何事
1)頁面設置如下圖:
2)config.xml腳本如下:
<useSecurity>true</useSecurity> <authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy"/> <securityRealm class="hudson.security.HudsonPrivateSecurityRealm"> <disableSignup>false</disableSignup> <enableCaptcha>false</enableCaptcha> </securityRealm>
3、安全矩陣
1)頁面設置如下圖:
2)config.xml腳本如下:
<useSecurity>true</useSecurity> <authorizationStrategy class="hudson.security.GlobalMatrixAuthorizationStrategy"> <permission>hudson.model.Hudson.Administer:jenkins</permission> <permission>hudson.model.Hudson.Read:anonymous</permission> <permission>hudson.model.Hudson.Read:dev</permission> <permission>hudson.model.Item.Build:dev</permission> <permission>hudson.model.Item.Read:anonymous</permission> <permission>hudson.model.Item.Read:dev</permission> </authorizationStrategy> <securityRealm class="hudson.security.HudsonPrivateSecurityRealm"> <disableSignup>false</disableSignup> <enableCaptcha>false</enableCaptcha> </securityRealm>
設置好權限之后,點擊注冊,注冊相應的賬號,如上圖的dev,jenkins。
4、項目矩陣授權策略
說明:安全矩陣和項目矩陣授權策略的配置是一模一樣的,唯一的區別是項目矩陣授權策略支持在Job的配置頁面再次配置授權策略。
這種策略在工作中用得較多,比如針對不同的項目選擇不同的用戶具有不同權限。
1)頁面設置如下圖:
各種權限如下(在配置頁面將鼠標放到該權限上即可查看幫助):
Overall(全局) | Credentials(憑證) | Slave(節點) | Job(任務) | View(視圖) | |||||||||||||||||||||||
Administer | Read | RunScripts | UploadPlugins | ConfigureUpdateCenter | Create | Update | View | Delete | ManageDomains |
Configure | Delete | Create | Disconnect | Connect | Build | Create | Delete | Configure | Read | Discover | Build | Workspace | Cancel | Create | Delete | Configure | Read |
管理員(最大) | 閱讀 | 運行腳本 | 升級插件 | 配置升級中心 | 創建 | 更新 | 查看 | 刪除 | 管理域 | 配置 | 刪除 | 創建 | 斷開連接 | 連接 | 構建 | 創建 | 刪除 | 配置 | 閱讀 | 重定向 | 構建 | 查看工作區 | 取消構建 | 創建 | 刪除 | 配置 | 閱讀 |
其中有一些比較特別的權限:
最大的權限是Overall的Administer,擁有該權限可以干任何事情。
最基本的權限是Overall的Read,用戶必須賦予閱讀的權限,不然什么都看不到。
Job的Discover權限是一個奇葩的權限,幫助說Discover比Read的級別更低。如果匿名用戶(沒有訪問job的權限)直接訪問一個Job的Url將重定向到登陸頁面。(經測試,這個權限應該是被廢棄了。)
Credentials的ManageDomains這個權限沒有看懂干嘛的,有懂的大家一起交流哈!
ps:如果有個用戶被賦予了Overall的Read,並沒有被賦予Job的Read權限,那么該用戶就無法訪問job。原因:沒有權限。
2)config.xml腳本如下:
<useSecurity>true</useSecurity> <authorizationStrategy class="hudson.security.ProjectMatrixAuthorizationStrategy"> <permission>hudson.model.Hudson.Administer:admin</permission> <permission>hudson.model.Hudson.Read:anonymous</permission> <permission>hudson.model.Item.Build:dev</permission> <permission>hudson.model.Item.Read:anonymous</permission> <permission>hudson.model.Item.Read:dev</permission> </authorizationStrategy> <securityRealm class="hudson.security.HudsonPrivateSecurityRealm"> <disableSignup>false</disableSignup> <enableCaptcha>false</enableCaptcha> </securityRealm>
3)每個用戶后都有1-2個圖標,第一個是反選功能(刪除當前已選擇的權限,選擇其他所有權限),第二個是刪除功能(刪除該用戶)
4)在Job中配置項目安全,如下圖:
二、遇到的問題
由於授權出錯,導致無法登錄,具體可參考http://www.cnblogs.com/yangxia-test/p/4363566.html操作。
最后給大家說說在配置文件里面怎么辨別使用是哪種權限控制模式
<authorizationStrategy>節點上有個class屬性,這個屬性控制着使用那種授權模式。
hudson.security.FullControlOnceLoggedInAuthorizationStrategy | 登錄用戶可以做任何事 |
hudson.security.ProjectMatrixAuthorizationStrategy | 項目矩陣授權策略 |
hudson.security.GlobalMatrixAuthorizationStrategy | 安全矩陣 |
hudson.security.LegacyAuthorizationStrategy | 遺留模式 |