我在digitalocean上有ubuntu服务器,我想在我的服务器上为某人提供一个用于其域的文件夹,我的问题是,我不希望该用户看到我的文件夹或文件,也不希望能够移出他们的文件夹。
如何限制该用户在其文件夹中,而不允许他移出并查看其他文件/目录?
我在digitalocean上有ubuntu服务器,我想在我的服务器上为某人提供一个用于其域的文件夹,我的问题是,我不希望该用户看到我的文件夹或文件,也不希望能够移出他们的文件夹。
如何限制该用户在其文件夹中,而不允许他移出并查看其他文件/目录?
Answers:
我通过这种方式解决了我的问题:
$ sudo addgroup exchangefiles
$ sudo mkdir /var/www/GroupFolder/
$ sudo chmod g+rx /var/www/GroupFolder/
$ sudo mkdir -p /var/www/GroupFolder/files/
$ sudo chmod g+rwx /var/www/GroupFolder/files/
$ sudo chgrp -R exchangefiles /var/www/GroupFolder/
之后,我转到/etc/ssh/sshd_config
并添加到文件末尾:
Match Group exchangefiles
# Force the connection to use SFTP and chroot to the required directory.
ForceCommand internal-sftp
ChrootDirectory /var/www/GroupFolder/
# Disable tunneling, authentication agent, TCP and X11 forwarding.
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
现在,我要将带有奥巴马名称的新用户添加到我的组中:
$ sudo adduser --ingroup exchangefiles obama
现在一切都完成了,因此我们需要重新启动ssh服务:
$ sudo service ssh restart
注意:用户现在无法在file
目录中执行任何操作,
我的意思是他的所有文件都必须位于文件文件夹中。
sudo su - obama
,但仍然可以看到其他人的文件@badr
限制是一个明智的问题,必须一致定义。您可以做的是为用户定义一个受限制的外壳程序作为其默认外壳程序。
例如,在中,将/bin/rksh
(受限的kornshell)设置为用户的默认外壳,而不是用户的预定义外壳/etc/profile
。
注意:如果您的系统上不存在具有该名称的可执行文件,则创建一个硬链接ln /bin/ksh /bin/rksh
,ksh
并根据其名称确定是否受限制。
所述受限制的壳将(例如)防止做一个cd
命令,或指定与命令/
的调用(显式路径),并且它不允许改变PATH
,SHELL
或ENV
可变的,并且也禁止输出重定向。
你可以仍然提供预定义的 shell脚本,将(在脚本执行者控制!)允许用户在一个不受限制的环境中运行该脚本具体(S)的用户。
该命令chroot
允许您为用户创建受限根目录,此问题解释了其概念chroot
以及如何使用它。
更新:搜索在数字海洋上设置的chroot监狱,带来了针对其环境的进一步文档。我认为这是与您可能需要的一对有关的夫妇。
如何配置Chroot环境以在Ubuntu 12.04 VPS上进行测试
这里有一个它涉及到jailkit,这FloHimself建议。