十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
上一篇我们完成了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所示。
图1
密码输错5次以上被锁定,但并不会在登录页提示账号被锁定,即使后面用了正确的密码,但会有邮件提醒。管理员可在Admin Area -->User具体要操作的用户,进行Unlock操作,如下图2所示。
图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: 'firefly@demo.com') => #用户也可以在自己邮件中点击解锁,如图3所示。
图3
(2)、强制用户选用哪种SSH密钥技术以及最小密钥位数。
Gitlab对于用户选用哪种SSH密钥技术以及最小密钥位数是可配置的。ssh-keygen命令允许用户创建只有768位的RSA密钥(不指定位数创建默认为2048位),这远远低于某些标准组(如美国NIST)的建议。而部署GitLab的一些公司可能需要强制实施最小密钥强度,以满足内部安全策略或法规。
以管理员账户登录,点击"Admin Area" -->"Settings" -->"General" --> "Visibility and access controls",点右侧的"Expand"展开,如图4所示。
图4
使用ssh-keygen默认创建的RSA长度为2048位,如若创建RSA的密钥长度小于1024位就有被破解的风险,而DSA必须是1024位(DSA keys must be 1024 bits),按实际需求修改完成后,点“Save changes" 保存,如图5所示。
图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所示。
图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 => #这时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创建组和仓库、数据备份、恢复等。
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。