这很简单。只要创建一个新的用户,并将其主目录设置为你需要他访问的目录(这个命令必须在sudo
下或在root shell下运行):
adduser --home /restricted/directory restricted_user
这样就会创建一个用户restricted_user
,目录/restricted/directory
,然后就会设置该目录的权限,这样用户就可以写到该目录。默认情况下,它不会有写入任何其他目录的能力。
如果你已经有了这个目录,你可以运行adduser
命令,并附加--no-create-home
选项,然后手动设置权限(也是用root权限),比如。
chown restricted_user:restricted_user /restricted/directory
chmod 755 /restricted/directory
如果你需要让这个用户连世界上可写的目录都无法访问,有两种变体:
1) 如果你想给用户提供一个交互式的shell会话,那么可以考虑按照本手册来创建chroot jail(在你的/restricted/directory
中)。
之后,在你的sshd_config
中添加以下内容。
Match user restricted_user
ChrootDirectory /restricted/directory
2)如果你只需要他在他的连接端点和你的主机之间复制文件,一切就简单多了。在你的sshd_config
的末尾添加这些行。
Match user restricted_user
ForceCommand internal-sftp
ChrootDirectory /restricted/directory
Subsystem sftp internal-sftp
然后在Subsystem sftp /usr/lib/openssh/sftp-server
的开头加上一个哈希(#
)符号来注释。
重启SSH服务器后(它不会在重启时杀死交互式会话,所以即使你配置错误也是安全的;而且,在你检查你仍然能够登录之前,不会关闭正在运行的会话),一切都应该按照预期工作。
最简单的方法是创建受限用户,使其不能离开给定的目录(例如,到上层目录等),并有一组有限的/选定的命令可以使用,就是使用受限Shell。参考: http://man.he.net/man1/rbash
首先,创建一个名为rbash
的符号链接(以root用户身份运行)。
ln -s /bin/bash /bin/rbash
然后用这个受限Shell创建一个普通用户,并将其主目录设置为所需文件夹。
useradd -s /bin/rbash -d /home/restricted_folder username
即使没有限制性外壳,如果你没有明确地将这个用户添加到sudoer的列表中,或者任何特殊的组,那么它将被默认限制。
有了Restricted Shell,以下操作将被禁止或不执行。 builtin命令
指定一个包含斜线的文件名作为hash builtin命令的-p选项的参数
在启动时从shell环境中导入函数定义
在启动时从shell环境中解析SHELLOPTS的值
使用"/“、”/“、”/“、”/“、”/“、”&“重定向输出。
-使用exec builtin命令用另一个命令替换shell
-使用enable builtin命令的-f和-d选项添加或删除builtin命令
-使用enable builtin命令启用禁用的shell builtins
-指定命令builtin命令的-p选项
-使用set +r或set +o restricted关闭限制模式。
这些限制在任何启动文件之后都会被强制执行
此外,为了限制用户使用一组有限的/选定的命令,你可以创建一个.bash_profile,只读给该用户,并使用
PATH=$HOME/bin
并将你允许的任何命令链接到~/bin文件夹中给该用户。
ln -s /bin/ls /home/restricted_folder/bin/ls
ln -s /bin/mkdir /home/restricted_folder/bin/mkdir
ln -s /bin/rm /home/restricted_folder/bin/rm
等。
HTH