我想通过 ssh 设置一个 git 服务器,为项目设置一个 SSH 帐户。所有项目成员的 ssh 密钥都应列在 authorized_keys 中。锁定应限制访问权限,仅允许执行 git 操作,并且只能在专用目录中执行。
创建此类设置的最佳方法是什么?有 git-shell,它显然可以锁定仅执行 git 命令,但我不知道如何限制对单个目录的访问。还有各种 Python 和 Ruby 包装器 - 我应该信任其中哪一个?
答案1
答案2
你的威胁模型是什么?
好人意外破坏了 git 存储库或其他数据:确保您的用户只能写入其主目录、tmp 和 git 存储库。每次提交后备份存储库并定期练习恢复程序。
坏人窃取了某人的私钥并想要拥有你的系统:您的攻击面仅限于受身份验证保护的 sshd 部分 - 以及您使用的任何 shell 接口,因此请尽可能缩小攻击面。Python/Ruby 包装器涉及大量代码,并且存在大量出错空间。使用 git-shell 或考虑使用 sshd_config 中的 Match 和 ChrootDirectory 指令来限制用户可以访问文件系统的哪些部分。
坏人窃取某人的私钥并获取你的源代码:教导用户如何保护他们的私钥并建立快速撤销密钥的程序(例如,凌晨 4 点打电话给谁来撤销密钥)。
不要使用.ssh/authorized_keys
,而是使用AuthorizedKeyfile
sshd_config 中的关键字来指定用户没有写权限的路径,例如/etc/ssh/keys/%u
。很难确保用户永远不会用自己的副本覆盖 .ssh/authorized_keys。
此外,请保持用户密钥文件和 sshd_config 版本控制以允许审核。