Web 服务器用户没有 Shell 访问权限,但需要 SSH 密钥或目录更改权限?

Web 服务器用户没有 Shell 访问权限,但需要 SSH 密钥或目录更改权限?

关于我之前的问题和可能的解决方案,建议我在新问题中寻求另一个解决方案。

(这是旧线程: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目录中,然后使用-pssh-keygen 选项从 Web 私钥副本中删除密码。

你会失去一点安全性,因为任何拿到密钥文件的人都可以使用它,而无需知道密码,但它应该可以用来获取 git 存储库,而不需要代理转发或类似的设置。

相关内容