SElinux管理
本章内容:
selinux概念:
启用selinux
管理文件安全标签
管理端口标签
管理selinux布尔值开关
管理日志
查看selinux帮助
selinux介绍:
selinux:secure enhanced Linux,是美国国家安全局和scc开发的Linux的一个强制访问控制的安全模块。2000年以后以GNUGPL发布,Linux内核2.6版本后集成在内核中。
DAC:自由访问控制。
MAC:强制访问控制。
DAC:DAC环境下进程是无束缚的。
MAC:MAC环境下策略的规则决定控制的严格程度。
MAC:MAC环境下进程可以被限制的。
策略被用来定义被限制的进程能够使用那些资源(文件和端口)
默认情况下,没有明确允许的行为将被拒绝。
selinux的四种工作类型:
strict(严格的):对每个进程都受到selinux的控制。
targeted(有针对性的):用来保护常见的网络服务,仅有限进程受到selinux控制,只监控容易被入侵的进程,rhel4只保护13个服务,rhel5保护88个服务。
minimum:修改过的targeted,只对选择的网络服务。
mls:提供mls(多级安全)机制的安全性。
minimum和mls稳定性不足,未加以应用。
selinux安全上下文:
传统Linux,哲学思想一切皆文件,由用户、组权限控制访问。
在selinux中,一切皆对象(object),有存放在inode的扩展属性域的安全元素所控制其访问。
所有文件、端口资源和进程都具备安全标签:安全上下文(security context)
安全上下文由五个元素组成:
user:role:type:sensitivity:category
示例:
[root@centos6 ~]# ls -lZ
-rwxrw-rw-. root root system_u:object_r:admin_home_t:s0 a1.txt.txt
-rw——-. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
-rw-r–r–. root root system_u:object_r:admin_home_t:s0 base.repo
-rwxrw-rw-. root root unconfined_u:object_r:admin_home_t:s0 copycmd.sh
实际上下文:存放在文件系统中;
期望(默认)上下文:存放在二进制的selinux策略库中(映射目录和期望安全上下文)中。
* 使用 semanage fcontext -l 命令查看期望的selinux上下文。
selinux中五个安全元素的含义:
user:指示登录系统的用户类型,如root,user_u,system_u,多数本地进程都属于无约束(unconfined)进程。
role:定义文件,进程和用户的用途:文件:object_r,进程和用户:system_r。
type:指定数据类型,规则中定义何种进程类型访问何种文件。targeted策略基于type实现,多服务共用:public_content_t。
public_content_t:只有读的权限,要想有读写权限需改成public_content_rw_t。
sensitivity:限制访问的需要,由组织定义的分层安全级别,如unclassified,secret,top secret,一个对象有只有一个sensitivity,分0-15级,s0最低,targeted策略默认使用s0。
category:对于特定组织划分不分层的分类,如FBI secret,NSA secret,一个对象可以有多个categroy,c0-c1023共1024个分类,targeted策略不使用category
示例:
-rwxrw-rw-. root root unconfined_u:object_r:admin_home_t:s0 copycmd.sh
drwxr-xr-x. root root system_u:object_r:admin_home_t:s0 Desktop
selinux策略:
对象(object):所有可以对取的对象,包括文件、目录和进程、端口等。
主题(subject):selinux中进程被称为主体。
selinux中对所有的文件赋予一个type的文件类型标签,对于所有的进程也赋予各自一个domain的标签。domain标签能够执行的操作由安全策略里定义。
当一个subject试图访问一个object,kernel中的策略执行服务器将检查AVC,在AVC中subject和object的权限被缓存,查找“应用+文件”的安全环境。然后根据查找结果允许或拒绝访问。
安全策略:定义主体读取对象的规则数据库,规则中记录了哪个类型的主体使用哪个方法读取哪一个对象式允许还是拒绝的,并且定义了哪种行为是允许或拒绝。
配置selinux:
selinux是否启用;
给文件重新打安全标签;
给端口设置安全标签;
设定某些操作的布尔型开关;
selinux的日志管理;
selinux的状态:
enforcing:强制,每个受限的进程都必然受限。
permissive:允许,每个受限的进程违规操作不会被禁止,但会被记录于审计日志。
disabled:禁用。
selinux相关命令:
getenforce:获取selinux当前状态。
sestatus:获取selinux当前更详细的状态。
setenforce 0|1
0:设置为permissive允许
1:设置为enforcing强制执行selinux策略。
示例:getenforce命令
[root@centos6 ~]# getenforce
Enforcing
[root@centos6 ~]# sestatus
示例:sestatus命令
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
[root@centos6 ~]#
示例:setenforce命令,命令行临时启用/禁用selinux
[root@centos6 Desktop]# setenforce 0
[root@centos6 Desktop]# getenforce
Permissive
[root@centos6 Desktop]# setenforce 1
[root@centos6 Desktop]# getenforce
Enforcing
[root@centos6 Desktop]#
selinux配置文件:
以下两个绝对路径都可以进到selinux的配置文件中。
/etc/selinux/config
/etc/sysconfig/selinux 为/etc/selinux/config 的软链接。
在grub配置文件中添加selinux=0禁用selinux:
centos6:在/etc/grub/grub.conf文件中kernel行后添加selinux=0
centos7:在/etc/grub2/grub.cfg文件中Linux16行后添加selinux=0
在selinux的配置文件中禁用selinux:
selinux={enforcing | permissive |disabled }
注意:在Linux grub配置文件中和selinux配置文件中,只要有一个是禁用的,那么selinux就禁用。建议在centos6中装上setroubleshoot selinux故障排错包。
示例:安装setroubleshoot selinux故障排错包。
[root@centos6 Desktop]# yum -y install setroubleshoot
示例:selinux的配置文件:
[root@centos6 Desktop]# vim /etc/selinux/config
1
2 # This file controls the state of SELinux on the system.
3 # SELINUX= can take one of these three values:
4 # enforcing – SELinux security policy is enforced.
5 # permissive – SELinux prints warnings instead of enforcing.
6 # enforcing – No SELinux policy is loaded.
7 SELINUX=enforcing
8 # SELINUXTYPE= can take one of these two values:
9 # targeted – Targeted processes are protected,
10 # mls – Multi Level Security protection.
11 SELINUXTYPE=targeted
12
修改selinux安全标签:
给文件重新打安全标签:
chcon [OPTION]… [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE…
-t:修改文件的标签类型。
–reference(参考):参考别的文件安全标签来设置标签类型。
-R:递归的打标签。
示例:
[root@centos6 html]# pwd
/var/www/html
[root@centos6 html]# chcon -t default_t index.html
[root@centos6 html]# ll -Z
-rw-r–r–. root root unconfined_u:object_r:default_t:s0 index.html
[root@centos6 html]#
示例:参考文件1的安全上下文修改文件2的安全上下文。
chcon –reference file1 file2
恢复目录或文件默认的安全上下文(根据selinux安全上下文数据库恢复):
restorecon -R /path/to/somewhere
示例:
[root@centos6 html]# restorecon -R /var/www/html/
[root@centos6 html]# ll -Z
-rw-r–r–. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
[root@centos6 html]#
默认安全上下文查询与修改:
semanage来自 policycoreutils-python包
查看默认的安全上下文
semanage fcontext -l
添加安全上下文到selinux安全上下文数据库:
semanage fcontext -a -t http_sys_context_t “/testdir(/.*)”
删除安全上下文到selinux安全上下文数据库:
semanage fcontext -d -t http_sys_context_t “/testdir(/.*)”
selinux端口标签:
查看端口标签:
smanage port -l
示例:
[root@centos6 html]# semanage port -l | grep "http"
http_cache_port_t tcp 3128, 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
[root@centos6 html]#
添加端口:
semanage port -a -t 端口标签 -p [tcp|udp] port
示例:
[root@centos6 html]# semanage port -a -t http_port_t -p tcp 9527
[root@centos6 html]# semanage port -l | grep "http"
http_cache_port_t tcp 3128, 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 9527, 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
[root@centos6 html]#
删除端口:
semanage port -d -t 端口标签 -p [tcp|udp] port
示例:
[root@centos6 html]# semanage port -d -t http_port_t -p tcp 9527
[root@centos6 html]# semanage port -l | grep "http"
http_cache_port_t tcp 3128, 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
[root@centos6 html]#
修改现有端口为新标签:(让已经定义的端口属于别的服务)
semanage port -m -t 端口标签 -p [tcp|udp] port
示例:
[root@centos6 html]# semanage port -a -t http_port_t -p tcp 9527
[root@centos6 html]# semanage port -l | grep "http"
http_cache_port_t tcp 3128, 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 9527, 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
[root@centos6 html]# semanage port -m -t ssh_port_t -p tcp 9527
[root@centos6 html]# semanage port -l | grep "ssh"
ssh_port_t tcp 9527, 22
[root@centos6 html]#
selinux布尔值:
布尔值规则:
getsebool:查看布尔值;
setsebool:设置布尔值;
查看selinux布尔值(bool)命令:
getsebool
getsebool [-a] [boolean]
-a:查看本系统内所有布尔值设置状态。
semanage boolean -l 查看更详细的系统布尔值设置。
semanage boolean -l -C 查看修改过的布尔值信息。
示例:查看本系统内所有布尔值设置状态。
getsebool -a
示例:查看修改过的布尔值信息。
[root@centos6 Desktop]# semanage boolean -l -C
SELinux boolean State Default Description
use_nfs_home_dirs (on , on) Support NFS home directories
[root@centos6 Desktop]#
注:第一个on为系统现在状态的布尔值,第二个on为系统存入磁盘状态的布尔值。
设置bool值命令:
setsebool -P boolean value (on,off)
setsebool -P boolean=value (0,1)
示例:
[root@centos6 Desktop]# setsebool -P use_nfs_home_dirs on
[root@centos6 Desktop]# getsebool -a | grep "home"
ftp_home_dir –> off
git_cgi_enable_homedirs –> off
git_system_enable_homedirs –> off
httpd_enable_homedirs –> off
openvpn_enable_homedirs –> on
samba_create_home_dirs –> off
samba_enable_home_dirs –> off
spamd_enable_home_dirs –> on
ssh_chroot_rw_homedirs –> off
use_fusefs_home_dirs –> off
use_nfs_home_dirs –> on
use_samba_home_dirs –> off
[root@centos6 Desktop]#
selinux日志管理:
yum -y install setroubleshoot*(重启生效)
selinux将错误信息写入到/var/log/massage
使用setroubleshoot作为grub关键字进行搜索selinux日志信息。
sealert -l UUID
查看安全事件日志说明:
sealert -a /var/log/audit/audit.log
sealert命令以图形方式打开selinux报警信息。
示例:
[root@centos6 Desktop]# sealert -a /var/log/audit/audit.log
selinux帮助文档
yum -y install selinux-policy-devel (centos7)
yum -y install selinux-policy-doc (centos6)
更新man数据库:
mandb (centos7)
makewhatis (centos6)
原创文章,作者:zhengyibo,如若转载,请注明出处:http://www.178linux.com/49367