原文发表于《网络安全和信息化》2017年第2期,重新修订之后转发到博客。
文件的扩展属性与文件的权限是两个完全独立的概念,但是通过设置扩展属性,可以限制用户的权限。
为了便于理解,这里以Windows系统为例进行说明。在Windows系统中,选中某个文件之后,右键单击选择“属性”,在“常规”设置中可以选择为文件设置“只读”属性,如图所示。当设置了只读属性之后,任何用户无论他对该文件是否具有写入权限,都无法更改该文件的内容。因而,扩展属性可以被看作是一种优先级比系统权限更高的保护措施。
Linux系统的扩展属性,原理与Windows系统基本相同,而且Linux中可以设置的扩展属性远比Windows系统要更为丰富,不过最常用的只有只读属性(用i表示)和追加属性(用a表示),如果一个文件被设置了追加属性,那么就只能向文件中增加新的数据,而无法删除原有的数据。追加属性通常用于保护日志文件的安全。
root用户在Linux系统中的权限不受任何制约,但属性设置不同于权限设置,即使root用户也无法突破扩展属性的限制。当然root用户可以设置或取消文件的扩展属性,但无论怎样,扩展属性都在系统权限之外,又为我们提供了一种安全保护措施。
在Linux系统中设置扩展属性需要通过chattr命令,命令格式:chattr [-R] +/- i/a 文件
? -R:递归修改所有的文件及子目录,这是一个可选项。
? +:增加扩展属性;
? -:减少扩展属性;
? i:只读属性,增加该属性之后,任何人包括root用户也无权写入更改;
? a:追加属性,增加该属性之后,只能向文件中添加数据,而不能删除原有数据。
通过chattr命令可以锁定系统中一些重要的文件或目录。例如,为/etc/passwd和/etc/shadow文件增加只读属性,这样任何人都无法在系统中添加新的用户,也无法删除系统中原有的用户。[[email protected] ~]# chattr +i /etc/passwdd /etc/shadow
此时再创建用户就会出现错误提示。
[[email protected] ~]# useradd test
useradd:无法打开密码文件
lsattr命令可用于显示文件的扩展属性。
[[email protected] ~]# lsattr /etc/passwd /etc/shadow
----i-------- /etc/passwd
----i-------- /etc/shadow
如果管理员需要对系统中的用户进行操作,则可以去掉/etc/passwd和/etc/shadow文件的只读属性。
[[email protected] ~]# chattr -i /etc/passwd /etc/shadow
[[email protected] ~]# lsattr /etc/passwd /etc/shadow
------------- /etc/passwd
------------- /etc/shadow
为了增强系统安全性,通常可以为以下这些目录和文件增加只读属性:
chattr -R +i /bin /boot /lib /sbin
chattr -R +i /usr/bin /usr/include /usr/lib /usr/sbin
chattr +i /etc/passwd /etc/shadow
chattr +i /etc/hosts /etc/resolv.conf
chattr +i /etc/fstab /etc/sudoers
另外可以对一些重要的日志文件设置追加属性:chattr +a /var/log/messages /var/log/wtmp
需要注意的是,锁定系统关键文件,虽然能够提高系统安全性,但是也会带来一些不便。例如,在软件的安装、升级时可能就需要先去掉有关目录和文件的只读和追加属性。另外,如果对日志文件设置了追加属性,可能会使日志轮换(logrotate)无法进行。因此在使用chattr命令前,需要结合服务器的应用环境来权衡是否需要设置只读和追加属性。
另外,扩展属性并不适用于所有的文件或目录。比如不能通过设置扩展属性来保护/、/dev、/tmp、/var等目录。首先根目录不能设置只读属性,如果根目录具有只读属性,那么系统将无法工作。/dev目录在启动时,syslog需要删除并重新建立/dev/log套接字设备,如果设置了只读属性,那么就可能会出问题。/tmp目录会有很多应用程序和系统程序需要在这个目录下建立临时文件,因而也不能设置只读属性。/var是系统和程序的日志目录,如果设置为只读属性,那么系统写日志将无法进行,所以也不能通过chattr命令保护。
原文地址:http://blog.51cto.com/yttitan/2306948