我需要构建一个 git 服务器,其中某些用户对存储库具有读写访问权限,并且使用此存储库运行某些脚本的管理服务器对 git 服务器中的同一存储库具有只读访问权限:
设置应尽可能安全。目前我完成了这个硅藻土其中devices
存储库具有以下配置:
repo devices
RW = eng1
RW = eng2
RW = eng3
R = graphs
用户的SSH密钥对graphs
存储在mgmt-svr
服务器的用户graphs
主目录中,私钥只有该用户可读可写graphs
。该私钥不受密码保护。
有没有更安全的方法来实现这一点?我考虑过使用 HTTPS 访问devices
git 服务器中的存储库和基本访问身份验证,但与当前基于 SSH 的设置相比,我看不到任何优势 - 我仍然需要将访问凭据存储在用户主graphs
目录中的某个位置。
答案1
您可以使用gitlab
CI 的部署关键功能。此功能也适用于社区版 (ce)。
全局共享部署密钥允许在整个 GitLab 安装中的任何存储库上配置只读或读写(如果启用)访问权限。
这对于将存储库集成到安全的、共享的持续集成 (CI) 服务或其他共享服务非常有用。 GitLab 管理员可以在 GitLab 中设置 Global Shared Deploy 密钥,并将私钥添加到任何共享系统。当项目维护者(或更高级别)授权全局共享部署密钥用于其项目时,各个存储库选择使用这些密钥公开其存储库。
与按项目部署密钥相比,全局共享密钥可以提供更高的安全性,因为目标集成系统的管理员是唯一需要了解和配置私钥的人。
GitLab 管理员在管理区域的部署密钥部分下设置全局部署密钥。确保密钥具有有意义的标题,因为这将是项目维护人员和所有者识别要添加的正确 Global Deploy 密钥的主要方式。例如,如果密钥允许访问 SaaS CI 实例,则在密钥名称中使用该服务的名称(如果这就是它的全部用途)。创建全局共享部署密钥时,请考虑密钥的粒度 - 它们的用途可能非常狭窄,例如仅用于特定服务,也可能用途更广泛,例如“任何需要授予对存储库的读取访问权限的地方”。
一旦 GitLab 管理员添加了全局部署密钥,项目维护者和所有者就可以将其添加到项目的“设置”>“存储库”页面中,方法是展开“部署密钥”部分,然后单击“可用于任何项目的公共部署密钥”下列出的相应密钥旁边的“启用”。
https://docs.gitlab.com/ee/ssh/#deploy-keys
编辑:
gitea
与 . 相比,是一个更轻量级的自托管 git 服务gitlab
。它只有一个静态的单个二进制文件,没有任何依赖项 - 使用 go 编程(当然,您需要添加配置文件和 systemd 服务或类似服务)。该网站对其功能有很好的概述:
https://docs.gitea.io/en-us/
答案2
您的设置听起来很安全。不过,只要有足够的时间,黑客总能找到办法。 ...如果有人攻击你,请不要起诉我。 它可能适合小型设置。对于大型企业中的大型团队来说,这可能不太合适(请参阅下面的“社会工程”)。
它有一些优点,也有一些要点供您考虑以使其变得更好。
关于您的设置的积极点
- Gitolite 本身重量轻,并且使用得足够好,并且不断更新。 (最后一次提交是在撰写本文时 23 天前)。这是相当安全的。
- Gitolite 搭载 OpenSSH 服务器,该服务器得到了很好的支持并且非常安全。
- 公共私钥(例如 SSH 密钥)比密码安全得多
- 设置非常简单,可以减少出错的可能性,并且是一种廉价的解决方案。
改进的考虑因素
未加密的密钥
尽管很常见,但未加密地存储私钥并不完美。正如你所说,你必须将它们存储在某个地方。然而,这可能是备份或物理上不安全的服务器的问题。有些选项要求您在重新启动服务器时手动解密私钥。也许其中最简单的是ssh代理并在重新启动时手动将加密密钥添加到其中。
SSH服务器加固
请记住,Gitolite 在 OpenSSH 服务器下运行。您可以做很多事情来强化 ssh 服务器本身。
您甚至可以考虑在以下环境下运行 Gitolitechroot环境。有很多关于如何设置chroot
OpenSSH 的教程。请记住,结果将需要访问这样的程序,python
因此这将使其在技术上比许多教程让您相信的更加复杂。
社会工程学
每个系统管理员都在寻找黑客可以入侵的技术方法,但现实世界中的许多黑客行为都是到人。
也许您的解决方案最薄弱的一点是 ssh 密钥的管理。 这在许多企业中被广泛认为是一个安全问题。 Gitolite 将 SSH 密钥的所有管理工作交给管理员。这带来了一些重大影响:
- 由于不支持单点登录,系统管理员可能不知道当有人离开时他们需要删除对此特定框的访问权限。例如:如果您的团队自己运行这个盒子,他们会在员工被解雇时收到通知吗?
- Gitolite 配置中的命名约定不太好。很容易犯错误并删除或替换错误的密钥。您需要为自己制定一个目录结构,以明确您在做什么。
- 用户可能不会告诉您他们何时停止使用密钥。他们用这把钥匙做什么下一个可能不安全。其他更大的软件(例如 Github Enterprise)实际上已经内置了以下功能:审核 SSH 密钥通过大规模禁用它们并要求用户重新批准它们。