我在为客户端 chroot SFTP 访问时遇到了一些问题。
我可以访问该目录,但问题是我无法读/写,我只能访问该目录。
以下是我所做的:
# cat /etc/passwd | grep comege
comege:x:1001:1001::/home/sftp/comege/home/:/sbin/nologin
# cat /etc/group | grep sftp
sftp-only:x:1001:
# sshd_config
Subsystem sftp internal-sftp
Match Group sftp-only
ChrootDirectory /home/sftp/%u
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp
为了测试目的,SELinux 被设置为宽松。
当我使用 SFTP 连接到服务器时出现以下错误:
Error listing directory '/'. Permission denied
权限:
/home/sftp/comege and parent directories belongs to root:root.
/home/sftp/comege/home belongs to comege:sftp-only
我认为问题是 comege 在连接时没有重定向到 /home/sftp/comege/home,所以它到达属于 root 的 /home/sftp/comege,因此缺少权限(?)
答案1
看起来 chroot 目录的权限/home/sftp/comege
未设置为允许用户读取comege
。
权限/home/sftp/comege
应如下所示:
# ls -la /home/sftp/comege
total 0
drwxr-xr-x 1 root root 8 Jul 19 12:00 .
drwxr-xr-x 1 root root 12 Jul 19 11:59 ..
drwx------ 1 comege sftp-only 76 Jul 19 12:00 home
使用以下命令更改权限:
# chmod 755 /home/sftp/comege
请注意,这没有考虑 SELinux 权限。
按照设计,chrooted 环境中的 SFTP 会话将从 chroot “监狱” 中的用户开始,必须由 root 拥有。用户只能写入顶级根目录的子目录中的文件。一个惯例是为用户上传创建一个名为“incoming”的子目录,而不是原始示例中显示的“home”目录。