我一直在试图找出文件权限的问题所在。当我使用 FileZilla 上传文件时,所有文件都获得权限 -rw-r--r--。我希望它们具有 -rwxr-xr-x。我尝试使用 umask 来修复权限,但出现问题。我读到你可以使用 umask 更改权限,例如:
在 /etc/ssh/sshd_config 中,更改以下内容:
Subsystem sftp /usr/lib/openssh/sftp-server -u 002
通过此更改,我获得了带有 -rw-rw-r-- 的文件。据我所知,0 应该授予所有权限?但我只获得了 rw 权限。
怎么了?我正在使用 Debian。
答案1
如果 SFTP 客户端没有为上传的文件指定权限,OpenSSH SFTP 服务器会为新创建的文件分配 0666 权限(减去 umask 0002 等于 0664)。
这是硬编码的,您无法更改它。请参阅OpenSSHprocess_open()
中的函数sftp-server.c
。即使没有明确指定,0666 仍然是文件的 *nix 默认值,您也不能仅使用 umask 来更改它(这通常是正确的,而不仅仅是 OpenSSH)。
也可以看看OpenSSH SFTP 服务器是否使用 umask 或在 put 命令(chrooted 环境)后保留客户端权限?
请注意,您的 umask 实际上是错误的。如果您想要 0644,请使用 umask 0022,而不是 0002。
FileZilla 从不指定上传文件的权限。这会导致您遇到的行为。
要获得所需的权限:
使用 FileZilla,您只能在上传后手动更改文件权限,使用文件权限来自远程文件上下文菜单的命令。
使用允许指定上传文件权限的 SFTP 客户端。
例如 WinSCP 允许这样做。
看https://winscp.net/eng/docs/ui_transfer_custom
(我是 WinSCP 的作者)