我正在使用各种 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 客户端概述:
PSFTP:不允许您设置上传文件的权限。(但 Unix 版本保留源本地文件的文件)
OpenSSH
sftp
:不允许您设置上传文件的权限。保留源本地文件的文件。有关开关的详细信息-P
,请参阅OpenSSH SFTP 服务器是否使用 umask 或在 put 命令(chrooted 环境)后保留客户端权限?WinSCP:可以设置上传文件的权限
看https://winscp.net/eng/docs/ui_transfer_custom
(我是 WinSCP 的作者)
FileZilla:不允许您设置上传文件的权限。适用服务器的默认值(umask)。
答案2
sftp 服务器将使用用户的默认 umask 创建新文件。可以使用-u umask
sftp 服务器选项覆盖此设置
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)。