仅允许用户 SSH 访问一个目录

仅允许用户 SSH 访问一个目录

我有一台运行 Centos 6.4 的服务器,我需要允许自由职业者访问服务器上的一个文件夹来上传一些代码并进行一些测试 - 我已在 /etc/passwd 中将其主目录设置为:

username:x:505:505::/home/virtual_server/directory/home_directory/:/bin/bash

当他们尝试通过 SSH 登录时,他们得到以下结果:

Could not chdir to home directory /home/virtual_server/directory/home_directory/: Permission denied
-bash: /home/virtual_server/directory/home_directory//.bash_profile: Permission denied

如果他们尝试通过 FTP 登录(我已启用 chroot 的 VSFTP),他们会收到错误:

Response:   500 OOPS: cannot change directory:/home/virtual_server/directory/home_directory
Error:  Critical error: Could not connect to server

我发现几年前有一个类似的问题,其可接受的答案是需要更改主目录上方的所有目录才能读取和执行https://serverfault.com/a/435430/142823

有没有其他方法可以做到这一点,而不需要更改其他目录的权限或一些不那么“永久”的操作?

答案1

如果您的系统使用过openssh,那么这可以提供帮助:

将 sftp-server 更改为可以执行lscd其他命令的内部服务器

# /path/to/the/sshd_config
. . . . .
Subsystem       sftp    internal-sftp
. . . . .

然后为用户添加规则:

. . . . .
Match User username
        X11Forwarding no
        AllowTcpForwarding no
        ChrootDirectory /home/virtual_server/directory/
. . . . .

然后将用户的 shell 更改为/bin/nologin。请记住,当应该由该用户拥有/home/virtual_server/directory/时, 应该由 root 拥有。/home/virtual_server/directory/home_directory/

现在用户可以/home/virtual_server/directory/通过 chrooted 的 SFTP 进行访问。他无法在该目录中执行任何操作,只能cd上传home_directory/下载、删除和重命名文件。

如果您需要该用户有能力启动某些命令/脚本 - 那么请创建另一个登录名并授予他所有需要的权限sudo

相关内容