-1

我有一个相当简单的 sftp Docker 容器,其中包含以下内容/etc/ssh/sshd_config,灵感来自 Internet 上许多不同的来源——没有声称它是完美的,但是,嘿,它有点工作。

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,因此也为登录它的用户设置了掩码。不用说,我可怜的用户不断创建具有权限的文件,644/755而不是预期的664/775.

我错过了什么?我的容器是否缺少某种功能?还有别的吗?

4

1 回答 1

0

OpenSSH 实现了SFTP 版本 3,在 draft-ietf-secsh-filexfer-02.txt 中有描述。SFTP 协议的版本 3 包括一个命令,客户端可以为服务器上的文件设置文件属性。可以设置的文件属性包括文件的权限。

umask 仅在创建文件(或目录等)时应用。进程可以调用chmod()来更改文件属性,并且这些调用不受umask 的约束。

换句话说,尽管有 umask,客户端可以通过发送显式命令来设置权限,从而将文件权限设置为它想要的任何内容。

于 2016-04-12T18:19:54.533 回答