如何在 Linux 中访问文件时解决“权限被拒绝”错误?

如何在 Linux 中访问文件时解决“权限被拒绝”错误?

我的问题是关于以特定用户身份访问文件时出现“权限被拒绝”错误时的常规故障排除,这里有一个具体的例子,我可以使用一些额外的帮助:

作为用户“builder”,我的主目录中有一个属于组“builders”的文件夹“repo”。它当前内容如下:

$ 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

因此,我可以看到“builders”组中的每个人都应该能够访问该“status”文件。需要注意的是,作为“builder”用户,我可以读取它,文件未损坏且可读,即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

我显然遗漏了一些东西,但我仍然无法回答为什么属于同一组的用户无法访问该文件。还有其他东西可以告诉我需要做什么(例如作为超级用户或所有者)才能正确授予目录/文件的组访问权限 - 或者只是找出为什么读取权限对某些用户不起作用?我自己找到的唯一答案就是仔细检查所有权信息和访问控制位,但在上面的例子中一切看起来都很好。

答案1

你得到没有权限错误,因为/home/builder目录缺少x组和其他人的 (执行) 位。这会阻止组成员和其他人更改/home/builder目录或访问其下的任何内容。

这取决于如果只是意外设置了什么,你可以将x组的(执行)位添加到/home/builder

chmod g+x /home/builder  

如果您希望组成员仅访问子文件夹并阻止他们列出内容/home/builder,您可以添加(执行)位并从文件夹中x删除(读取)位。r

chmod g+x,g-r /home/builder

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

相关内容