如何在使用 OpenSSH sftp 命令上传文件时指定文件权限

如何在使用 OpenSSH sftp 命令上传文件时指定文件权限

我正在使用各种 SFTP 客户端将文件上传到 SFTP 服务器,但在上传文件时使用的默认权限存在问题。

当请求放置文件时,SFTP 客户端(如 WinSCP 或 Filezilla)将发送 SSH_OPEN 命令,而无需请求任何明确的文件权限。

另一方面,Linux(Red Hat 和 Ubuntu)上的 OpenSSH sftp 命令似乎正在将 SSH_OPEN 命令与“640”模式一起挂起。

我如何配置 OpenSSH 命令以不明确设置文件模式,或者如何配置它以发送 640 以外的模式?

非常感谢!


更新:

我检查了 OpenSSH sftp 客户端源代码,看起来即使未设置 -P,OpenSSH sftp 也会始终尝试保留文件模式: http://www.koders.com/c/fidD3B20680F615B33ACCB42398FAAFEE1C007DF942.aspx?s=rsa#L986

为了解决这个问题,我使用了 Putty SFTP 客户端。

答案1

如果 SFTP 客户端未指定上传文件的权限,OpenSSH SFTP 服务器将为新创建的文件分配 0664 权限。这是默认的 umask 0002,您可以使用开关更改它,-u如 @JimB 的回答所示。


如果 SFTP 客户端指定权限,OpenSSH 服务器将使用指定的权限(umask 不适用)。

一些流行的 SFTP 客户端概述:

答案2

sftp 服务器将使用用户的默认 umask 创建新文件。可以使用-u umasksftp 服务器选项覆盖此设置

SFTP-SERVER(8)
     -u umask
             Sets an explicit umask(2) to be applied to newly-created files 
             and directories, instead of the user's default mask.

客户端(OpenSSH sftp)可以选择使用该-p选项来保留本地权限,这将发送文件然后适当地对其进行 fchmod。

SFTP(1) 
     -p      Preserves modification times, access times, and modes from the 
             original files transferred.

如果您严格询问如何使用 sftp 客户端设置强制文件模式;您不能(至少使用 openssh sftp-client 不能)。您必须在发送文件后发送 chmod。

答案3

我相信 sftp 服务器将使用用户配置文件的默认 umask,除非它已经以明确的 umask 启动(有关详细信息,请参阅 man 8 sftp-server)。

相关内容