ID:Computer-network
Linux 对于文件权限管理是建立和全面的,但是用户一般会在权限的设置上形成疏失,本文介绍文件系统的权限和安全。
1. 锁定系统重要文件
系统运维人员有时候可能会遇见通过Root用户都不能更改或删掉某个文件的情况,产生这些情况的大部分诱因可能是这个文件被锁定了。在Linux下锁定文件的命令是chattr,通过这个命令可以更改ext2、ext3、ext4文件系统下文件属性,但是这个命令必须有超级用户Root来执行。和这个命令对应的命令是lsattr,这个命令拿来查询文件属性。
通过 chattr 命令更改文件或目录的文件属性才能提升系统的安全性,下面简单介绍下chattr和lsattr两个命令的用法。
lsattr拿来查询文件属性,用法比较简单,其句型格式如下:
lsattr[-RVadlpv][文件]
常用参数如下所示:
-a:列出目录中的所有文件,包括以.开头的文件。
-d:显示指定目录的属性。
-R:以递归的方法列举目录下所有文件及子目录以及属性值。
-v:显示文件或目录版本。
chattr命令的句型格式如下:
chattr[-RV][-v version][mode]文件或目录。
主要参数涵义如下:
-R:递归更改所有的文件及子目录。
-V:详细显示更改内容,并复印输出。
其中,mode部份拿来控制文件的属性,常用参数如下所示:
+:在原有参数设定基础上,追加参数。
-:在原有参数设定基础上,移除参数。
=:更新为指定参数。
a:即 append,设定该参数后,只能向文件中添加数据,而不能删掉。常用于服务器日志文件安全,只有Root用户能够设置这个属性。
c:即compresse,设定文件是否经压缩后再储存。读取时须要经过手动解压操作。
i:即 immutable,设定文件不能被更改、删除、重命名、设定链接等,同时不能写入或新增内容。这个参数对于文件系统的安全设置有很大帮助。
s:安全删掉文件或目录,即文件被删除后硬碟空间被全部收回。
u:与s参数相反,当设定为u时,系统会保留其数据块便于之后才能恢复删掉这个文件。这些参数中,最常用到的是a和i,参数a常用于服务器日志文件安全设定,而参数i更为严格,不容许对文件进行任何操作,即使是Root用户。
在Linux系统中,如果一个用户以Root的权限登入或某个进程以Root的权限运行,那么它的使用权限就不再有任何的限制了。因此,攻击者通过远程或本地功击手段获得了系统的Root权限将是一个灾难。在这些情况下,文件系统将是保护系统安全的最后一道防线,合理的属性设置可以最大限度地减少攻击者对系统的破坏程度,通过chattr命令锁定系统一些重要的文件或目录,是保护文件系统安全最直接、最有效的手段。
对一些重要的目录和文件可以加上“i”属性,常见的文件和目录如下所示:
root@kali:~/chattr-R+i/bin/boot/lib/sbin
root@kali:~/chattr-R+I/usr/bin/usr/include/usr/lib/usr/sbin
root@kali:~/chattr+i/etc/passwd
root@kali:~/chattr+i/etc/shadow
root@kali:~/chattr+i/etc/hosts
root@kali:~/chattr+i/etc/resolv.conf
root@kali:~/chattr+i/etc/fstab
root@kaii:~/chattr+i/etc/sudoers
对一些重要的日志文件可以加上“a”属性,如下所示:
root@kali:~/chattr+a/var/log/messages
root@kali:~/chattr+a/var/log/wtmp
对重要的文件进行加锁,虽然才能提升服务器的安全性,但是也会带来一些不便。例如,在软件的安装、升级时可能须要除去有关目录和文件的immutable属性和append-only属性,同时,对日志文件设置了append-only属性,可能会使日志轮换(logrotate)无法进行。因此,在使用chattr命令前,需要结合服务器的应用环境来权衡是否须要设置immutable属性和append-only属性。
另外,虽然通过chattr命令更改文件属性才能提升文件系统的安全性,但是它并不适宜所有的目录。chattr命令不能保护/、/dev、/tmp、/var等目录。
根目录不能有不可更改属性,因为假如根目录具有不可更改属性,那么系统根本没法工作:/dev在启动时,syslog须要删掉并重新构建/dev/log套接字设备,如果设置了不可更改属性,那么可能出问题;/tmp目录会有好多应用程序和系统程序须要在这个目录下构建临时文件,也不能设置不可更改属性;/var 是系统和程序的日志目录,如果设置为不可更改属性,那么系统写日志将难以进行,所以也不能通过chattr命令保护。
2. 文件权限检测和更改
系统中若果有不正确的权限设置,可能会殃及整个系统的安全,下面列出查找系统不安全权限的方式。
(1)查找系统中任何用户都有写权限的文件或目录,查找文件,如下所示:
root@kali:~# find/-type f-perm-2-o-perm-20 | xargs ls-al
查找目录,如下所示:
root@kali:~# find/-type d-perm-2-o-perm-20 |xargs ls-ld
(2)查找系统中所有含“s”位的程序。
find/-type f-perm-4000-o-perm-2000-print | xargs ls –al
含有“s”位权限的程序对系统安全恐吓很大,通过查找系统中所有具有“s”位权限的程序,可以把个别不必要的“s”位程序除去,这样可以避免用户滥用权限或提高权限的可能性。
(3)检查系统中所有suid及sgid文件。
find/-user root-perm-2000-print-exec md5sum {} \;
find/-user root-perm-4000-print-exec md5sum {} \;
将检测的结果保存到文件中,可在之后的系统检测中作为参考。
(4)检查系统中没有属主的文件
find/-nouser-o –nogroup
没有属主的孤儿文件比较危险,往往成为黑客借助的工具,因此,找到这种文件后,要么删掉掉,要么更改文件的属主,使其处于安全状态。