文件系统安全【转】

1、锁定系统重要文件node

系统运维人员有时候可能会遇到经过root用户都不能修改或者删除某个文件的状况,产生这种状况的大部分缘由多是这个文件被锁定了。在Linux下锁定文件的命令是chattr,经过这个命令能够修改ext二、ext三、ext4文件系统下文件属性,可是这个命令必须有超级用户root来执行。和这个命令对应的命令是lsattr,这个命令用来查询文件属性。
经过chattr命令修改文件或者目录的文件属性可以提升系统的安全性,下面简单介绍下chattr和lsattr两个命令的用法。
chattr命令的语法格式以下:
chattr [-RV] [-v version] [mode] 文件或目录shell


主要参数含义以下:
-R:递归修改全部的文件及子目录。
-V:详细显示修改内容,并打印输出。
其中mode部分用来控制文件的属性,经常使用参数以下表所示:安全


参数 含义
+ 在原有参数设定基础上,追加参数
- 在原有参数设定基础上,移除参数
= 更新为指定参数
a 即append,设定该参数后,只能向文件中添加数据,而不能删除。经常使用于服务器日志文件安全,只有root用户才能设置这个属性
c 即compresse,设定文件是否经压缩后再存储。读取时须要通过自动解压操做
i 即immutable,设定文件不能被修改、删除、重命名、设定连接等,同时不能写入或新增内容。这个参数对于文件系统的安全设置有很大帮助
s 安全的删除文件或目录,即文件被删除后硬盘空间被所有收回
u 与s参数相反,当设定为u时,系统会保留其数据块以便之后可以恢复删除这个文件。这些参数中,最经常使用到的是a和i,a参数经常使用于服务器日志文件安全设定,而i参数更为严格,不容许对文件进行任何操做,即便是root用户bash


lsattr用来查询文件属性,用法比较简单,其语法格式以下:
lsattr [-adlRvV] 文件或目录
经常使用参数以下表所示。服务器


参数 含义
-a 列出目录中的全部文件,包括以.开头的文件
-d 显示指定目录的属性
-R 以递归的方式列出目录下全部文件及子目录以及属性值
-v 显示文件或目录版本app


在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命令保护。
虽然经过chattr命令没法保护/dev、/tmp等目录的安全性,可是有另外的方法能够实现,在面将作详细介绍。工具


2、文件权限检查和修改
不正确的权限设置直接威胁着系统的安全,所以运维人员应该能及时发现这些不正确的权限设置,并马上修正,防患于未然。下面列举几种查找系统不安全权限的方法。
(1)查找系统中任何用户都有写权限的文件或目录
查找文件:find / -type f -perm -2 -o -perm -20 |xargs ls -al
查找目录: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
没有属主的孤儿文件比较危险,每每成为黑客利用的工具,所以找到这些文件后,要么删除掉,要么修改文件的属主,使其处于安全状态。oop


3、/tmp、/var/tmp、/dev/shm安全设定性能

在Linux系统中,主要有两个目录或分区用来存放临时文件,分别是/tmp和/var/tmp。存储临时文件的目录或分区有个共同点就是全部用户可读写、可执行,这就为系统留下了安全隐患。攻击者能够将病毒或者木马脚本放到临时文件的目录下进行信息收集或假装,严重影响服务器的安全,此时,若是修改临时目录的读写执行权限,还有可能影响系统上应用程序的正常运行,所以,若是要兼顾二者,就须要对这两个目录或分区就行特殊的设置。/dev/shm是Linux下的一个共享内存设备,在Linux启动的时候系统默认会加载/dev/shm,被加载的/dev/shm使用的是tmpfs文件系统,而tmpfs是一个内存文件系统,存储到tmpfs文件系统的数据会彻底驻留在RAM中,这样经过/dev/shm就能够直接操控系统内存,这将很是危险,所以如何保证/dev/shm安全也相当重要。对于/tmp的安全设置,须要看/tmp是一个独立磁盘分区,仍是一个根分区下的文件夹,若是/tmp是一个独立的磁盘分区,那么设置很是简单,修改/etc/fstab文件中/tmp分区对应的挂载属性,加上nosuid、noexec、nodev三个选项便可,修改后的/tmp分区挂载属性相似以下:LABEL=/tmp /tmp ext3 rw,nosuid,noexec,nodev 0 0其中,nosuid、noexec、nodev选项,表示不容许任何suid程序,而且在这个分区不能执行任何脚本等程序,而且不存在设备文件。在挂载属性设置完成后,从新挂载/tmp分区,保证设置生效。对于/var/tmp,若是是独立分区,安装/tmp的设置方法是修改/etc/fstab文件便可;若是是/var分区下的一个目录,那么能够将/var/tmp目录下全部数据移动到/tmp分区下,而后在/var下作一个指向/tmp的软链接便可。也就是执行以下操做:[root@server ~]# mv /var/tmp/* /tmp[root@server ~]# ln -s /tmp /var/tmp若是/tmp是根目录下的一个目录,那么设置稍微复杂,能够经过建立一个loopback文件系统来利用Linux内核的loopback特性将文件系统挂载到/tmp下,而后在挂载时指定限制加载选项便可。一个简单的操做示例以下:[root@server ~]# dd if=/dev/zero of=/dev/tmpfs bs=1M count=10000[root@server ~]# mke2fs -j /dev/tmpfs[root@server ~]# cp -av /tmp /tmp.old[root@server ~]# mount -o loop,noexec,nosuid,rw /dev/tmpfs /tmp[root@server ~]# chmod 1777 /tmp[root@server ~]# mv -f /tmp.old/* /tmp/[root@server ~]# rm -rf /tmp.old最后,编辑/etc/fstab,添加以下内容,以便系统在启动时自动加载loopback文件系统:/dev/tmpfs /tmp ext3 loop,nosuid,noexec,rw 0 0为了验证一下挂载时指定限制加载选项是否生效,能够在/tmp分区建立一个shell文件,操做以下:[root@tc193 tmp]# ls -al|grep shell-rwxr-xr-x 1 root root 22 Oct 6 14:58 shell-test.sh[root@server ~]# pwd/tmp[root@tc193 tmp]# ./shell-test.sh-bash: ./shell-test.sh: Permission denied能够看出,虽然文件有可执行属性,可是已经在/tmp分区没法执行任何文件了。最后,再来修改一下/dev/shm的安全设置。因为/dev/shm是一个共享内存设备,所以也能够经过修改/etc/fstab文件设置而实现,在默认状况下,/dev/shm经过defaults选项来加载,对保证其安全性是不够的,修改/dev/shm的挂载属性,操做以下:tmpfs /dev/shm tmpfs defaults,nosuid,noexec,rw 0 0经过这种方式,就限制了任何suid程序,同时也限制了/dev/shm的可执行权限,系统安全性获得进一步提高。

相关文章
相关标签/搜索