linux文件系统安全
2016-03-16 19:54
351 查看
概述
linux文件系统安全,在实际生产过程中很重要,但是很容易被忽视,应引起足够的重视。1 锁定系统重要文件
系统运维人员有时候可能会遇到通过root用户都不能修改或者删除某个文件的情况,产生这种情况的大部分原因可能是这个文件被锁定了。在Linux下锁定文件的命令是chattr,通过这个命令可以修改ext2、ext3、ext4文件系统下文件属性,但是这个命令必须有超级用户root来执行。和这个命令对应的命令是lsattr,这个命令用来查询文件属性。1.1 命令 chattr
chattr [-RV] [-v version] [mode] 文件或目录
[/code]
主要参数含义如下:
-R:递归修改所有的文件及子目录。
-V:详细显示修改内容,并打印输出。
其中mode部分用来控制文件的属性,常用参数如下表所示:
参数 | 含义 |
---|---|
+ | 在原有参数设定基础上,追加参数 |
- | 在原有参数设定基础上,移除参数 |
= | 更新为指定参数 |
a | append,只能向文件中添加数据,而不能删除。用于服务器日志文件安全,只有root用户才能设置这个属性 |
c | compresse,使文件是否经压缩后再存储。读取时需要经过自动解压操作 |
i | immutable,使文件不能被修改、删除、重命名、设定链接等,同时不能写入或新增内容 |
s | 安全的删除文件或目录,即文件被删除后硬盘空间被全部收回 |
u | 与s参数相反,当设定为u时,系统会保留其数据块以便以后能够恢复删除这个文件。 |
1.2 命令lsattr
lsattr [-adlRvV] 文件或目录
[/code]
常用参数如下表所示。
参数 | 含义 |
---|---|
-a | 列出目录中的所有文件,包括以.开头的文件 |
-d | 显示指定目录的属性 |
-R | 以递归的方式列出目录下所有文件及子目录以及属性值 |
-v | 显示文件或目录版本 |
对一些重要目录和文件可以加上“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
[/code]
对一些重要日志文件可以加上“a”属性,常见的有:
chattr +a /var/log/messages
chattr +a /var/log/wtmp
[/code]
1.4 可能会带来一些问题
对重要的文件进行加锁,虽然能够提高服务器的安全性,但是也会带来一些不便,例如,在软件的安装、升级时可能需要去掉有关目录和文件的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 文件权限检查和修改
不正确的权限设置直接威胁着系统的安全,因此运维人员应该能及时发现这些不正确的权限设置,并立刻修正,防患于未然。下面列举几种查找系统不安全权限的方法。2.1 查找系统中任何用户都有写权限的文件或目录
#查找文件
find / -type f -perm -2 -o -perm -20 |xargs ls -al
#查找目录
find / -type d -perm -2 -o -perm -20 |xargs ls ld
[/code]
2.2 查找系统中所有含“s”位的程序
find / -type f -perm -4000 -o -perm -2000 -print | xargs ls al
[/code]
含有“s”位权限的程序对系统安全威胁很大,通过查找系统中所有具有“s”位权限的程序,可以把某些不必要的“s”位程序去掉,这样可以防止用户滥用权限或提升权限的可能性。
2.3 检查系统中所有suid及sgid文件
find / -user root -perm -2000 -print -exec md5sum {} \;
find / -user root -perm -4000 -print -exec md5sum {} \;
[/code]
将检查的结果保存到文件中,可在以后的系统检查中作为参考。
2.4 检查系统中没有属主的文件
find / -nouser -o nogroup
[/code]
没有属主的孤儿文件比较危险,往往成为黑客利用的工具,因此找到这些文件后,要么删除掉,要么修改文件的属主,使其处于安全状态。
3 /tmp、/var/tmp、/dev/shm安全设定
3.1 /tmp在Linux系统中,主要有两个目录或分区用来存放临时文件,分别是/tmp和/var/tmp。存储临时文件的目录或分区有个共同点就是所有用户可读写、可执行,这就为系统留下了安全隐患。攻击者可以将病毒或者木马脚本放到临时文件的目录下进行信息收集或伪装,严重影响服务器的安全,此时,如果修改临时目录的读写执行权限,还有可能影响系统上应用程序的正常运行,因此,如果要兼顾两者,就需要对这两个目录或分区就行特殊的设置.
3.1.1/tmp是一个独立磁盘分区
修改/etc/fstab文件中/tmp分区对应的挂载属性,加上nosuid、noexec、nodev三个选项即可,修改后的/tmp分区挂载属性类似如下:
LABEL=/tmp /tmp ext3 rw,nosuid,noexec,nodev 0 0
其中,nosuid、noexec、nodev选项,表示不允许任何suid程序,并且在这个分区不能执行任何脚本等程序,并且不存在设备文件。
在挂载属性设置完成后,重新挂载/tmp分区,保证设置生效。
3.1.2 /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
[/code]
最后,编辑/etc/fstab,添加如下内容,以便系统在启动时自动加载loopback文件系统:
/dev/tmpfs /tmp ext3 loop,nosuid,noexec,rw 0 0
测试
为了验证一下挂载时指定限制加载选项是否生效,可以在/tmp分区创建一个shell文件,操作如下:
./shell-test.sh
-bash: ./shell-test.sh: Permission denied
[/code]
可以看出,虽然文件有可执行属性,但是已经在/tmp分区无法执行任何文件了。
测试时注意:不能用bash或者sh 执行脚本,此处只是限制了非系统用户不能执行此脚本。
3.2 /var/tmp
3.2.1 /var/tmp是独立分区
按照/tmp的设置方法是修改/etc/fstab文件即可
3.2.1 /var/tmp是分区下的一个目录
可以将/var/tmp目录下所有数据移动到/tmp分区下,然后在/var下做一个指向/tmp的软连接即可。也就是执行如下操作:
mv /var/tmp/* /tmp
ln -s /tmp /var/tmp
[/code]
3.3 /dev/shm
/dev/shm是Linux下的一个共享内存设备,在Linux启动的时候系统默认会加载/dev/shm,被加载的/dev/shm使用的是tmpfs文件系统,而tmpfs是一个内存文件系统,存储到tmpfs文件系统的数据会完全驻留在RAM中,这样通过/dev/shm就可以直接操控系统内存,这将非常危险,因此如何保证/dev/shm安全也至关重要。
由于/dev/shm是一个共享内存设备,因此也可以通过修改/etc/fstab文件设置而实现,在默认情况下,/dev/shm通过defaults选项来加载,对保证其安全性是不够的,修改/dev/shm的挂载属性,操作如下:
tmpfs /dev/shm tmpfs defaults,nosuid,noexec,rw 0 0
通过这种方式,就限制了任何suid程序,同时也限制了/dev/shm的可执行权限,系统安全性得到进一步提升。
linux版本:Centos 6.4
相关文章推荐
- Linux 设备驱动中的 I/O模型(二)—— 异步通知和异步I/O
- 从零开始构建自己的ARM Ubuntu系统
- Linux中查看socket进程状态
- linux进程读写锁
- Archlinux安装pip
- linux find命令
- Linux内核CFS调度器
- git 在linux中的使用
- Linux获取进程pid
- 《Linux内核分析》第四课笔记
- 运维老鸟教你安装centos6.5如何选择安装包 【转】
- 安装windows10+Archlinux双系统
- PC端(基于Linux系统)通过串并网线口连接ARM开发板,烧写Bootloader并启用Bootp和Tftp等服务刷写Linux系统。
- linux TOP命令各参数详解【转载】
- Linux常用网址
- 在Centos6.5下安装AR8161网卡驱动
- Linux上Mysql安装总结
- Linux 下的GCC
- 【one day one linux】linux下的软件包管理工具
- linux(3)