我怎样才能阻止用户访问他们自己的主目录以外的任何内容?

我怎样才能阻止用户访问他们自己的主目录以外的任何内容?

我怎样才能阻止用户访问他们自己的主目录以外的任何内容?

例如,我在 下安装了一个 NTFS 分区/media/ntfs,因此如果用户通过 ssh 登录,他就可以访问此分区。我如何禁止用户退出cd他们的主目录?

答案1

首先重新评估你的需求。你试图解决的问题是什么?为什么你想阻止用户离开他们的主目录吗?难道不是你不想让他们翻找具体的其他目录——例如其他用户的主目录?

阻止用户离开他们的主目录非常困难。这实际上也有点愚蠢(解释如下)。阻止用户进入您不希望他们进入的目录要简单得多。

首先,是的,你可以给用户一个所谓的受限外壳,请参阅man rbash。这将阻止他们cd在其他地方,但仅限于该 shell 内。如果用户启动vinano(或任何其他能够打开文件的程序),他们可以再次在系统上的任何位置打开文件。事实上,受限 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=0755DIR_MODE=0750

答案4

这对我有用:

  1. 运行以下命令:

    vi /bin/restrictedbash
    
  2. 然后将以下内容添加到文件:

    #!/bin/bash
    bash --restricted
    
  3. 然后使用以下命令更改文件的权限:

    chmod 755 /bin/restrictedbash
    
  4. 然后运行以下命令来编辑该passwd文件:

    vi /etc/passwd
    
  5. 然后按如下方式替换属于用户的行:

    ali:x:1001:1001:,,,:/home/ali:/bin/bash
    

    ali:x:1001:1001:,,,:/home/ali:/bin/restrictedbash
    

然后用户ali将被限制在自己的主目录中。

相关内容