前段时间我设置了一个 SFTP 服务器,运行良好。我的 ssh_config 中有这样的配置
# override default of no subsystems
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server
Match User miscout
# Force the connection to use SFTP and chroot to the required directory.
ForceCommand internal-sftp
ChrootDirectory %h
# Disable tunneling, authentication agent, TCP and X11 forwarding.
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
Match Group sftp_users
ChrootDirectory /mnt/reos-storage-1/sftp_data/%u
ForceCommand internal-sftp
# Disable tunneling, authentication agent, TCP and X11 forwarding.
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
有一个用户组sftp_users
和一个名为sftpuser1
今天,为了好玩,我决定意外删除目录/mnt/reos-storage-1/sftp_data
。我随后重新创建了目录和子目录,但现在我无法连接到 sftp 服务器。我收到如下错误:
$ sftp sftpuser1@<redacted>
sftpuser1@<redacted>'s password:
packet_write_wait: Connection to 192.41.113.249 port 22: Broken pipe
Connection closed
我可以以其他用户的身份 ssh 进入该机器。
我猜想可能是我对此目录的权限设置不正确,因为这是我唯一更改过的内容。当前权限和所有权如下所示:
[root] /mnt/reos-storage-1 $ ls -l sftp_data/
total 4
drwxrwx--x 3 root root 4096 Jun 23 13:22 sftpuser1
[root] /mnt/reos-storage-1 $ ls -l sftp_data/sftpuser1/
total 4
drwxrwx--x 3 sftpuser1 sftp_users 4096 Jun 23 13:23 upload
[root] /mnt/reos-storage-1 $ ls -l sftp_data/sftpuser1/upload/
total 864
drwxrwx--x 2 sftpuser1 sftp_users 884736 Jun 23 16:06 MiScout
谁能告诉我我做错了什么?
答案1
我的回答是在这个问题
Chroot 目录部分的所有部分的权限都需要为 root.root.755。所以在我的情况下,这是 sftp_data 和 sftpuser1 目录。