Linux就该这么学
上QQ阅读APP看书,第一时间看更新

5.4 文件的隐藏属性

Linux系统中的文件除了具备一般权限和特殊权限之外,还有一种隐藏权限,即被隐藏起来的权限,默认情况下不能直接被用户发觉。有用户曾经在生产环境和RHCE考试题目中碰到过明明权限充足但却无法删除某个文件的情况,或者仅能在日志文件中追加内容而不能修改或删除内容,这在一定程度上阻止了黑客篡改系统日志的图谋,因此这种“奇怪”的文件也保障了Linux系统的安全性。

5.4.1 chattr命令

chattr命令用于设置文件的隐藏权限,格式为“chattr [参数]文件”。如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加“+参数”,如果想要把某个隐藏功能移出文件,则需要追加“-参数”。chattr命令中可供选择的隐藏权限参数非常丰富,具体如表5-6所示。

表5-6 chattr命令中用于隐藏权限的参数及其作用

为了让读者能够更好地见识隐藏权限的效果,我们先来创建一个普通文件,然后立即尝试删除(这个操作肯定会成功):

        [root@linuxprobe ~]# echo "for Test" > linuxprobe
        [root@linuxprobe ~]# rm linuxprobe
        rm: remove regular file ‘linuxprobe'? y

实践是检验真理的唯一标准。如果您没有亲眼见证过隐藏权限强大功能的美妙,就一定不会相信原来Linux系统会如此安全。接下来我们再次新建一个普通文件,并为其设置不允许删除与覆盖(+a参数)权限,然后再尝试将这个文件删除:

        [root@linuxprobe ~]# echo "for Test" > linuxprobe
        [root@linuxprobe ~]# chattr +a linuxprobe
        [root@linuxprobe ~]# rm linuxprobe
        rm: remove regular file ‘linuxprobe'? y
        rm: cannot remove ‘linuxprobe': Operation not permitted

可见,上述操作失败了。

5.4.2 lsattr命令

lsattr命令用于显示文件的隐藏权限,格式为“lsattr [参数]文件”。在Linux系统中,文件的隐藏权限必须使用lsattr命令来查看,平时使用的ls之类的命令则看不出端倪:

        [root@linuxprobe ~]# ls -al linuxprobe
      -rw-r--r--. 1 root root 9 Feb 12 11:42 linuxprobe

一旦使用lsattr命令后,文件上被赋予的隐藏权限马上就会原形毕露。此时可以按照显示的隐藏权限的类型(字母),使用chattr命令将其去掉:

        [root@linuxprobe ~]# lsattr linuxprobe
        -----a---------- linuxprobe
        [root@linuxprobe ~]# chattr -a linuxprobe
        [root@linuxprobe ~]# lsattr linuxprobe
        ---------------- linuxprobe
        [root@linuxprobe ~]# rm linuxprobe
        rm: remove regular file ‘linuxprobe'? y