如何调试文件系统权限?

如何调试文件系统权限?

当我有一个以 root 身份运行的进程,生成一个作为 www-data 的子进程,然后访问 root 拥有的目录以及 www-data 拥有的子文件夹时,我会收到权限错误,该子文件夹具有符号链接到 www-data 组中的用户所拥有的目录,然后该目录......你明白了。

我到底怎么知道在这个极其复杂的链条中它失败在哪里?我得到的只是没有权限

在不陷入这种特殊情况的细节的情况下,如何开始在 Unix 上调试这样的问题呢?

我只想说

debug_permissions.sh www-data /my/long/symlink/chain

我希望它通过符号链接链并告诉我终点在哪里(www-data 没有权限)。

我知道有一个工具

namei -l /path/

但这并不是很有帮助,因为它不允许我以另一个用户的身份运行(或者至少我不知道如何运行)。

如果我跑步sudo su www-data,我会得到该帐户当前不可用。

我希望能够“成为”www-data 并cd到目录周围看看我看不到的东西。但这并不允许我这样做,而且我不想创建一个新用户只是为了这样做。

答案1

啊哈,这样做是这样的:

sudo -H -u www-data namei /my/long/symlink/chain

www-data我正在尝试调试的用户在哪里

答案2

一般来说,我有几种策略来调试文件系统权限问题。

假设一个名为 的示例用户userWhoShouldHaveAccess应该能够列出目录的内容/dir/with/access/issues,我将在终端中运行它来了解我尝试的任何内容是否有效:

watch sudo -u userWhoShouldHaveAccess ls /dir/with/access/issues

下面让我关注从根目录到我希望用户访问的目录的权限:

cd / && watch namei -l /dir/with/access/issues

我会记住,为了列出目录中的文件,用户必须遍历整个路径/dir/with/access/issues,这意味着用户必须在目标目录中具有可执行权限以及所有父目录

我会记住,对用户的组更改只有在注销并再次登录后才有效,尽管有解决方法为了那个原因。

我可以显示用户 ID 和用户所属的组id userWhoShouldHaveAccess

由于还有访问控制列表除了确定访问权限的所有者/组/其他权限之外,我还将检查这些权限

getfacl /dir/with/access/issues

如果用户应该能够编写,我可以在后台运行它来学习编写工作:

while true; do sudo -u userWhoShouldHaveAccess bash -c '(echo "Test at $(date) by $(whoami)" >> /dir/with/access/issues/test_file);sleep 1';done

这里是 Linux 上文件权限的一些基础知识。

相关内容