我已经在我的 centos 机器上配置了 sshd_conf 如下:
Match group pilots
ChrootDirectory /home/pilots
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
Run Code Online (Sandbox Code Playgroud)
和目录 /home/pilots 像这样:
# ls -al /home/pilots
total 12
drwxr-x---. 3 root pilots 4096 Mar 10 14:20 .
drwxr-xr-x. 7 root root 4096 Mar 10 14:10 ..
drwxrwxr-x. 2 root pilots 4096 Mar 10 15:21 data
-rwxrwxrwx. 1 root root 0 Mar 10 14:20 topLevel
#
Run Code Online (Sandbox Code Playgroud)
如果我在没有启用 ChrootDirectory 指令的情况下以 Pilots 组中的用户身份 sftp,我可以 cd 到 /home/pilots 文件夹(或其子目录)并执行 ls 或毫无困难地获取。但是,如果我启用 ChrootDirectory 指令,虽然我仍然可以 sftp 进入,并且可以 cd 到数据,但我不能执行 ls 或进入任一目录。例如,尝试 ls 会remote readdir("/"): Permission denied
出错,而尝试获取 topLevel 会给出File "/topLevel" not found
。我在想也许我不在我期望的目录中,但是 cd 数据的能力似乎表明 chroot 确实按预期工作。我可能做错了什么?
几个可能重要的注意事项:
编辑:我刚刚在消息日志中注意到了这一点:
type=1400 audit(1394494944.504:50): avc: denied { read } for pid=22758 comm="sshd" name="pilots" dev=dm-0 ino=400504 scontext=unconfined_u:system_r:chroot_user_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:home_root_t:s0 tclass=dir
Run Code Online (Sandbox Code Playgroud)
所以有拒绝的记录。仍然没有告诉我为什么。
我在此页面上找到了解决方案。总而言之,按照上述配置配置 sftp 后,需要运行以下两个命令以允许在启用 SELinux 的情况下访问:
setsebool -P ssh_chroot_rw_homedirs on
restorecon -R /home/$USERNAME
Run Code Online (Sandbox Code Playgroud)
在这种情况下,第二个命令将是 restorecon -R /home/pilots。在此之后,sftp 按预期工作,即使在 chroot 时,也无需完全禁用 SELinux。
归档时间: |
|
查看次数: |
18750 次 |
最近记录: |