SELINUX
所有操作系统访问控制都是以关联的客体和主体的某种类型的访问控制属性为基础的。在SELinux中,访问控制属性叫做安全上下文。所有客体(文件、进程间通讯通道、套接字、网络主机等)和主体(进程)都有与其关联的安全上下文,一个安全上下文由三部分组成:用户、角色和类型标识符。常常用下面的格式指定或显示安全上下文:
当一个subject(如: 一个应用)试图访问一个object(如:一个文件),Kernel中的策略执行服务器将检查AVC (Access Vector Cache), 在AVC中,subject和object的权限被缓存(cached)。如果基于AVC中的数据不能做出决定,则请求安全服务器,安全服务器在一个矩阵中查找“应用+文件”的安全环境。然后根据查询结果允许或拒绝访问,拒绝消息细节位于/var/log/messages中。
查询selinux状态
命令:getenforce #查询结果有3种状态
1、enforcing #如果违反了策略,无法继续操作,表示强制
2、disabled #禁止
3、permissive #selinux有效,即是违法策略,依旧可以继续操作,但是会有警告,查看警告信息:cat /var/log/audit/audit.log
更改selinux状态
1.更改配置文件
查看selinux初始状态
更改selinux状态为disabled
reboot后生效:
2.临时更改
setenforce 1 设置SELinux 成为enforcing模式
setenforce 0 设置SELinux 成为permissive模式
安全上下文
安全上下文有四个字段,分别用冒号隔开。形如:system_u:object_r:admin_home_t:s0。
1.ls -Z #查看文件的安全上下文
[root@foundation79 ~]# ls -Zd test/
drwxr-xr-x root root ? test/
[root@foundation79 ~]# ls -Zd /var/ftp/
drwxr-xr-x root root ? /var/ftp/
semanage fcontext -l #内核指定的所有文件的安全上下文的列表 ; 查看文件安全上下文(man semanage fontext)
[root@foundation79 ~]# semanage fcontext -l | grep test/
/usr/lib/pgsql/test/regress(/.*)? all files system_u:object_r:postgresql_db_t:s0
/usr/lib/pgsql/test/regress/.*\.sh regular file system_u:object_r:bin_t:s0
/usr/lib/pgsql/test/regress/.*\.so.* regular file system_u:object_r:lib_t:s0
/usr/lib/pgsql/test/regress/pg_regress regular file system_u:object_r:postgresql_exec_t:s0
[root@foundation79 ~]# semanage fcontext -l | grep /var/ftp/
/var/ftp/bin(/.*)? all files system_u:object_r:bin_t:s0
/var/ftp/etc(/.*)? all files system_u:object_r:etc_t:s0
/var/ftp/lib(/.*)? all files system_u:object_r:lib_t:s0
/var/ftp/lib/ld[^/]*\.so(\.[^/]*)* regular file system_u:object_r:ld_so_t:s0
2.临时修改
chcon [-R] [-t type] 目录|文件 #临时修改安全上下文,在修改了selinux状态后重启系统,安全上下文会变回来
[root@foundation79 ]# setenforce 0
[root@foundation79 ]# getenforce
Permissive
[root@foundation79 ]# mv /home/westos/westos /var/ftp/pub
[root@foundation79 ]# ls -Z /var/ftp/pub ##查看安全上下文
-rw-rw-r--. ftp ftp system_u:object_r:public_content_t:s0 group
-rw-r--r--. westos ftp system_u:object_r:public_content_t:s0 profile
drwxrwxr-x. ftp ftp system_u:object_r:public_content_t:s0 test
-rw-r--r--. root root unconfined_u:object_r:mnt_t:s0 westos
[root@foundation79 ]# ps auxZ | grep vsftpd ##检测几个文件区别
system_u:system_r:ftpd_t:s0-s0:c0.c1023 root 1308 0.0 0.0 52760 568 ? Ss 05:06 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 root 2369 0.0 0.0 112644 936 pts/0 R+ 05:14 0:00 grep --color=auto vsftpd
3.永久修改文件的上下文 semanage fcontext
semanage 命令 -l ##查看
• restorecon 是 policycoreutil 软件包的一部分
• semanage 是 policycoreutil-python 软件包的一部分
[root@foundation79 yum.repos.d]# ls -lZ /var/ftp ##安全上下文为public_content_t
drwxr-xr-x. root root system_u:object_r:public_content_t:s0 pub
[root@foundation79 yum.repos.d]# ls -lZ /westos ##安全上下文为default_t
-rw-r--r--. root root system_u:object_r:default_t:s0 westosfile1
-rw-r--r--. root root system_u:object_r:default_t:s0 westosfile2
-rw-r--r--. root root system_u:object_r:default_t:s0 westosfile3
-rw-r--r--. root root system_u:object_r:default_t:s0 westosfile4
-rw-r--r--. root root system_u:object_r:default_t:s0 westosfile5
[root@foundation79 yum.repos.d]# semanage fcontext -l | grep westos ##特定搜索查看文件安全上下文,westos中没有符合要求的安全上下文
[root@foundation79 yum.repos.d]# semanage fcontext -l | grep var/ftp ##在var/ftp中符合要求的安全上下文的文件
/var/ftp(/.*)? all files system_u:object_r:public_content_t:s0
/var/ftp/bin(/.*)? all files system_u:object_r:bin_t:s0
/var/ftp/etc(/.*)? all files system_u:object_r:etc_t:s0
/var/ftp/lib(/.*)? all files system_u:object_r:lib_t:s0
/var/ftp/lib/ld[^/]*\.so(\.[^/]*)* regular file system_u:object_r:ld_so_t:s0
监控 SELinux 冲突
• 必须安装 setroubleshoot-server 软件包 , 才能将SELinux 消息发送至 /var/log/messages
• etroubleshoot-server 侦听/var/log/audit/audit.log 中的审核信息并将简短摘要发送至 /var/log/messages
• 摘要包括 SELinux 冲突的唯一标识符 ( UUIDs ),可用于收集更多信息。
Sealert -l UUID 用于生成特定事件的报告。
Sealert -a /var/log/audit/audit.log 用于在该文件中生成所有事件的报告效果: