我们公司正在使用 LDAP 身份验证,可能还有一些我不太了解的事情,所以可能会出现以下问题。我发现chown
命令的行为很奇怪,我不知道这是否正常。这是我的场景:
用户标记的 GID 是 SK001936,标记主目录的所有者组是 SK001778,您可以看到它们并不相同。允许组 SK001778 以用户标记的主目录作为所有者(标记)进行所有操作(rwx),具有:
[mark@machine ~]$ id
uid=48447(mark) gid=41795(SK001936) groups=40119(SUB_SK001936_PPS),41795(SK001936)
[mark@machine ~]$ ls -lad .
drwxrwxr-x 6 mark SK001778 4096 Oct 10 13:30 .
用户michael和mark的GID都是SK001936:
[michael@machine mark]$ id
uid=40570(michael) gid=41795(SK001936) groups=40119(SUB_SK001936_PPS),41795(SK001936)
[mark@machine ~]$ id
uid=48447(mark) gid=41795(SK001936) groups=40119(SUB_SK001936_PPS),41795(SK001936)
用户 michael 无法在用户 mark 的主目录中创建文件。问题是 michael 不属于对 mark 的主目录具有完全 (rwx) 访问权限的组 (SK001778):
[michael@machine mark]$ touch michael
touch: cannot touch `michael': Permission denied
正常情况下,即使用户是文件的所有者,也不能发出 chown。然而,在这个例子中,主目录的所有者(标记)能够更改他自己的主目录的所有者组(从而允许属于该组的用户访问他的主目录):
[mark@machine ~]$ chown mark:SK001936 .
现在有权访问 mark home 目录的组与 michael 的 GID 是同一组,因此 michael 现在可以在 mark 的 home 目录中创建/删除文件/文件夹:
[michael@machine mark]$ touch michael
标记无法更改回其主目录的组所有权(请记住,仅允许 root 根据以下命令发出 chown:为什么不能正常用户chown一个文件):
[mark@machine ~]$ chown mark:SK001778 .
chown: changing ownership of `.': Operation not permitted
我的问题是:即使当 si 时,马克怎么可能能够更改他的主目录的组所有权宣布该 chown 只能由 root 发出。盒子是RedHat 5.6。
答案1
当您chown
以仅更改组的方式使用时,它的作用与 相同chgrp
。文件或目录的所有者可以将组更改为他所属的任何组。
它的工作原理是这样的,因为chown
和chgrp
命令都使用相同的底层chown
系统调用,这允许更改所有者和组。系统调用是应用权限检查的。chown
和命令之间的唯一区别chgrp
是用于指定要进行的更改的语法。
Mark 无法将组更改回 SK001778,因为他不是组 SK001778 的成员(而且他不是 root,不受组成员身份的限制)。
答案2
用户可以使用它来更改组,假设他们属于这些组之一。
例子
假设我属于以下组:
$ groups
saml vboxusers jupiter newgrp
我有一个文件:
$ ls -l | grep afile
-rw-rw-r-- 1 saml saml 0 Oct 10 11:29 afile
所以我像这样更改该文件的组:L
$ chown saml.newgrp afile
$ ls -l | grep afile
-rw-rw-r-- 1 saml newgrp 0 Oct 10 11:29 afile
你也可以chown
像这样使用:
$ chown .saml afile
$ ls -l|grep afile
-rw-rw-r-- 1 saml saml 0 Oct 10 11:29 afile