为什么我不能更改我有权访问的文件的权限?

Eri*_*rik 5 permissions

我以用户“ubuntu”的身份登录到服务器,我得到了如下所示的文件:

-rw-rw-r-- 1 www-data www-data 33150 2012-06-04 22:17 file-a.png
-rw-rw-r-- 1 www-data www-data 36371 2012-06-04 22:15 file-b.png
-rw-rw-r-- 1 www-data www-data 41439 2012-06-04 22:16 file-c.png
Run Code Online (Sandbox Code Playgroud)

ubuntu 用户是 www-data 组的成员:

groups ubuntu
Run Code Online (Sandbox Code Playgroud)

产生

ubuntu : ubuntu www-data
Run Code Online (Sandbox Code Playgroud)

既然我有权访问该文件,那么我不应该能够更改其他权限吗?我不是用户/组方面的专家。所以这让我很困惑。

我正在尝试运行:

chmod o-r *

我意识到我可以很容易地用 sudo 做到这一点,但我试图理解为什么我不能在没有 sudo 的情况下修改文件。

Eli*_*gan 8

只有文件的所有者可以更改其权限

正如jackweirdy评论的那样,只有文件(或root)的所有者才能更改文件的权限。成为对文件具有某种访问权限的组的成员并不赋予更改文件权限的能力。

这个想法是文件归用户所有(无论该用户是否代表真实的人),并且该用户决定谁可以访问该文件。文件的组所有者中的用户(不是所有者)的访问权限由拥有该文件的用户控制。如果文件的组所有者中的任何人都可以更改文件的权限,则此安全模型将被破坏。

例如,在您的特定情况下考虑这些权限:

-rw-rw-r--
Run Code Online (Sandbox Code Playgroud)

所有者可以读取和写入文件,但不能执行它。group-owner 中的用户除了文件的所有者之外,也可以读写文件,但不能执行。其他人可能只读取文件。

假设www-data(或有能力以 aswww-data或 as运行命令的人root)设置这些权限的目的是防止组所有者中的其他用户执行该文件。如果组所有者中的其他用户可以更改权限,他们可以运行:

chmod g+x file-a.png
Run Code Online (Sandbox Code Playgroud)

然后他们将获得执行文件的能力。这种能力会使组权限变得毫无价值。

相反,用户权限的原因,即使用户拥有的文件,是不是要限制从做与文件什么的主人,相反却是为了保护用户从与他们没有文件做事情到做。例如,不是程序的文件,或者可能是程序但刚刚从不受信任的来源(如 Internet)获得的文件,为了他们自己的利益,即使对于所有者,也倾向于将执行位设置为 0。在这种情况下,所有者能够更改它是有帮助和必要的。

与允许所述基团的所有者(谁不是所有者)的成员改变权限的单独的问题是,这是不占由单独的能力rwx。即使该组具有读取、写入和执行权限,也不一定意味着他们应该能够更改权限。(例如,假设您有一个文件的所有者不是组所有者的成员。如果组所有者的成员可以更改权限,他们可以剥夺所有者的权限。所有者可以将其改回.. .但这仍然会破坏用户安排的使用该文件的任何自动化任务。)

让人们成为所有者

当文件由www-data不代表任何实际人员的用户拥有时,您可能希望允许某些人以该用户的身份执行操作。sudo不仅有助于允许选择的用户以root. 它还有助于允许选择用户以其他指定用户的身份运行命令。您可以进行设置,以便www-data组中的每个人都能够以www-data用户身份运行命令,包括更改www-data. (不过,请确保您了解其中的含义。根据您的系统配置方式,用户www-data可能能够将任务安排为作为 运行www-data,并且能够www-data 对任何进程www-data拥有的任何文件和任何进程执行任何操作运行为.)

man sudoers有关如何设置的信息,请参阅。如果您决定要这样做并且遇到问题,您可以发布一个单独的问题。

允许非所有者更改文件的权限?

我认为有可能允许一些不拥有文件的用户使用Access Control Lists更改部分或全部文件的权限。不过,我几乎没有在 Ubuntu 上使用过 ACL。如果您有兴趣完成此操作,您可能想发布另一个问题,询问是否可行,如果可行,如何操作。


ash*_*ash 1

基本上,您的权限只允许www-data用户或 www-data 组中的任何用户进行读写访问。只有所有者可以更改文件或目录的组权限以及用户所属的组权限之一。

在您的情况下,Ubuntu 无法更改权限,因为 Ubuntu 不拥有这些文件,并且无权这样做,只有 www-data 或 root 可以更改此权限。