Gitlab使用第二篇(安全設置)

上一篇我們完成了Gitlab服務器的搭建以及簡單設置,在最後總結時有強調Gitlab常用安全設置很有必要。這一篇我將從以下幾點來完善Gitlab服務器的安全設置,歡迎共同探討。

(1)、密碼長度以及允許密碼輸錯次數。

修改gitlab賬戶的密碼長度以及允許密碼輸錯次數,默認密碼長度限制是8-128位,且默認允許輸錯密碼次數爲10次(10次鎖定),現將密碼長度修改爲10-128位,允許輸錯次數爲5次,鎖定時間30分鐘。

使用vi 編輯 /opt/gitlab/embedded/service/gitlab-rails/config/initializers/8_devise.rb

將位於116行的config.password_length = 8..128改爲config.password_length = 10..128

將位於146行的config.maximum_attempts = 10改爲config.maximum_attempts = 5

將位於149行的config.unlock_in = 10.minutes改爲config.unlock_in = 30.minutes   #30分鐘後自動解鎖,默認是10分鐘

注意:修改密碼長度不影響已存在用戶,隻影響後續新建用戶。

重啓gitlab


# gitlab-ctl reconfigure

此時再註冊或創建新賬戶時就要求密碼長度是10位了,如圖1所示。

git001.png

圖1


密碼輸錯5次以上被鎖定,但並不會在登錄頁提示賬號被鎖定,即使後面用了正確的密碼,但會有郵件提醒。管理員可在Admin Area -->User具體要操作的用戶,進行Unlock操作,如下圖2所示。

git002.png

圖2


也可以使用管理員身份進入Rails控制檯修改。

[root@mail ~]# gitlab-rails console -e production
--------------------------------------------------------------------------------
  GitLab: 12.5.2 (49482945d28)
  GitLab Shell: 10.2.0
  PostgreSQL: 10.9
--------------------------------------------------------------------------------
Loading production environment (Rails 5.2.3)
irb(main):001:0> 
等待控制檯加載成功後,使用以下命令查找
irb(main):015:0> User.find_by(email: '[email protected]')
=> #<User id:4 @firefly>
irb(main):017:0> User.unlock_keys #之前版本可能用的是User.unlock_access
=> [:email]

用戶也可以在自己郵件中點擊解鎖,如圖3所示。

git002-2.png

圖3


(2)、強制用戶選用哪種SSH密鑰技術以及最小密鑰位數。

Gitlab對於用戶選用哪種SSH密鑰技術以及最小密鑰位數是可配置的。ssh-keygen命令允許用戶創建只有768位的RSA密鑰(不指定位數創建默認爲2048位),這遠遠低於某些標準組(如美國NIST)的建議。而部署GitLab的一些公司可能需要強制實施最小密鑰強度,以滿足內部安全策略或法規。

以管理員賬戶登錄,點擊"Admin Area" -->"Settings" -->"General" --> "Visibility and access controls",點右側的"Expand"展開,如圖4所示。

git003

圖4

使用ssh-keygen默認創建的RSA長度爲2048位,如若創建RSA的密鑰長度小於1024位就有被破解的風險,而DSA必須是1024位(DSA keys must be 1024 bits),按實際需求修改完成後,點“Save changes" 保存,如圖5所示。

git004

圖5

(3)、對Gitlab的請求速率做限制。

速率限制是一種常用的技術,用於提高web應用程序的安全性和持久性。例如,一個簡單的腳本每秒就可以發出數千個web請求,導致應用出現訪問異常。Gitlab也可以作此限制來避免DOS***。

以管理員賬戶登錄,Admin Area > Settings > Network > User and IP rate limits

用於限制以下三種場景的請求。

1、Unauthenticated requests(未經驗證的請求)

2、Authenticated API requests(經過身份驗證的API請求)

3、Authenticated web requests(已驗證的web請求)

具體設置如圖6所示。

git005

圖6

(4)、Gitlab訪問日誌歸檔週期管理。

gitlab使用svlogd來生成日誌數據,日誌默認都放在/var/log/gitlab目錄,再使用內置的logrotate服務來滾動、壓縮並最終刪除runit未捕獲的日誌數據。可通過/etc/gitlab/gitlab.rb來配置日誌相關屬性。

[root@mail ~]# vi /etc/gitlab/gitlab.rb 
logging['svlogd_size'] = 1024 * 1024 * 1024 # 單個日誌達到1024 MB時就自動滾動到新的日誌文件
logging['svlogd_num'] = 300 # 保留300個已滾動的日誌文件,超過的將被logrotate刪除,保留久一點便於審計
logging['svlogd_timeout'] = 24 * 60 * 60 # 每24小時滾動一次
logging['svlogd_filter'] = "gzip" # 使用gzip壓縮
logging['logrotate_frequency'] = "daily" # 按天滾動
logging['logrotate_rotate'] = 300 # 保留300個日誌,超過300以後的被刪除,保留久一點便於審計
logging['logrotate_compress'] = "compress" # 日誌壓縮方式,see 'man logrotate'
logging['logrotate_method'] = "copytruncate" #日誌滾動方式, see 'man logrotate'
logging['logrotate_dateformat'] = "-%Y-%m-%d-%H-%M" #日誌文件名格式,默認是數字,如access.log.1.gz,現在改爲日期,如access.log-2019-12-03-16-30.gz

另外,我們還可以將Gitlab日誌以及Gitlab服務器的系統日誌全部收集到日誌服務器上集中管理,具體配置將放在後續日誌收集章節中講。

(5)、如何重置Gitlab賬戶的root密碼。能丟失root密碼的管理員肯定是不會炒菜的。

想要重置root密碼,第一步以root用戶登錄到系統,並運行一個Rails控制檯。

[root@mail ~]# gitlab-rails console -e production
--------------------------------------------------------------------------------
  GitLab: 12.5.2 (49482945d28)
  GitLab Shell: 10.2.0
  PostgreSQL: 10.9
--------------------------------------------------------------------------------
Loading production environment (Rails 5.2.3)
  
irb(main):001:0> user = User.where(id: 1).first
=> #<User id:1 @root>
然後,使用以下命令重置root密碼
irb(main):006:0> user.password = 'root@12358'
=> "root@12358"
irb(main):007:0> user.password_confirmation = 'root@12358'
=> "root@12358"
保存修改
irb(main):008:0> user.save
Enqueued ActionMailer::DeliveryJob (Job ID: 35e1f3a6-7321-45bd-ba2e-60e4501a93c6) to Sidekiq(mailers) with arguments: "DeviseMailer", "password_change", "deliver_now", #<GlobalID:0x00007f40a408acc8 @uri=#<URI::GID gid://gitlab/User/1>>
=> true

這時root用戶就可以使用剛設置的新密碼登錄了。

(6)、修改Gitlab服務器的ssh端口以及不允許root用戶直接登錄。

使用vi 編輯/etc/ssh/sshd_config

將17行的#Port 22 改爲Port 6688

將38行的 PermitRootLogin yes 改爲PermitRootLogin no

保存後,重啓sshd服務(注:禁止root用戶直接登錄的前提是系統上有除root以外的可登錄的普通用戶)

[root@mail ~]# systemctl restart sshd

還有其他一些安全設置,如用戶使用雙因子身份驗證等,我一般在堡壘機上才用,在Gitlab上基本不用,所以在此不再做詳細說明,若大家還有其他常用安全設置 ,可告知一下,共同學習。

總結:安全無小事,一點都不能大意。但是,越想安全設置就越麻煩,一切要結合公司具體情況實施。

下一篇將分享Gitlab的權限管理、使用API Token創建組和倉庫、數據備份、恢復等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章