我有一个相当简单的sftp Docker容器,其中我有以下/etc/ssh/sshd_config
,受到互联网上许多不同来源的启发 - 没有声称它是完美的,但是嘿,它有点工作
Port 22
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
PermitRootLogin no
PubkeyAuthentication no
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication yes
UsePrivilegeSeparation sandbox
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem sftp internal-sftp -u 0002
Match Group sftponly
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
强调Subsystem
线到最后。我的理解是-u
选项为进程设置了umask,因此为登录它的用户设置了umask。毋庸置疑,我的糟糕用户不断创建具有权限644/755
而非预期664/775
的文件。
我错过了什么?是否有能力使我的容器丢失?还有别的吗?
答案 0 :(得分:0)
OpenSSH实现SFTP version 3,描述于 draft-ietf-secsh-filexfer-02.txt。 SFTP协议的第3版包括command,客户端可以为服务器上的文件设置file attributes。可以设置的文件属性包括文件的权限。
仅在创建文件(或目录等)时应用umask。进程可以调用chmod()来更改文件属性,这些调用不受umask约束。
换句话说,尽管使用了umask,客户端仍可以通过发送显式命令来设置权限,从而将文件权限设置为所需的文件。