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

我正在使用各种SFTP客户端上传文件到SFTP服务器,并且在放置文件时使用默认权限时遇到问题。

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

另一方面,Linux(Red Hat和Ubuntu)上的OpenSSH sftp命令看起来正在等待'640'模式的SSH_OPEN命令。

我怎样才能configurationOpenSSH命令不明确设置文件模式,或者如何configuration它发送模式,而不是640?

非常感谢!


更新:

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

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

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

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

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

  • PSFTP:不允许您为上传的文件设置权限。 (但是Unix版本保留源本地文件的文件)

  • OpenSSH sftp :不允许你设置上传文件的权限。 保留源本地文件的文件。 有关-P开关的详细信息,请参阅OPENSSH SFTP服务器在使用put命令(chrooted环境)之后是否使用umask或保留客户端权限?

  • WinSCP:您可以设置上传文件的权限

    请参阅https://winscp.net/eng/docs/ui_transfer_custom

    WinSCP传输设置

    (我是WinSCP的作者)

  • FileZilla:不允许你设置上传文件的权限。 服务器的默认(umask)适用。

sftp服务器将使用用户的默认umask创build新文件。 这可以用-u umask选项覆盖sftp-server

 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选项来保留本地权限,该选项将发送文件,然后适当地修改它。

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

如果您严格要求如何设置sftp客户端的强制文件模式, 你不能(至less用openssh sftp-client)。 发送文件后,您将不得不发送一个chmod。

我相信sftp服务器将使用用户configuration文件的默认umask,除非它已经用明确的umask(man 8 sftp-server了解详情)启动。