新建文件所属组设置

问题来源

问题场景1:在Linux进行开发Web程序,Web root目录下某些目录需要被www用户进行写操作,而开发过程中使用的用户假设为mn,新建的目录和文件默认用户/组为mn:mn,这对www用户来讲是不可写的。最简单的办法是使用chown -R mn:www xxx设置用户/组为mn:www。这样每次有新的文件都需要进行设置,十分不方便。

问题场景2:对于运维人员来讲,需要在dirA目录下新建的文件为groupA组,在dirB目录下新建的文件为groupB组。

解决办法

使用Linux下的特殊权限位即可以实现。例如对于问题场景2中的情况,将dirA目录的用户组设置为groupA,然后添加SGID权限,即:

chgrp groupA dirA/
chmod g+s dirA/

这样得到dirA的目录权限为

drwxrwsr-x

以后在dirA下新的目录具有相同的权限,且用户组为groupA;新建的文件用户组同样为groupA。

如果是已经存在的目录需要同样的设置,使用如下命令:

find /some/dir -type d -exec chgrp www {} +
find /some/dir -type d -exec chmod g+s {} +

NB: 上述命令的 {} + 表示将find查找到的所有目录添加到命令后进行执行,而不是对每一个查找到的目录执行一次。

特殊权限知识

Linux下的文件权限除了用户、组、其他的可读(r)、可写(w)、可执行(x)之外,还有三个特殊的权限位,它们是SUID、SGID、SBIT(粘滞位)。

SUID

s出现在文件所有者的x权限位上。
SUID用于可执行文件,使得该文件在执行时具有该文件所有者的权限。
对于没有可执行权限的文件设置SUID,该文件不会具体可执行权限。
chmod u+s somefile

如/usr/bin/passwd的文件。

SGID

s出现在文件所属组的x权限上。
SGID用于文件和目录。

对于目录,设置SGID,在该目录下新建的目录同样有SGID权限和所属组。
对于文件,设置SGID,使用该文件执行时具有所属组的权限。
chmod g+s somefile

SBIT

t出现在文件其他的x权限上。
SBIT用于目录。

设置了SBIT的目录,下新建的文件,只有自己和root可以进行删除。

如/tmp目录。


猜你喜欢

转载自blog.csdn.net/himayan46/article/details/77737344