我正在设置本地托管,并且需要像流行的托管服务提供商一样配置用户系统。
例如:我在组(例如“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)上如何运作的信息。