我怎样才能阻止用户访问他们自己的主目录以外的任何内容?
例如,我在 下安装了一个 NTFS 分区/media/ntfs
,因此如果用户通过 ssh 登录,他就可以访问此分区。我如何禁止用户退出cd
他们的主目录?
答案1
首先重新评估你的需求。你试图解决的问题是什么?为什么你想阻止用户离开他们的主目录吗?难道不是你不想让他们翻找具体的其他目录——例如其他用户的主目录?
阻止用户离开他们的主目录非常困难。这实际上也有点愚蠢(解释如下)。阻止用户进入您不希望他们进入的目录要简单得多。
首先,是的,你可以给用户一个所谓的受限外壳,请参阅man rbash
。这将阻止他们cd
在其他地方,但仅限于该 shell 内。如果用户启动vi
或nano
(或任何其他能够打开文件的程序),他们可以再次在系统上的任何位置打开文件。事实上,受限 shell 不会阻止例如cat /etc/passwd
。
下一步是 root jail。更多信息请参见社区维基以及这个问题。虽然 root jail 会将用户锁定在一个有围墙的花园中,他们只能访问你故意放在那里的文件和命令,但 root jail 真正的目的是隔离不受信任的软件而不是用户。具体来说,它们是为需要以提升的权限运行的软件准备的——因此根监狱。
另一方面,用户值得信赖:他们必须进行身份验证和无需提升权限即可运行。因此,文件权限足以阻止他们更改不属于他们的文件,并阻止他们查看他们不能查看的内容。要阻止用户阅读文件内容,请使用 删除其全球可读性chmod o-r FILE
。要阻止用户访问目录,请使用 使其全球不可访问chmod o-rwx DIR
。
然而,世界可读性是默认的,理由很充分:用户实际上需要文件系统上的大部分内容。不要因为外面有秘密就把用户锁在家里。
为什么将用户锁定在主目录中有点愚蠢
要执行任何有用的操作,用户需要访问命令和应用程序。这些命令和应用程序位于/bin
和等目录中/usr/bin
,因此,除非您将他们需要的所有命令从这些目录中复制到主目录中,否则用户将需要访问/bin
和/usr/bin
。但这仅仅是个开始。应用程序需要 和 中的库/usr/lib
,/lib
而这些库又需要访问 中的系统资源以及和 中/dev
的配置文件。/etc
/usr/share
这只是只读部分。应用程序也需要/tmp
并且经常/var
需要写入。因此,如果您想将用户限制在他的主目录中,您将不得不将大量内容复制到其中。事实上,几乎整个基本文件系统——您已经拥有它,位于/
。
答案2
我需要仅向用户提供访问权限sam
,/var/xyz
并阻止列出内部其他文件夹的内容/var/
我使用了以下命令序列:
setfacl -R -m user:sam:--- /var/
setfacl -m user:sam:rx /var/
setfacl -R -m user:sam:rwx /var/xyz/
因此,用户可以看到列出的目录,/var/
但看不到除 之外的子目录下的内容/var/xyz
。
答案3
为了完成@Willman 的回答,您只需执行以下操作:
首先,对于用户来说不要列出所有用户的主目录:
chmod 701 /home
但是如果您知道用户主目录的路径,您仍然可以使用 访问它cd
。
因此,您可以只chmod 750
创建所有已创建的用户目录。
但我们想要的是防止任何新的用户的主目录有权限755
。有一个文件负责新用户的配置/etc/adduser.conf
::
只需更改DIR_MODE=0755
为DIR_MODE=0750
答案4
这对我有用:
运行以下命令:
vi /bin/restrictedbash
然后将以下内容添加到文件:
#!/bin/bash bash --restricted
然后使用以下命令更改文件的权限:
chmod 755 /bin/restrictedbash
然后运行以下命令来编辑该
passwd
文件:vi /etc/passwd
然后按如下方式替换属于用户的行:
ali:x:1001:1001:,,,:/home/ali:/bin/bash
和
ali:x:1001:1001:,,,:/home/ali:/bin/restrictedbash
然后用户ali
将被限制在自己的主目录中。