关闭对文件夹 1 的访问权限,但开放对文件夹 1/文件夹 2 的访问权限

关闭对文件夹 1 的访问权限,但开放对文件夹 1/文件夹 2 的访问权限

我正在设置本地托管,并且需要像流行的托管服务提供商一样配置用户系统。

例如:我在组(例如“users”)中创建用户“user1”。并且我给了他主文件夹/user/user1

在一些托管服务提供商中,当我们通过 SSH 或 SFTP 连接到我们的帐户时,我们会发现自己处于主目录中(在我的情况下是/user/user1)。但是,我们无法访问/user文件夹。我们无法访问/home/var其他目录,但我们可以访问/bin和其他服务目录。

Chroot这是一件坏事,因为如果我们使用 chroot,我们需要复制用户文件夹中的所有 bin 和一些系统文件(因为用户将使用 shell)。

我只需要关闭用户组对父目录(/user)、我的部分文件夹(/etc/home)和其他/user/文件夹的访问,但授予对主目录的访问权限(对于用户 1 来说为/user/user1)。

我怎样才能做到这一点?

我试过:

sudo chmod 000 /user
sudo chmod 777 /user/user1

但是当我尝试时cd /user/user1出现“权限被拒绝”错误。

如何修复此错误并正确配置?

答案1

要遍历目录,目录需要 +x(执行权限)。要列出目录的内容,目录需要 +r(读取权限)。

[/tmp]$ mkdir -p foo/bar
[/tmp]$ chmod 111 foo
[/tmp]$ cd foo
[/tmp/foo]$ ls
ls: cannot open directory '.': Permission denied
[/tmp/foo]$ cd bar
[/tmp/foo/bar]$ 

1 是八进制权限,用于执行 (+x),但对于所有者、组和其他用户,没有其他权限。在 /users 上,您可能需要 711,因为 root 是所有者(并具有完全控制权),但对于其他人,只有执行权限。因此,我可以切换到子目录,但无法列出目录的内容。

正如其他人所执行的那样,任何人都可以更改到子目录,只要他们知道子目录的名称。

您可能还想研究一下 SELinux 或 Apparmour,它们可以比简单的文件权限更细致、更灵活的方式限制权限。

简而言之:

  • 执行位允许用户进入目录并访问其中的文件和目录。
  • 读取位允许用户列出目录的内容。
  • 写入位允许用户在其中创建文件和目录。
  • 粘滞位仅允许所有者(或根)修改其中的文件或目录。

本文提供了一些关于文件系统权限在 Linux(和其他 Unices)上如何运作的信息。

相关内容