我在 digitalocean 上有 ubuntu 服务器,我想在我的服务器上为某人的域提供一个文件夹,我的问题是,我不希望该用户看到我的文件夹或文件,或者能够移出他们的文件夹。
我怎样才能限制该用户在其文件夹中并且不允许他移出并查看其他文件/目录?
答案1
我通过这种方式解决了我的问题:
创建一个新组
$ sudo addgroup exchangefiles
创建chroot目录
$ 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
目录外执行任何操作
我的意思是他的所有文件都必须在文件夹中。
答案2
限制是一个明智的问题,并且必须对其进行一致的定义。你能做的就是定义一个受限外壳为用户作为他的默认外壳。
例如,/bin/rksh
在 中将(受限的 kornshell)而不是用户的预定义 shell 设置为该用户的默认 shell /etc/profile
。
笔记:如果您的系统上不存在具有该名称的可执行文件,则创建一个硬链接ln /bin/ksh /bin/rksh
,并ksh
根据其名称确定它是否受到限制。
这受限外壳将(例如)阻止执行命令或在调用中cd
使用(显式路径)指定命令,并且它不允许更改、或变量,并且还禁止输出重定向。/
PATH
SHELL
ENV
你能仍然提供预定义的shell 脚本给用户,将(在脚本实现者的控制下!)允许用户在不受限制的环境中运行该特定脚本。
答案3
该命令chroot
允许您为用户创建受限制的根目录,这问题解释了它的概念chroot
以及如何使用它。
更新:正在寻找数字海洋上设立的 chroot 监狱,提出针对其环境的更多文档。我认为这里有一些与您可能需要的相关。
如何配置 Chroot 环境以在 Ubuntu 12.04 VPS 上进行测试