Answers:
首先重新评估您的要求。您要解决的问题是什么?为什么要阻止用户离开其主目录?难道不是您不希望他们通过特定的其他目录(例如其他用户的主目录)进行漫游吗?
阻止用户离开其主目录非常困难。实际上,这也有点愚蠢(解释如下)。阻止用户输入您不希望他们输入的目录要简单得多。
首先,是的,您可以为用户提供所谓的受限外壳,请参见man rbash
。这样可以防止它们在cd
其他地方-ing,但是只能在该shell内。如果用户启动vi
或nano
(或任何其他能够打开文件的程序),他们可以再次在系统上的任何位置打开文件。实际上,受限制的外壳不能防止例如cat /etc/passwd
。
下一步是根监狱。有关社区Wiki和此问题的更多信息。尽管根监狱将用户锁定在围墙花园内,在其中他们只能访问您故意放置在其中的文件和命令,但根监狱实际上是用于隔离不受信任的软件而不是用户。特别是,它们适用于需要以提升的特权运行的软件-因此是根监狱。
另一方面,用户是受信任的:他们必须在没有提升特权的情况下进行身份验证和运行。因此,文件许可权足以防止他们更改不拥有的文件,以及避免看到他们一定看不到的东西。为防止用户阅读文件的内容,请使用删除文件的全球可读性chmod o-r FILE
。要使用户不在目录中,请使用使其无法访问chmod o-rwx DIR
。
但是,出于默认原因,世界可读性是默认设置:用户实际上需要文件系统上的大多数内容。不要仅仅因为外面存在秘密而将用户锁定在家里。
为什么将用户锁定在其主目录中有点愚蠢
为了做任何有用的事情,用户需要访问命令和应用程序。这些都是一样的目录/bin
和/usr/bin
,所以,除非你从他们那里需要的所有命令复制到自己的主目录,用户将需要访问/bin
和/usr/bin
。但这仅仅是开始。应用程序需要从图书馆/usr/lib
和/lib
,而这又需要访问系统资源,这是在/dev
中,并配置文件/etc
和/usr/share
。
这只是只读部分。应用程序也希望/tmp
并且经常/var
要写入。因此,如果要将用户限制在其主目录中,则必须将很多内容复制到该目录中。实际上,您可以找到位于的几乎整个基础文件系统/
。
我需要提供访问用户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
。