![Web 服务器用户没有 Shell 访问权限,但需要 SSH 密钥或目录更改权限?](https://linux22.com/image/36994/Web%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%94%A8%E6%88%B7%E6%B2%A1%E6%9C%89%20Shell%20%E8%AE%BF%E9%97%AE%E6%9D%83%E9%99%90%EF%BC%8C%E4%BD%86%E9%9C%80%E8%A6%81%20SSH%20%E5%AF%86%E9%92%A5%E6%88%96%E7%9B%AE%E5%BD%95%E6%9B%B4%E6%94%B9%E6%9D%83%E9%99%90%EF%BC%9F.png)
关于我之前的问题和可能的解决方案,建议我在新问题中寻求另一个解决方案。
(这是旧线程:SSH 代理转发可以工作,但是 sudo -u 用户名没有 shell/权限呢?作曲家)
因此,为了简单起见,我们假设我的服务器上只有两个用户(除了 root 之外)。
一名用户(我们称他为 Nal)是兼职管理员,这意味着他位于 sudoers 列表中。
另一个用户用于 sftp(例如,通过 ssh 进行 ftp;))并管理位于 /srv/web 的 Web 服务器上的一个站点(我们将此用户称为 Web)。
Web 除了管理此站点之外没有其他工作要做,因此他没有 Shell 访问权限(设置为 bin/false),也没有特殊权限。
现在 /srv/web/websiteA 中的目录归 Web 所有,在那里我有一个 Laravel(PHP 框架)安装,它也利用 Composer(PHP 依赖管理器,基本上取代了 PEAR)。
我有一些半开发包尚未准备好供大众使用,因此放置在私人存储库中。要访问此存储库并通过 git 克隆内容(所有操作均由 Composer 自动完成!)“Web”需要 SSH 密钥。
我无需在本地计算机和服务器上管理同一组 SSH 密钥,而是通过 SSH 代理转发传递它们。
这对于“Nal”来说非常有用。他可以访问我的私人存储库。但是,当我想在 /srv/web/websiteA 中进行作曲家更新时,我必须使用“Web”进行更新,并且他没有 shell 访问权限,也没有 ssh 密钥,因此更新失败。
我当前的解决方法是这样的:
我以 Nal 身份登录:
cd /srv/web/websiteA
setfacl -R -m u:Web:rwx "${SSH_AUTH_SOCK%/*}"
sudo -u Web SSH_AUTH_SOCK="$SSH_AUTH_SOCK" composer update
setfacl -b "${SSH_AUTH_SOCK%/*}"
因此,我设置了将 SSH 密钥交给 Nal 的套接字的权限,以便 Web 可以访问它们,然后我进行更新,然后再次撤销权限。
这是可行的,但可能不是最好的解决方案。
我不想将 /srv/web/websiteA 的权限设置为 775 或类似的内容(并将 Nal 添加到 www-data 组),所以我在这里询问:
您能想出更好的解决方案吗?
答案1
好吧,作为一个建议 - 为什么不复制您的私钥并将其放在服务器上的 Web 用户~/.ssh
目录中,然后使用-p
ssh-keygen 选项从 Web 私钥副本中删除密码。
你会失去一点安全性,因为任何拿到密钥文件的人都可以使用它,而无需知道密码,但它应该可以用来获取 git 存储库,而不需要代理转发或类似的设置。