我想将文件夹中所有文件(包括新上传的文件)的默认权限设置为某个值,比如说 644,而不是一直执行“chmod 644”。
有什么命令可以实现这一点吗?
答案1
或者,您可以在 sshd 的配置文件(我的 Debian 机器上是 /etc/ssh/sshd_config)中为所有 sftp 登录设置 umask。为此,请-u 022
像这样添加到 sftp 子系统行:
Subsystem sftp /usr/lib/openssh/sftp-server -u 022
从man sftp-server
:
-u umask
Sets an explicit umask(2) to be applied to newly-created files and directo‐
ries, instead of the user's default mask.
答案2
我花了相当多的时间寻找这个问题的更完整答案。为 sftp 配置不同的 umask 是很好的,但这不是一个通用的答案,因为 umask 只会限制权限而不会授予其他权限。通过 sftp 上传的文件最终具有的确切权限还取决于原始源文件的权限以及用于上传的客户端。
例如,我已将我的(OpenSSH,在 Red Hat 服务器上)sftp 服务器上的 umask 设置为 0002,但如果我使用 OpenSSH sftp 客户端在源系统上上传具有 0600 权限的文本文件,则它在目标上仍将具有 0600 权限。值得注意的是,据我所知,我无法确保上传到此 sftp 服务器的文件具有任何组权限,这进一步意味着我也无法使用访问控制列表 (ACL) 将权限扩展到其他用户或组。
尝试两种方法来解决这个问题,但在这两种情况下,它们都只是权宜之计而不是解决方案:
- 创建一个 cron 作业,以便事后手动设置所需的权限。非常简单,但异步,即使您可以频繁运行它。
- 使用通知监视 sftp 服务器使用的目标目录,并为其中创建的任何文件设置所需的权限。这实际上是立即的,但可能存在其他限制,例如在文件或目录数量较大的情况下。
我偶然发现了positon.org 上的博客文章它很好地解释了 inotify 选项,并提供了示例甚至初始化脚本。最好在那里阅读,但如果该网站消失,关键命令是:
inotifywait -mrq -e CREATE --format %w%f /tmp/mytest/ | while IFS= read -r FILE; do chmod g=u "$FILE"; done
尽管这很巧妙,但我仍然非常感兴趣通过功能或技巧在 sftp 或至少 shell 中获得相同的结果,而无需涉及单独的实用程序。
答案3
修改 /etc/ssh/sshd_config 使其包含:
Subsystem sftp internal-sftp -m 0644
重新加载 SSHD 配置:
sudo systemctl reload sshd
答案4
.profile 将位于您的用户帐户的主目录中。当 ssh 登录时,您将位于主目录中,但您也可以通过键入以下内容使 shell 更改为您的主目录:
cd
如果您使用的是 Linux,并且您的用户 shell 是 bash(大多数人都是这样),那么您可能没有 .profile,但您可能有 .bash_profile 和 .bashrc。请在这些文件中设置 umask,而不是创建 .profile。