在Linux系统中,若是一个进程以root权限运行或者一个用户以root用户身份登陆,那么它的权限就再也不有任何限制,所以若是一旦root权限被黑客掌握,对于系统来讲将会是一场灾难,在这种状况下,文件系统保护将会成为系统的最后一道防线,合理的设置文件系统保护能够最大限度的下降攻击对系统形成的破坏。node
若是系统中存在一些很是重要的文件,能够经过chattr
命令将其锁定,这样即便是root用户也无法对文件进行修改和删除。该命令能够修改ext二、ext三、ext4文件系统下的文件属性,并且这个命令只能由root用户执行。对应的,lsattr
能够用来查询文件属性。
chattr命令的语法以下:shell
chattr [-RV] [-v version] [mode] /路径/文件
主要参数以下:安全
lsattr命令的语法以下:服务器
lsattr [-adiRvV] /路径/文件
主要参数以下:app
如下是建议进行保护的文件:oop
$ 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 $ chattr +s /var/log/messages $ chattr +s /var/log/stmp
为文件系统进行保护虽然能够提升系统安全性,可是也会在一些状况下形成不便,例如在一些软件的安装与升级时,可能须要去掉相关目录的immutable属性和append-only属性,对日志文件设置了append-only属性也可能会致使日志轮换(logrotate)没法进行。
因此在使用chattr前,须要结合服务器的应用环境来权衡如何设置保护。ui
并且chattr命令不能保护/、/dev、/tmp、/var等目录:日志
不正确的设置文件权限会形成安全隐患,及时发现这些隐患能够防范于未然。
如下是一些查找不安全权限的方法:code
#对文件: $ find / -type f -perm -2 -o -perm -20 |xargs ls -al #对目录: $ find / -type d -perm -2 -o -perm -20 |xargs ls -ld
$ find / -type f -perm -4000 -o -perm -2000 -print |xargs ls -al
#suid $ find / -user root -perm -2000 -print -exec md5sum () \; #sgid $ find / -user root -perm -4000 -print -exec md5sum () \;
$ find / -nouser -o -nogroup
在Linux系统中,/tmp
和/var/tmp
目录用于存放临时文件,但临时文件对全部用户来讲均可读可写可执行,这就为系统安全留下了安全隐患,这些目录可能被攻击者留下恶意脚本进行信息收集或假装。但若是修改临时文件的读写权限,就有可能影响系统和程序的正常运行。所以,这些目录须要经过特殊设置来保护。
而/dev/shm
是一个内存共享设备,在Linux启动时会默认加载/dev/shm
,/dev/shm
在加载时,使用的是tmpfs文件系统,而tmpfs文件系统是一个内存文件系统,会将该文件系统中的文件所有主流进内存中。这样经过/dev/shm
就能够直接操控系统内存。递归
保护/tmp
的方法:
/tmp
是独立磁盘分区的话,将/etc/fstab
中的/tmp
挂载属性修改成以下:LABEL=/tmp /tmp ext3 rw,nosuid,noexec,nodey 0 0
其中,
* nosuid:不容许任何suid程序
* noexec:不容许执行脚本程序
* nodev:不存在设备文件
/var
分区下的一个目录,那么能够先将/var/tmp
中的数据移动到/tmp
分区下,而后在/var
作一个指向/tmp
的软链接便可:$ mv /vat/tmp/* /tmp $ ln -s /tmp /var/tmp
/tmp
是根目录下的一个目录,能够经过建立一个loopback文件系统利用Linux内核中的loopback特性将文件系统挂载到/tmp
下,而后在挂载时设定挂载选项:$ dd if=/dev/zero of=/dev/tmpfs bs=1M count=10000 $ mke2fs -j /dev/tmpfs $ cp -av /tmp /tmp.old $ mount -o loop,noexec,nosuid,rw /dev/tmpfs /tmp $ chmod 1777 /tmp $ mv -f /tmp.old/* /tmp/ $ rm -rf /tmp.old
而后编辑/etc/fstab
,添加以下内容:
/dev/tmpfs /tmp ext3 loop,nosuid,noexec,rw 0 0
完成后,建议验证一下配置是否生效,在tmp文件夹下创建一个shell文件尝试执行。
保护/dev/shm
的方法:
/etc/fstab
实现,将/etc/fstab
中挂载属性修改成以下所示:tmpfs /dev/shm tmpfs defaults,nosuid,noexec,rw 0 0