有人能看出我在这个过程中做错了什么吗?我可以以新用户身份连接到服务器并处于 chrooted 目录中,但尽管设置了所有正确的 root 权限,我仍无法添加文件或目录。
sudo mkdir /var/host
sudo groupadd sftp
sudo useradd john -d / -M -N -G sftp -s /bin/false
sudo passwd john
sudo nano /etc/ssh/sshd_config
Match Group sftp
ChrootDirectory /var/host
ForceCommand internal-sftp
service ssh restart
以下是目录权限
drwxr-xr-x 2 root root 4096 Jan 24 14:27 host
* 更新 *
好的,我想我现在明白了。如果这看起来不错,请告诉我:
sudo mkdir /var/sftp
sudo mkdir /var/sftp/host
chown john:sftp /var/sftp/host
sudo groupadd sftp
sudo useradd john -d /var/sftp/host -M -N -G sftp -s /bin/false
sudo passwd john
sudo nano /etc/ssh/sshd_config
Match Group sftp
ChrootDirectory /var/sftp/host
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
sudo service ssh restart
我认为这个解决方案的唯一问题是只有 John 可以添加文件和目录,或者 SFTP 的任何成员都可以吗?
答案1
我不会让用户将主目录设置为
/
。/var/host/
正确归 root 所有,并且 755 是正常chroot
工作所必需的。由于它归 root 所有,因此用户当然john
无法对其进行写入。对于用户,
john
您必须创建/var/host/
他有写权限的子目录。john
将永远无法直接写入 chroot(/var/host/
),因为这不安全,所以sftp
不允许这样做。
答案2
以下是一步一步的指南,可帮助您:
- 用户 bob 对 /home/bob/uploads 的 SFTP 访问(根据需要进行修改)
- 将 bob 锁定在 SSH 之外
- 使用用户名/密码而不是密钥:
首先,编辑您的 /etc/ssh/sshd_config 文件:
sudo nano /etc/ssh/sshd
向下滚动并修改:
PasswordAuthentication yes
并在底部添加:
Match Group sftpusers
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
按 Ctrl-X 退出并保存。
现在添加用户:
sudo useradd bob
sudo passwd bob
现在添加组并禁用 ssh:
sudo groupadd sftpusers
sudo usermod -g sftpusers bob
sudo usermod -s /usr/bin/rssh bob
sudo usermod -d /home/bob bob
现在设置权限:
sudo chown root:root /home/bob/
sudo chmod 755 /home/bob/
sudo mkdir /home/bob/uploads
sudo chown bob /home/bob/uploads
sudo service sshd restart
所有这些都是在以 root 用户身份登录时进行的(Amazon Linux AMI 上的 ec2-user)