在Linux系统中,除了基本的 r、w、x 权限外,在Linux的Ext2/Ext3文件下,我们还可以设置其他的系统隐藏属性。这部分隐藏属性可用chattr来设置,而用lsattr来查看,最重要的属性就是可以设置其不可修改的特性,连文件所有者都不能进行修改。该特性在安全机制方面有相当重要的应用。
一、umask的用法
作用:umask指定“当前用户在新建文件或目录时的权限默认值”。查看默认权限的方式有两种,一种是直接输入umask,此时可以看到数字形态的权限设置分数;另一种是加入-S(Symbolic)参数,会以符号类型的方式显示出权限。
格式:umask xxx
举例:
umask数字权限解析:
直接输入umask后,会显示一个四位数字,第一位数字代表特殊权限用的(我们先暂时忽略),后三位代表权限。在默认权限的属性上,目录与文件不一样。因为一般文件通常用于记录数据,创建时不应该有执行权限。因此,默认情况如下:
- 若用户创建文件,则默认没有可执行权限,即只有r、w权限,也就是权限最大为666。默认权限如下:-rw-rw-rw-
- 若用户新建目录,由于x权限与是否可以进入该目录有关,所以默认权限均开放,最大为777。默认权限如下:drwxrwxrwx
但需注意的是:umask的权限分数采用“补码”的形式,即指“该默认值需要减去的权限”。
默认权限-umask所接权限==>chmod代表的权限
以umask 022 为例,文件所有者owner并没有被拿掉任何权限,group和others的权限被拿走了2(也就是没有w写的权限)。
所以当用户:
- 创建文件时:(- rw- rw- rw-)-(- --- -w- -w-)==>- rw- r-- r-- 666-022==>644, 即 chmod 644
- 新建目录时:(d rwx rwx rwx)-(d --- -w- -w-)==>d rwx r-x r-x 777-022==>755,即chmod 755
建议:在umask与权限计算过程,最好使用符号方式计算,使用数字计算时可能会出现一些低级错误。
比如:假设umask分数为003,该umask情况下,
新建的目录权限为:(d rwx rwx rwx)-(d --- --- -wx)==>d rwx rwx r-- 777-003==>774(正确)
新建的文件权限为:(- rw- rw- rw-)-(- --- --- -wx)==>- rw- rw- r-- 666-003==>663,663字符表达为- rw- rw- -wx ,为什么跟前面字符计算的结果不一样呢?仔细想想看:原本文件就默认没有x执行权限,怎么突然冒出来了呢?所以,663的计算结果完全不对,在使用数字计算时要特别小心这一点。
二、chattr的用法
作用:设置文件的隐藏属性,但需注意的是该命令只能在Ext2/Ext3的文件系统上生效,其他的文件系统可能无法支持这个命令。
格式:chattr [+-=][ASacdistu] 文件或者目录名
参数:
+ ——增加某一个特殊参数,其他原本存在的参数则不动
- ——删除某一个特殊参数,其他原本存在的参数则不动
= ——仅仅有后面接的参数
a——当设置a参数后,该文件只能增加数据,既不能删除数据也不能修改数据。只有root才能设置这个属性。
i——可以让一个文件“不能被删除、改名,设置连接也无法写入或者添加数据”,只有root才能设置这个属性。这对于系统安全有相当大的保护作用。
举例:
三、lsattr的用法
作用:显示文件的隐藏属性
格式:lsattr [-adR] 文件或目录名
参数:
-a——将隐藏文件的属性也显示出来
-d——如果连接的是目录,仅列出目录本身的属性而非目录内的文件名
-R——连通子目录的数据也一起列出来
举例: