umask是一个Linux命令,用于设置新创建文件/目录权限的掩码。在Linux中,每个文件和目录都有一个权限掩码,用于控制文件/目录的读、写和执行权限。umask命令用于设置掩码,从而限制新创建文件/目录的权限。
umask的取值范围是0到777,每一位代表一种权限,分别为读、写和执行。umask的值会从默认的权限掩码中减去,得到新创建文件/目录的权限。
例如,如果umask的值为022,那么新创建的文件的权限掩码就是644(666减去022),新创建的目录的权限掩码就是755(777减去022)。
umask命令的语法为:
umask [-S] [mode]
# 其中,-S选项用于以符号方式显示当前umask值
# mode参数用于设置umask值。如果不指定mode参数
# 则umask命令会显示当前umask值
例如,要将umask设置为022,可以执行以下命令:
umask 022
要以符号方式显示当前umask值,可以执行以下命令:
[root@localhost ~]# umask -S
u=rwx,g=rx,o=rx
# 其中,u表示用户权限
# g表示组权限
# o表示其他用户权限
# r表示读权限
# w表示写权限
# x表示执行权限
# 这个输出结果表示当前umask值为002,即新创建的文件权限为664,新创建的目录权限为775。
想不到吧linux还有隐藏属性,这些隐藏的属性确实对系统有很大帮助,尤其是在系统安全上面,非常重要。先强调的是,下面的chattr命令只能在 ext2、ext3、ext4的Linux传统文件系统上面完整生效,其他文件系统可能就无法完整的支持这个命令了,例如xfs仅支持部分参数而已,下面我们就来谈谈如何设置与检查这些隐藏的属性。
chttr [+-=] [ASacdistu] [文件名或目录名]
选项参数:
+ # 添加属性
- # 删除属性
= # 设置属性(覆盖原有属性)
-A # 当设置了A这个属性时,若你在存取此文件(或目录)时,它的存取时间atime将不会被修改,可避免I/O较慢的机器过度的读写磁盘。(目前建议使用文件系统挂载参数处理这个项目)
-S(大写) # 一般文件是非同步写入磁盘的,如果加上S这个属性时,当你进行任何文件的修改,该修改会【同步】写入磁盘中
-a # 只能添加文件,不能删除或修改文件,适用于需要保留文件的情况,如日志文件
-c # 这个属性设置之后,将会自动的将此文件【压缩】,在读取的时候将自动解压缩,但是在存储的时候,将会先进行压缩然后再存储
-d # 当dump程序被执行的时候,设置d属性将可是该文件(目录)不会被dump备份
-i # - i属性:表示不可更改(immutable),即该文件或目录不能被修改、删除、重命名或链接;
-s(小写) # 当文件设置了s属性时,如该文件被删除,他将会被完全的从硬盘删除,所以如果误删,完全无法恢复
-u # 与s相反的,当使用u来配置文件时,如果该文件被删除,则数据内容其实还存在磁盘中,可以使用来恢复该文件
注意①:属性设置常见的是a与i的设置值,而且很多设置值必须要是root才能设置
注意②:xfs文件系统仅支持AadiS而已
请尝试到/tmp下面建立文件,并加入i参数,尝试删除看看
[root@localhost tmp]# touch csqchattr.txt
[root@localhost tmp]# chattr +i csqchattr.txt
[root@localhost tmp]# rm -rf csqchattr.txt
rm: 无法删除"csqchattr.txt": 不允许的操作
# 看到了吗?连root也没有办法删除这个文件,赶紧取消参数
[root@localhost tmp]# chattr -i csqchattr.txt
这个命令是很重要的,尤其是在系统的数据安全上面。由于这些属性是隐藏性质,所以需要以lsattr才能看到属性。
lsattr [-adR] [文件名或目录名]
选项参数
-a # 只能向文件中添加数据,不能修改或删除文件中已有的数据;
-d # 如果指定的路径是目录,则只列出目录本身的属性信息,而不列出目录中的文件或子目录的属性信息;
-R # 递归列出指定目录及其子目录下所有文件或目录的属性信息;
我们添加一些隐藏属性参数然后使用lsattr查询他
[root@localhost tmp]# chattr +diSa csq.txt
[root@localhost tmp]# lsattr csq.txt
--S-iad--------- csq.txt
总结:使用chattr设置后,可以利用lsattr来查看隐藏的属性。不过,这两个命令在使用上必须要特别小心,否则会造成很大困扰。
例如:某天你心情不错将 /etc/shadow 这个重要的密码记录文件设置位具有i属性,那么过滤若干条之后,你突然要新增用户,却一只无法增加,别怀疑,赶紧将i的属性去掉。
在Linux系统中,文件有三种特殊权限,分别是SUID、SGID和SBIT。这些权限可以控制文件的访问和删除权限
SUID权限表示当普通用户执行该文件时
,会以文件所有者的身份来运行该文件
,这通常用于需要特殊权限才能运行的程序。
SGID权限表示一个目录中创建的文件的所属组将会与该目录的所属组相同,这通常用于多个用户需要共享文件的情况下
,可以将文件和目录的所属组设置为相同的组,以便多个用户进行文件共享。
SBIT权限表示在一个目录中,只有文件的所有者、目录所有者或root用户才能够删除该文件
,这通常用于公共的目录,以免其他用户误删其他用户的文件。
例如:
SUID权限可以用于passwd命令,只有root用户才能更改密码,而其他用户通过执行passwd命令可以以root用户的身份修改密码;
SGID权限可以用于多个用户需要共享一个目录下的文件,例如共享文件夹;
SBIT权限可以用于公共目录,如/tmp,以确保其他用户不能删除其他用户的文件。
前面介绍过SUID与SGID的功能,那么如何配置文件使成为具有SUID与SGID的权限呢?现在你应该已经知道数字形成更改权限的方式为【三个数字】的组合,那么如果在这三个数字之前再加上一个数字的话,最前面的那个数字就代表这几个权限
注意:SUID不是用在目录上,SBIT不是用在文件上
以下内容均为实验案例
假设要将一个文件权限改为【-rwsr-xr-x】时,由于s在用户权限中,所以是SUID,因此,在原先的755之前还要加上4,也就是【chmod 4755 filename】来设置。
[root@localhost tmp]# touch csq # 创建一个测试的空文件
[root@localhost tmp]# chmod 4755 csq ; ls -l csq # 加入具有SUID的权限
-rwsr-xr-x. 1 root root 0 4月 9 20:37 csq
[root@localhost tmp]# chmod 6755 csq ; ls -l csq # 加入具有SUID/SGID的权限
-rwsr-sr-x. 1 root root 0 4月 9 20:37 csq
[root@localhost tmp]# chmod 1755 csq ; ls -l csq # 加入SBIT的功能
-rwxr-xr-t. 1 root root 0 4月 9 20:37 csq
[root@localhost tmp]# chmod 7666 csq ; ls -l csq # 具有空的SUID/SGID权限
-rwSrwSrwT. 1 root root 0 4月 9 20:37 csq
最后一个例子就要特别小心了。怎么会出现大写的S和T呢?不都是小写吗?因为s和t都是取代x这个的权限,但你有没有发现我们执行7666,也就是user,group以及others都没有x这个可执行标志(因为666),所以,这个S与T代表的就是空的。怎么说呢?SUID是表示该文件在执行的时候,具有文件拥有者的权限,但是文件的拥有者都无法执行了,哪来的权限给其他人使用?当然是空的
除了数字以外也可以用符号来出来 其中SUID为 u+s,而SGID为g+s,SBIT则是o+t,如下示例
[root@localhost tmp]# touch qsc
[root@localhost tmp]# chmod u=rwxs,go=x qsc ; ls -l qsc
-rws--x--x. 1 root root 0 4月 9 20:54 qsc
[root@localhost tmp]# chmod g+s,o+t qsc ; ls -l qsc
-rws--s--t. 1 root root 0 4月 9 20:54 qsc
本文参考《鸟哥的Linux私房菜》这本书