一、root创建的文件所属组继承该目录的所属组
首先,您需要确保该目录的属组已经设置为您想要的组。
然后,您可以使用以下命令来设置该目录的默认权限:
chmod g+s /path/to/directory
这将设置该目录的默认权限为包括该目录的属组,并且所有在该目录下创建的文件和子目录都将继承该目录的属组。
注意:该命令只会影响在该目录下创建的新文件和子目录,而不会影响已经存在的文件和子目录的权限。如果您需要更改已经存在的文件和子目录的权限,请使用适当的命令进行更改。
二、root 用户在创建文件时默认继承目录的权限
在 Linux 中,默认情况下,使用 touch 命令创建新文件时,新文件不会继承父目录的权限。这是因为 touch 命令会根据系统的默认权限模式创建新文件,而不会直接继承父目录的权限。
umask 值定义了新文件和目录的默认权限掩码,决定了创建文件或目录时的默认权限。
默认情况下,umask 值为 0022,表示新文件的权限为 644,新目录的权限为 755。
说白了,我们其实不能关于读写权限,我们是不能继承父目录的读写权限,新建文件的读写权限完全由umask控制。父目录的权限仅影响新文件的所属用户组。
因为,当root创建新文件时候,我们需要什么权限,最好自己修改一下,比如,你想让root创建的文件,所属组具有写权限,对应前面的 让在某目录创建的文件所属组继承该目录的所属组 章节的描述,我们改umask即可。
一、二章节结合,我们可以解决一个需求场景:root用户和普通用户都要操作同一个文件,权限如何处理?
场景描述:一些root用户和普通用户都要操作同一个文件不能因为root创建了,普通用户就操作不了。
实现思路:
- 首先,您需要确保该目录的属组已经设置为您想要的组
- root用户创建文件让继承父目录所属组 chmod g+s xxx
- umask让默认创建文件或目录读写执行权限和你所属组一致。
三、 linux配置修改umask
在 Linux 中,umask 值用于控制新创建的文件和目录的默认权限。umask 值是一个八进制数,表示权限掩码。它与文件和目录权限进行按位与运算,以确定新创建的文件和目录的最终权限。
在 umask 值中,每个数字位对应一组权限位(所有者权限、组权限和其他用户权限)。具体来说,umask 值的每一位对应于文件权限的相应位,其中:
0 表示对应位的权限位将被保留(不被屏蔽),即允许该权限。
2 表示对应位的权限位将被屏蔽,即不允许该权限。
在Linux系统中umask值代表的是我们创建新文件/目录的默认权限设置,系统root账号默认的umask的值为0022 普通账号的umask的值为0002。
查看umask值
使用命令umask命令可以查看当前帐号umask的值
[root@RedHat8-2 ~]# umask
0022
[root@RedHat8-2 ~]# umask -S
u=rwx,g=rx,o=rx
可以看到umask值有四位数字,第一位数字代表的是特殊权限忽略,后三位数字为我们看到的文件/目录的默认权限。
文件默认权限
对于目录,默认权限=777-umask
对于文件,默认权限=666-umask(文件默认无执行权限)
root:目录 777-022=755
root:文件 666-022=644
非root用户:目录 777-002=775
非root用户: 文件 666-002=664
权限对应数字
rwx rwx rwx
第一部分(user) 读: r-- 4
第二部分(group)写: -w- 2
第三部分(其它) 执行: --x 1
如何修改默认umask值
umask 022
但是这种方式并不能永久更改umask的值,只是将当前的shell临时更改
如果要永久更改umask的值,可以将命令添加至/etc/profile或/etc/bashrc文件中
要修改默认值, 请在您的 shell 配置文件中或者 /etc/profile 文件中写入一个新的 umask 值
vi /etc/profile
umask 022
source /etc/profile