1. 文件与目录的默认权限与隐藏权限
1.1 文件默认权限:umask
umask就是指定目前用户在建立文件或目录时的权限默认值
1.如何得知umask?
[root@study ~] umask #可得到数字类型的权限设置值
0022 #第一个数字是特殊权限用的,后面三个数字是一般权限
[root@study ~] umask -S #Symbolic,会以符号类型的方式显示出权限
u=rwx,g=rx,o=rx # user=rwx, group=r-x, others=r-x,意味着group去掉w权限,others去掉w权限
umask的数字指的是需要减掉的权限(r:4,w:2,x:1)
范例:
2.如何设置umask
[root@study ~] umask 数字
例如:
将umask设置为002(后三位,一般权限)
[root@study ~] umask 002
(1)root 的 umask 默认是 022
(2)一般身份用户,通常 umask 为002,即保留同一个用户组的写入权力
1.2 文件隐藏属性
隐藏属性对系统安全有很大帮助
chattr命令只能在ext2、ext3、ext4 的 Linux 传统文件系统上面完整生效,其他的文件系统可能就无法完整的支持chattr命令(如xfs仅支持部分参数而已)
1.2.0 chattr(change attribution,配置文件隐藏属性)
用法:
[root@study ~] chattr [+-=][ASacdistu] 文件或目录名称
选项与参数:
+ : 增加某一个特殊参数,其他原本存在的参数不变
- : 删除某一个特殊参数,其他原本存在的参数不变
= : 直接设置参数,且仅有后面只写参数
A : 当设置了A这个属性时,若你在存取此文件(或目录)时,它的存取时间 atime 将不会被修改,可避免 I/O 较慢的机器过度的读写磁盘(目前建议使用文件系统挂载参数处理这个项目)
S : 一般文件时非同步写入磁盘的,如果加上S这个属性时,当你进行任何文件的修改,该修改会【同步】写入磁盘中
a : 【只有root才可设置】当设置a之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root才能设置这属性
c : 这个属性设置之后,将会自动地将此文件【压缩】,在读取的时候将会自动解压缩,但在存储的时候,将会先进行压缩后再存储(对大文件蛮有用)
d : 当dump程序被执行的时候,设置d属性将可使该文件(或目录)不会被dump备份
i : 【只有root才可设置】可让一个文件【不能被删除、改名、设置链接、无法写入或新增数据】,对于系统安全性有相当大的帮助
s : 当文件设置了s属性时,如该文件被删除,它将会被完全的从硬盘删除,如果误删,完全无法恢复
u : 与 s 相反,如果该文件被删除了,则数据内容其实还存在磁盘中,可以使用来恢复该文件
注意1:a与i,只有root才能设置
注意2:xfs系统仅仅支持ASadi而已
范例1:
到 /tmp下面建立文件,并加入 i 的参数,尝试删除看看
[root@study ~] cd /tmp
[root@study tmp] touch attrtest # 建立名为 attrtest 的空文件
[root@study tmp] chattr +i attrtest #给予 i 属性(无法删除、改名、设置链接、无法写入或新增数据)
[root@study tmp] rm attrtest #删除attrtest空文件(因加入i属性,导致无法删除)
rm: remove regular empty file 'attrtest'? y
rm: cannot remove 'attrtest': Operation not permitted
[root@study tmp] chattr -i attrtest #[-i]去掉i属性
1.2.1 lsattr(list attribution,显示文件隐藏属性)
用法:
[root@study ~] lsattr [-adR] 文件或目录
选项与参数:
-a : 将隐藏文件的属性显示出来
-d : 后面是目录时,仅列出目录本身的属性,而非目录内的文件名
-R : 连同子目录的数据也一并列出来
范例:
[root@study tmp] chattr +aiS attrtest
[root@study tmp] lsattr attrtest
--S-ia---------- attrtest
1.3 文件特殊权限:SUID、SGID、SBIT
1.3.0 SUID(Set User Identity)
作用:方便其他用户临时获取当前文件的执行权限
注意:
1.SUID仅可用在二进制程序上,不能够用在shell脚本上(shell脚本只是将很多的二进制执行文件调用而已)
2.!!!SUID对目录无效 !!!
SUID的权限对于一个文件的特殊功能:
- SUID 权限仅对二进制程序有效(binary program)
- 执行者对于该程序来说,需要具有 x 的可执行权限 ( x 权限)
- 本权限仅在执行该程序的过程中有效(run-time)
- 执行者将具有该程序拥有者的权限(owner)
1.3.1 SGID(Set Group Identity)
目录具有SGID(Set Group Identity)的特殊权限时,代表用户在这个目录下面新建的文件的用户组都会与该目录的用户的组名相同
SGID可以针对文件或目录来设置
[root@study ~] ls -l /usr/bin/locate
-rwx--s--x 1 root slocate 40496 Jun 10 2014 /usr/bin/locate
对文件来说,SGID有如下功能:
- SGID对二进制程序有用(binary program)
- 程序执行者对于该程序来说,需具备 x 的权限(x)
- 执行者在执行的过程中将会获得该程序用户组(Group)的支持
范例:
/usr/bin/locate 这个程序去查找 /var/lib/mlocate/mlocate.db 这个文件的内容
[root@study ~] ll /usr/bin/locate /var/lib/mlocate/mlocate.db # ll等价ls -l
-rwx--s--x 1 root slocate 40496 Jun 10 2014 /usr/bin/locate
-rw-r----- 1 root slocate 2349055 Jun 15 03:44 /var/lib/mlocate/mlocate.db
对目录来说,SGID的功能:
- 用户若对于此目录具有r与x的权限时,该用户能够进入此目录
- 用户在此目录下的有效用户组(effective group)将会变成该目录的用户组
- 用途:若用户在此目录下具有 w 的权限(可以新建文件),则用户所建立的新文件,该新文件的用户组与此目录的用户组相同
1.3.2 SBIT(Sticky Bit)
!!!SBIT只针对目录有效!!!
SBIT对目录的作用:
- 当用户对于此目录具有 w、x 权限,即具有写入的权限
- 当用户在该目录下建立文件或目录时,仅有自己与root才有权力删除该文件
范例:
/tmp本身的权限【drwxrwxrwt】任何人都可在 /tmp 内新增、修改文件,但仅有该文件/目录的建立者与 root 能够删除自己的目录或文件
1.3.3 SUID/SGID/SBIT 权限设置
1.3.3.0 数字法设置权限
范例1:
假设要将一个文件权限改为【-rwsr-xr-x】时,由于 s 在用户(user)权限,所以是SUID,因此,在原先755之前还要加上 4 ,也就是【chmod 4755 filename】来设置,此外,还有大写S与大写T的产生
[root@study ~] cd /tmp
[root@study tmp] touch test #建立一个空文件名为test
[root@study tmp] chmod 4755 test; ls -l test #加入SUID权限
-rwsr-xr-x 1 root root 0 Jun 16 02:53 test
范例2:
[root@study ~] cd /tmp
[root@study tmp] touch test #建立一个空文件名为test
[root@study tmp] chmod 6755 test; ls -l test #加入SUID/SGID权限
-rwsr-sr-x 1 root root 0 Jun 16 02:53 test
范例3:
[root@study ~] cd /tmp
[root@study tmp] touch test #建立一个空文件名为test
[root@study tmp] chmod 1755 test; ls -l test #加入SBIT权限
-rwxr-xr-t 1 root root 0 Jun 16 02:53 test
范例4:
[root@study ~] cd /tmp
[root@study tmp] touch test #建立一个空文件名为test
[root@study tmp] chmod 7666 test; ls -l test #具有空的SUID/SGID权限
-rwSrwSrwT 1 root root 0 Jun 16 02:53 test
因为 s 与 t 都是取代 x 这个权限的位置,我们执行的是7666,其中6(rw-)没有 x 权限,即没有可执行权限,所以 S 与 T 代表的是空的。这里文件的owner没有执行权限 x ,连自己都没有可执行权限,也就无法将权限给group和others
1.3.3.1 符号法设置权限
- SUID为u+s(user 的 x 位置加 s )
- SGID为g+s(group 的 x 位置加 s )
- SBIT为o+t(others 的 x 位置加 t )
范例1:
设置权限为【-rws–x--x】
[root@study tmp] chmod u=rwxs,go=x test; ls -l test #u=rwxs,go=x之间不能有空格
-rws--x--x 1 root root 0 Jun 16 02:53 test
范例2:
承接范例1,在上述的文件权限中,加上SGID与SBIT权限
[root@study tmp] chomod g+s,o+t test; ls -l test
-rws--s--t 1 root root 0 Jun 16 02:53 test
1.4 观察文件类型:file
查看某文件的基本信息
[root@study tmp] file ~/.bashrc
/root/.bashrc: ASCII text # bashrc是ASCII的纯文本文件