Jenkins服務安全加固


Jenkins服務安全加固

Jenkins早期版本的默認配置下沒有安全檢查。任何人都可以以匿名用戶身份進入Jenkins,執行build操作。然而,對大多數Jenkins應用,尤其是暴露在互聯網的應用,安全控制是非常重要的。從Jenkins 2.0開始,其默認配置中啟用了許多安全選項,以確保Jenkins環境安全,除非管理員明確禁用某些保護。

本文介紹了Jenkins管理員可操作的各種安全選項,用來加固您的Jenkins服務,以防被黑客攻擊。

Jenkins訪問控制

Jenkins訪問控制分為:安全域(即認證)授權策略

  • 安全域決定Jenkins在認證的過程中從哪里尋找用戶,默認選項有:Jenkins專有用戶數據庫,LDAP,和Servlet容器代理。

  • 授權策略決定用戶登錄后可以做什么,默認選項有:任何用戶可以做任何事(沒有任何限制),安全矩陣,登錄用戶可以做任何事情,遺留模式,項目矩陣授權策略。

Jenkins加固方案

關注安全漏洞

定期關注Jenkins官方安全公告,使用或更新到官方最新版本的Jenkins,防止部署存在安全漏洞的版本。

啟用安全性設置

自2.0版本起,Jenkins默認勾選Enable security復選框。Jenkins管理員可以在Web UI的啟用安全性部分啟用,配置或禁用適用於整個Jenkins環境的關鍵安全功能。

enable security

默認情況下,匿名用戶沒有權限,而登錄的用戶具有完全的控制權。用戶可以使用用戶名和密碼登錄,以執行匿名用戶不可用的操作。哪些操作要求用戶登錄取決於所選擇的授權策略及其配置。對於任何非本地(測試)Jenkins環境,應始終啟用此復選框。

配置NLP TCP端口

Jenkins使用TCP端口與通過JNLP協議啟動的代理(如基於Windows的代理)進行通信。截止Jenkins 2.0,默認情況下此端口被禁用。

對於希望使用基於JNLP代理的管理員,以下兩種類型的端口可供選用:

  • 隨機:隨機選擇JNLP端口,避免Jenkins主機發生沖突 。該方式的缺點是在Jenkins主引導期間,難以管理允許JNLP流量的防火牆規則。
  • 固定:由Jenkins管理員選擇JNLP端口,端口在Jenkins主控器的重新啟動之間是一致的。這使得管理防火牆規則更容易,允許基於JNLP的代理連接到主服務器。

啟用訪問控制

訪問控制是保護Jenkins環境免受未經授權使用的主要機制。在Jenkins中配置訪問控制包括以下三個方面:

  • 管理控制台。根據一般的管理方式,管理人員不需要直接在互聯網上進行管理,僅需要根據業務資深需求,對管理控制台訪問源IP、端口進行限制,防止被惡意人員訪問后台。

  • 安全域。通知Jenkins環境如何以及在哪里獲取用戶(或標識)的信息,也被稱為“認證”。

  • 授權配置。通知Jenkins環境,哪些用戶和/或組在多大程度上可以訪問Jenkins的哪些方面。

使用安全域和授權配置,可以在Jenkins中輕松地配置非常剛性的身份驗證和授權方案。此外,一些插件(如基於角色的授權策略)可以擴展Jenkins的訪問控制功能,以支持更細微的身份驗證和授權方案。

選擇合理的授權方式

安全領域或認證表明誰可以訪問Jenkins環境,而授權解決的是他們可以在Jenkins環境中訪問什么。

默認情況下,Jenkins支持以下的授權選項:

  • 所有人都可以控制Jenkins。每個人都可以完全控制Jenkins,包括尚未登錄的匿名用戶。請勿將本設置用於本地測試Jenkins管理以外的任何其他設置。

  • 傳統模式。如果用戶具有“admin”角色,他們將被授予對系統的完全控制權,否則該用戶(包括匿名用戶)將僅具有讀訪問權限。不要將本設置用於本地測試Jenkins管理以外的任何設置。

  • 登錄用戶可以做任何事情。在這種模式下,每個登錄的用戶都可以完全控制Jenkins。根據高級選項,還可以允許或拒絕匿名用戶讀取Jenkins的訪問權限。此模式有助於強制用戶在執行操作之前登錄,以便有用戶操作的審計跟蹤。

  • 基於矩陣的安全性。該授權方案可以精確控制哪些用戶和組能夠在Jenkins環境中執行哪些操作。

  • 基於項目的矩陣授權策略。此授權方案是基於Matrix的安全性的擴展,允許在項目配置屏幕中單獨為每個項目定義附加的訪問控制列表(ACL)。這允許授予特定用戶或組訪問指定的項目,而不是Jenkins環境中的所有項目。使用基於項目的矩陣授權定義的ACL是加法的,使得在“配置全局安全性”屏幕中定義的訪問權限將與項目特定的ACL組合。

    authorization

    上圖表中的每一行表示用戶或組(也稱為“角色”)。這包括名為“匿名”和“認證”的特殊條目。“匿名”條目表示授予訪問Jenkins環境的所有未認證用戶的權限。而“已認證”用於向訪問環境的所有經過身份驗證的用戶授予權限。

    矩陣中授予的權限是加法的。例如,如果用戶“kohsuke”在“開發人員”和“管理員”組中,則授予“kohsuke”的權限將包含授予給“kohsuke”,“開發人員”,“管理員” ,“認證”和“匿名”的所有權限。

選用與認證和用戶管理相關的插件

Jenkins提供一系列與認證和用戶管理相關的插件,用戶可以根據業務需求安裝使用(https://plugins.jenkins.io/) 。例如:

  • Active Directory Plugin:允許使用Microsoft Active Directory(即Windows域賬號)進行認證。

  • Crowd Plugin:允許使用Atlassian Crowd進行認證。

  • Script Security Realm Plugin:允許使用自定義的腳本進行認證。

  • Role Strategy Plugin:提供了基於角色的授權策略,允許定義全局的和項目集的角色,並為用戶分配相應角色。

啟用CSRF保護

跨站點請求偽造(或CSRF/XSRF)是一種漏洞,它允許未經授權的第三方通過模仿另一個經過身份驗證的用戶對Web應用程序執行請求。在Jenkins環境的上下文中,CSRF攻擊可能允許惡意actor刪除項目,更改構建或修改Jenkins的系統配置。

為了防范此類漏洞,自2.0以來所有Jenkins版本,在默認情況下都已啟用CSRF保護。

csrf

啟用該選項后,Jenkins將會在可能更改Jenkins環境中的數據的任何請求上檢查CSRF令牌或“crumb”。這包括任何表單提交和對遠程API的調用,包括使用“基本”身份驗證的表單。

但是,CSRF保護可能會對Jenkins更高級的使用帶來挑戰,例如:

  • 某些Jenkins功能(如遠程API)在啟用此選項時變得更難使用。
  • 通過配置不正確的反向代理訪問Jenkins,可能使CSRF HTTP頭被從請求中刪除,導致受保護的操作失敗。
  • 未經過CSRF保護測試的過時插件可能無法正常工作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM