Linux shell将sftp用户限制在他们的主目录中?

时间:2009-10-06 17:16:44

标签: linux shell sftp

我需要让SFTP访问我服务器上的webroot中的目录。我已将ben_files设置为用户并将其主目录设置为

/var/www/vhosts/mydomain.com/files

如果他连接普通的旧FTP,那就没关系了 - 他只限于那个目录,但要启用SFTP,我必须将他添加到bin / bash shell,这会突然打开我的整个服务器......

有没有办法给他SFTP访问权限,但没有打开我的所有目录?我真的希望他只限于他的家;)

谢谢!

5 个答案:

答案 0 :(得分:46)

OpenSSH≥4.8支持ChrootDirectory指令。

添加到/etc/sshd_config/etc/ssh/sshd_config或您的设置的全局sshd配置文件:

Match user ben_files
        # The following two directives force ben_files to become chrooted
        # and only have sftp available.  No other chroot setup is required.
        ChrootDirectory /var/www/vhosts/mydomain.com/files
        ForceCommand internal-sftp
        # For additional paranoia, disallow all types of port forwardings.
        AllowTcpForwarding no
        GatewayPorts no
        X11Forwarding no

答案 1 :(得分:3)

您可以尝试将其shell设置为/bin/rbash

  

受限制的外壳          如果以名称rbash启动bash,或者-r选项是   供应于          调用,shell变得受限制。受限制的外壳是   用过的          设置比标准shell更受控制的环境。   它          行为与bash相同,但以下情况除外   是          不允许或不执行:

   ·      changing directories with cd

加上更多......

确保在使用之前完全理解允许和禁止的内容。

答案 2 :(得分:3)

看看rssh。它可能已经打包好您的o / s发行版。

答案 3 :(得分:0)

使用pam_chroot。

这是一本很好的手册:http://www.howtoforge.com/chroot_ssh_sftp_debian_etch

答案 4 :(得分:-2)

您还可以使用以下方法将用户shell设置为/ bin / false:

usermod -s / bin / false username

限制他们进入ssh'ing并且只能sftp(或ftp,如果设置)

我将此用于sftp usres,以及提到的chroot设置(由其他答案覆盖)。