我以用户“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
ubuntu 用户是 www-data 组的成员:
groups ubuntu
生产
ubuntu : ubuntu www-data
那么,既然我有权访问该文件,难道我不应该更改其他权限吗?我不是用户/组方面的专家。所以这让我很困惑。
我正在尝试运行:
chmod o-r *
我意识到我可以轻松地使用 sudo 来完成此操作,但我试图了解为什么不使用 sudo 就无法修改文件。
答案1
只有文件的所有者可以更改其权限。
作为杰克·韦迪注释:只有文件所有者(或root
)才能更改文件的权限。作为对文件具有某种访问权限的组的成员并不意味着有权更改文件的权限。
这个想法是,一个文件归某个用户所有(无论该用户是否代表真实的人),并且该用户决定谁可以访问该文件。文件所有者组中的用户(不是所有者)的访问权限由拥有该文件的用户控制。如果文件所有者组中的任何人都可以更改文件的权限,则此安全模型将被破坏。
例如,考虑这些权限,如您的具体情况:
-rw-rw-r--
所有者可以读取和写入文件,但不能执行文件。文件所有者以外的组所有者中的用户也可以读取和写入文件,但不能执行文件。其他人只能读取文件。
假设www-data
(或有能力以www-data
或身份运行命令的人root
)设置这些权限,目的是阻止组所有者中的其他用户执行该文件。 如果组所有者中的其他用户可以更改权限,他们可以运行:
chmod g+x file-a.png
然后他们将获得执行文件的能力。这种能力将使组权限变得毫无价值。
相反,即使用户拥有该文件,用户权限的原因也不是为了限制所有者对该文件进行任何操作,而是为了保护用户不对他们不拥有的文件进行任何操作想要做。例如,不是程序的文件,或者可能是程序但刚刚从互联网等不受信任的来源获得的文件,往往会将执行位设置为 0,即使对于所有者也是如此,这是为了自己的利益。在这种情况下,所有者能够更改这一点是有帮助且必要的。
允许组所有者成员(不是所有者)更改权限的另一个问题是,这是r
、w
或未说明的单独能力x
。即使组具有读取、写入和执行权限,也不一定意味着他们应该能够更改权限。(例如,假设您有一个文件,其所有者不是组所有者的成员。如果组所有者的成员可以更改权限,他们可以剥夺所有者的权限。所有者可以将其改回……但这仍会破坏用户安排的使用该文件的任何自动任务。)
让人们成为主人
当某个文件归某个用户所有时,www-data
该用户并不代表任何实际的人,您可能希望允许某些人以该用户的身份执行操作。sudo
不仅允许选定的用户以 的身份运行命令root
。 它还允许选定的用户以其他指定用户的身份运行命令。 您可以进行设置,以便www-data
组中的每个人都能够以用户的身份运行命令www-data
,包括更改 拥有的文件的权限www-data
。 (不过,请确保您了解这一点的含义。 根据系统的配置方式, 中的用户www-data
可能能够安排以 的身份运行的任务www-data
,并且能够对 拥有的任何文件执行任何操作www-data
并运行任何进程www-data
。
看man sudoers
了解有关如何设置的信息。如果您决定要这样做但遇到了麻烦,您可以发布一个单独的问题。
允许非所有者更改文件的权限?
我认为可以允许一些不拥有文件的用户使用以下方法来更改文件的部分或全部权限访问控制列表。不过,我几乎没在 Ubuntu 上使用过 ACL。如果您有兴趣实现这一点,您可能想发布另一个问题,询问是否可行,如果可行,如何实现。
答案2
基本上,你的权限允许www-数据用户或 www-data 组内的任何用户仅具有读取和写入访问权限。只有所有者可以更改文件或目录的组权限,以及用户所属的组权限。
在您的情况下,Ubuntu 无法更改权限,因为 Ubuntu 不拥有这些文件,也没有权利这样做,只有 www-data 或 root 可以更改这一点。