Answers:
这很简单。只需创建一个新用户,并将其主目录设置为您需要他的用户有权访问的主目录(此命令必须sudo
在root shell 下或在root shell中运行):
adduser --home /restricted/directory restricted_user
这将创建一个user restricted_user
,目录/restricted/directory
,然后将设置目录权限,以便用户可以对其进行写入。默认情况下,它无法写入任何其他目录。
如果已经有了目录,则可以运行adduser
带有--no-create-home
附加选项的命令并手动设置权限(也具有root特权),例如:
chown restricted_user:restricted_user /restricted/directory
chmod 755 /restricted/directory
如果您需要使该用户无法访问全球可写目录,则有两种变体。
1)如果要向用户提供交互式shell会话,请考虑按照本手册中的步骤创建chroot监狱/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服务器后(它不会在重新启动时终止交互式会话,因此即使您配置错误也很安全;此外,在您检查是否仍可以登录之前不会关闭正在运行的会话),一切正常如预期。
Subsystem sftp internal-sftp
在该Match
块上方的第二个示例中编写该行。否则,ssh将打印出错误并且不会启动。
创建不能在给定目录(例如,上层目录等)中徘徊并且使用受限/精选命令集的受限用户的最简单方法是使用受限Shell。参考:
首先,创建一个名为rbash
(以root用户身份运行)的符号链接。
ln -s /bin/bash /bin/rbash
然后只需使用此受限Shell创建普通用户,并将其主目录设置为所需的文件夹:
useradd -s /bin/rbash -d /home/restricted_folder username
即使没有受限外壳程序,如果您明确不将此用户添加到sudoer的列表或任何特殊组中,则默认情况下它将受到限制。
对于受限外壳程序,不允许执行以下操作:
用cd更改目录
设置或取消设置SHELL,PATH,ENV或BASH_ENV的值
指定包含/的命令名称
指定一个包含/的文件名作为。内置命令
指定包含斜杠的文件名作为hash内置命令的-p选项的参数
启动时从外壳环境导入函数定义
启动时从shell环境中解析SHELLOPTS的值
使用>,> |,<>,>&,&>和>>重定向运算符重定向输出
使用exec内置命令将外壳替换为另一个命令
在启用内置命令中添加或删除带有-f和-d选项的内置命令
使用enable buildin命令启用禁用的shell内置程序
在命令内置命令中指定-p选项
使用设置+ r或设置+ o限制关闭受限模式。
这些限制在任何启动文件之后都会强制执行
此外/(可选)将用户限制为只能使用的一组有限的/精选的命令,可以使用以下命令创建对该用户只读的.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
等等
高温超导