SSH 和 SFTP 权限问题

通过 SSH 创建新文件,或者使用 FileZilla、WinSCP 和 CyberDuck 等客户端通过 SFTP 上传文件时,我们可能会遇到问题,即文件在上传后分配了错误的组所有权和/或者权限,导致无法访问它们网络服务器。

它经常发生是因为目录中的访问权限不正确。
所有权问题可以通过 setgid 或者 setuid 解决。

当我们希望网络服务器访问文件时,我们通常希望将文件分配到某个组。
根据配置,这可以是用户组,也可以是共享的 Web 服务器组,例如 Apache 的 www-data。

为了修复它,我们可以在与网络服务器共享的目录上设置 setgid 标志。

通常这个目录是 /var/www/

这样做将使通过 SFTP 上传的文件从父目录“继承”组所有权。
要递归地执行此操作,我们可以使用以下命令:

find /var/www/-type d -exec chmod g+s {} +

以上将使用 find 命令仅针对目录(-type d)。
至于 chmod,g 代表 setgid,而 +s 启用它。
要再次禁用它,只需使用 -s 运行命令即可。

关于 setgid 和 setuid

默认情况下,进程将以启动它的用户身份运行。
在这种情况下,当我们设置目录的 setgid 位时,该进程将以拥有文件的组的访问权限运行。

这是一种在上传时“强制”文件和目录具有所需组所有权的方法,实际上,即使是由网络服务器本身创建的。

如果我们想要运行具有用户访问权限的进程,我们可以在目录上设置 setuid 标志。
为此,我们只需使用 u 而不是 g :

find /var/www/-type d -exec chmod u+s {} +
日期:2020-06-02 22:17:34 来源:oir作者:oir