安全运维之文件系统保护

在Linux系统中,若是一个进程以root权限运行或者一个用户以root用户身份登陆,那么它的权限就再也不有任何限制,所以若是一旦root权限被黑客掌握,对于系统来讲将会是一场灾难,在这种状况下,文件系统保护将会成为系统的最后一道防线,合理的设置文件系统保护能够最大限度的下降攻击对系统形成的破坏。node

锁定重要文件

若是系统中存在一些很是重要的文件,能够经过chattr命令将其锁定,这样即便是root用户也无法对文件进行修改和删除。该命令能够修改ext二、ext三、ext4文件系统下的文件属性,并且这个命令只能由root用户执行。对应的,lsattr能够用来查询文件属性。
chattr命令的语法以下:shell

chattr [-RV] [-v version] [mode] /路径/文件

主要参数以下:安全

  • -R:递归修改全部文件及子目录
  • -V:详细显示修改内容,并打印输出
  • mode:
    • +:追加参数
    • -:移除参数
    • =:更新为指定参数
    • a:append,设定后只能添加数据,而不能删除数据,只有root用户能够设置这个属性。
    • c:compress,设定文件是否压缩后再储存。读取时须要自动解压。
    • i:immutable,设定文件不能被写入、修改、删除、重命名、设定软硬连接。
    • s:安全删除,文件被删除后所有收回硬盘空间。
    • u:保留删除,系统会保留其数据块,以便恢复数据。

lsattr命令的语法以下:服务器

lsattr [-adiRvV] /路径/文件

主要参数以下:app

  • -a:列出全部文件,包括"."开头的文件
  • -d:显示指定目录的属性
  • -R:以递归方式列出目录下全部文件及子目录的属性
  • -v:显示文件或目录版本。

如下是建议进行保护的文件: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等目录:日志

  • 根目录若是设置的不可修改属性,那么系统会没法工做
  • /dev在工做时,syslog须要删除并从新创建/dev/log下的套接字设备
  • /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
  • 查找系统中含有“s”位的程序:
$ find / -type f -perm -4000 -o -perm -2000 -print |xargs ls -al
  • 查找系统中全部suid及sgid文件
#suid
$ find / -user root -perm -2000 -print -exec md5sum () \;
#sgid
$ find / -user root -perm -4000 -print -exec md5sum () \;
  • 检查系统中没有属主的文件
$ find / -nouser -o -nogroup

/tmp、/var/tmp、/dev/shm安全保护

在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的方法:

  • /dev/shm是一个设备文件,因此也能够经过修改/etc/fstab实现,将/etc/fstab中挂载属性修改成以下所示:
tmpfs /dev/shm tmpfs defaults,nosuid,noexec,rw 0 0
相关文章
相关标签/搜索