Ale*_*lex 1 file-permissions user-permissions
我的问题是关于在以特定用户身份访问文件时出现“权限被拒绝”错误时的一般故障排除,这里是一个具体示例,我可以在其中使用一些额外的帮助:
作为用户“builder”,我的主目录中有一个文件夹“repo”,它属于“builders”组。它目前是这样写的:
$ pwd
/home/builder/repo
$ ls -la
total 4
drwxr-sr-x 2 builder builders 20 Jun 9 02:28 .
drwxr--r-- 4 builder builder 123 Jun 7 23:36 ..
-rw-rw-r-- 1 builder builders 5 Jun 9 02:18 status
Run Code Online (Sandbox Code Playgroud)
因此,我可以看到“builders”组中的每个人都应该能够访问该“状态”文件。应该注意的是,作为“构建器”用户,我可以阅读它,文件没有损坏和可读,即cat /home/builder/repo/status返回其内容。
但是,由于某种原因,我无法以另一个用户身份访问它 - 'ec2-user' 恰好在 builders 组中:
$ whoami
ec2-user
$ groups
ec2-user adm wheel systemd-journal docker builders
$ ls -la /home/builder/repo/status
ls: cannot access /home/builder/repo/status: Permission denied
$ cat /home/builder/repo/status
cat: /home/builder/repo/status: Permission denied
Run Code Online (Sandbox Code Playgroud)
我显然遗漏了一些东西,但我仍然试图回答为什么属于同一组的用户无法访问该文件。还有什么可以告诉我我需要做什么(例如作为超级用户或所有者)来正确授予对目录/文件的组访问权限 - 或者只是找出为什么读取权限对某些用户不起作用?我为自己找到的唯一答案就是仔细检查所有权信息和访问控制位,但在上面的示例中,一切看起来都不错。
您收到权限被拒绝错误,因为该/home/builder目录缺少x组和其他人的(执行)位。这可以防止组成员和其他人进入/home/builder目录或访问下面的任何内容。
根据是否只是意外设置的情况,您可以将组的x(执行)位添加到/home/builder
chmod g+x /home/builder
Run Code Online (Sandbox Code Playgroud)
如果您希望组成员仅访问子文件夹并阻止他们列出 的内容/home/builder,您可以添加x(执行)位并r从文件夹中删除(读取)位。
chmod g+x,g-r /home/builder
Run Code Online (Sandbox Code Playgroud)
您可能还想像上面一样更改o(其他人)的权限或将其完全删除。
对于此类问题namei非常有用,因为它可以显示路径下文件的所有权限。您应该以有权获得所需输出的用户身份运行它。
# namei -olm /tmp/test/testdir/status
f: /tmp/test/testdir/status
dr-xr-xr-x root root /
drwxrwxrwt root root tmp
drwxr-x--x root root test
drwxr-xr-x root root testdir
-rw-r--r-- root root status
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5266 次 |
| 最近记录: |