如何限制用户只能访问一个文件夹并且不允许他们移出他的文件夹

如何限制用户只能访问一个文件夹并且不允许他们移出他的文件夹

我在 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使用(显式路径)指定命令,并且它不允许更改、或变量,并且还禁止输出重定向。/PATHSHELLENV

仍然提供预定义的shell 脚本给用户,将(在脚本实现者的控制下!)允许用户在不受限制的环境中运行该特定脚本。

答案3

该命令chroot允许您为用户创建受限制的根目录,这问题解释了它的概念chroot以及如何使用它。

更新:正在寻找数字海洋上设立的 chroot 监狱,提出针对其环境的更多文档。我认为这里有一些与您可能需要的相关。

如何配置 Chroot 环境以在 Ubuntu 12.04 VPS 上进行测试

如何允许 chroot 被监禁用户进行受限制的 SSH 访问

这是与监狱相关的一个, 哪个弗洛本人建议。

相关内容