我正在接收通过 SFTP 从另一个系统推送到 Linux VM 上的目录的文件。这些文件获得了错误的权限u=rw g= o=
。但是我需要这些文件具有像u=rw g=rw o=
.
我读过很多文章建议/etc/ssh/sshd_conf
像这样调整文件:Subsystem sftp internal-sftp -u 0002
OR Subsystem sftp /usr/libexec/openssh/sftp-server -u 0002
。我已经用 重新启动了服务器sudo systemctl restart sshd
。但是,更改此设置不会影响接收文件的默认权限。我是否错过了什么?
答案1
这sftp-server
设置掩码对于服务器进程。 umask 影响服务器进程创建的文件的默认权限。 SFTP 客户端可以发送显式 SFTP 协议命令来覆盖权限并将其设置为客户端请求的内容。您可能正在看到这一点。
现代版本sftp-server
有一个选项“-P”来禁用单个 SFTP 协议消息。您可以尝试使用它来禁用客户端发送的设置文件权限的命令。这两个消息是“setstat”和“fsetstat”。要禁用它们,请将其添加到sftp-server
或internal-sftp
子系统行:
Subsystem sftp /usr/libexec/openssh/sftp-server -u 0002 -Psetstat,fsetstat
^^^^^^^^^^^^^^^^^^
如果出现错误,请尝试运行“/usr/libexec/openssh/sftp-server -Q requests”以列出支持的请求类型。如果出现错误,则您的 SFTP 服务器软件可能太旧,无法支持“-P”选项。
进行更改后,您应该使用 SFTP 客户端(您的用户使用的同一客户端)进行测试,以确保更改达到预期效果,使 SFTP 客户端行为合理。
一些文档:
- sftp 服务器手册
- SFTP RFC。请参阅第 6.2 节。