1.3 文件系统安全
1.3.1 锁定系统重要文件
系统运维人员有时候可能会遇到通过root用户都不能修改或者删除某个文件的情况,产生这种情况的大部分原因可能是这个文件被锁定了。在Linux下锁定文件的命令是chattr,通过这个命令可以修改ext2、ext3、ext4文件系统下文件属性,但是这个命令必须由超级用户root来执行。和这个命令对应的命令是lsattr,后者用来查询文件属性。
通过chattr命令修改文件或者目录的文件属性能够提高系统的安全性,下面简单介绍下chattr和lsattr两个命令的用法。
chattr命令的语法格式如下:
- chattr [-RV] [-v version] [mode] 文件或目录
主要参数含义如下:
-R:递归修改所有的文件及子目录。
-V:详细显示修改内容,并打印输出。
其中mode部分用来控制文件的属性,常用参数如表1-2所示。
表1-2 chattr命令的常用参数
这些参数中,最常用到的是a和i,a参数常用于服务器日志文件安全设定,而i参数更为严格,不允许对文件进行任何操作,即使是root用户。
lsattr用来查询文件属性,用法比较简单,其语法格式如下:
- lsattr [-adlRvV] 文件或目录
常用参数如表1-3所示。
表1-3 lsattr命令的常用参数
在Linux系统中,如果一个用户以root的权限登录或者某个进程以root的权限运行,那么它的使用权限就不再有任何的限制了。因此,攻击者通过远程或者本地攻击手段获得了系统的root权限将是一场灾难。在这种情况下,文件系统将是保护系统安全的最后一道防线,合理的属性设置可以最大限度地降低攻击者对系统的破坏程度,通过chattr命令锁定系统一些重要的文件或目录,是保护文件系统安全最直接、最有效的手段。
对一些重要的目录和文件可以加上“i”属性,常见的文件和目录有:
- chattr -R +i /bin /boot /lib /sbin
- chattr -R +i /usr/bin /usr/include /usr/lib /usr/sbin
- chattr +i /etc/passwd
- chattr +i /etc/shadow
- chattr +i /etc/hosts
- chattr +i /etc/resolv.conf
- chattr +i /etc/fstab
- chattr +i /etc/sudoers
对一些重要的日志文件可以加上“a”属性,常见的有:
- chattr +a /var/log/messages
- 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命令保护。
虽然保护/dev、/tmp等目录的安全性无法通过chattr命令实现,但是可以通过另外的方法实现,这些将在下一小节详细介绍。