目录
SELinux介绍
五个安全元素
启用SELinux
管理文件安全标签
管理端口标签
管理SELinux布尔值开关
设置SELinux管理日志
查看SELinux帮助
*******温馨提示:小编认为文中的理论知识点也很重要,请热爱学习的你们也同样耐心阅读完********
SELinux介绍
SELinux:Secure Enhanced Linux,是美国国家安全局(NSA=The National Security Agency)和SCC(Secure Computing Courporation)开发的LInux的一个强制控制的安全模块。2000年以GNU GPL发布,Linux内核2.6版本后继承在内核中。
访问控制类别:
DAC:Discretionary Access Control 自由访问控制
MAC:Mandatory Access Control 强制访问控制
DAC和MAC的特点:
DAC环境下进程是无束缚的
MAC环境下策略的规则决定控制的严格程度
MAC环境下进程可以被限定的
策略被用来定义被限定的进程能够使用那些资源(文件和端口)
默认情况下,没有被明确允许的行为将被拒绝
SElinux安全上下文工作类型:有四种工作类型
targeted为默认类型,minimum和mls稳定信不足,未加以应用,strict已不再使用
为什么会用SElinux
传统的 Linux中一切皆文件,由用户、组、权限控制访问。而在SELinux中一切皆对象(object),由存放在inde表的扩展属性域的安全元素所控制其访问。
安全上下文基本格式说明
安全上下文有五个元素组成:
user:role:type:sensitivity:category
user_u:object_r:tmp_t:s0:c0
实际上下文存放在文件系统中,进程、文件、已经用户等都有相应的安全上下文:
期望(默认)上下文:存放在二进制的SELinux策略库(映射目录和期望安全上下文)中 (semanage fcontext –l)
例子:
#查看指定文件的安全上下文
ls -Z
#查看进程的安全上下文件
ps Z
#查看用户安全上下文
期望(默认)上下文:
存放在二进制的SELinux策略库(映射目录和期望安全上下文)中:
使用命令
semanage fcontext -l #
可以查看所有默认策略
五个安全元素
SELinux策略:
对象(object):所有可以读取的对象,包括文件、目录和进程,端口等
主体:进程称为主体(subject)
SELinux中对所有的文件都赋予一个type的文件类型标签,对于所有的进程也赋予各自的一个domain的标签。domain标签能够执行的操作由安全策略里定义。
当一个subject试图访问一个object,Kernel中的策略执行服务器将检查AVC(访问矢量缓存Access Vector Cache),在AVC中,subject和object的权限被缓存(cached),查找“应用+文件”的安全环境。然后根据查询结果运行或拒绝访问。
安全策略:定义主体读取对象的规则数据库,规则中记录了哪个类型的主体使用哪个方法读取哪一项对象是允许还是拒绝的,并且定义了那种行为是运行或拒绝。
启用SELinux
配置SELinux:
SELinux的状态:
配置SELinux—SELinux是否启用
设置SELinux模式及开关使用命令有3个:getenforce ;status ;setenforce
getenforce:#获取selinux的当前状态
[root@centos7-->14:47:57~]#getenforce
Disabled ##当前系统的selinux状态为关闭
sestatus: #查看selinux完整状态
[root@centos7-->14:51:35~]#sestatus
SELinux status: enabled ##当前状态
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31
setenforce 0|1#开启或关闭
[root@centos7-->14:51:59~]#setenforce
usage: setenforce [ Enforcing | Permissive | 1 | 0 ]
0:设置为permissive
1:设置为enforcing
注意:如果当前系统的SElinux状态为Disabled时,使用setenforce 0或者1切换时,要想生效,必须reboot重启系统。
如果是enforcing状态和permissive切换时不需要重启系统。
修改配置文件:
/boot/grub/grub.conf在对应的kernel内核参数后面追加 (centos 6中)
selinux=1 (启用) selinux=0(禁用)
/etc/sysconfig/selinux
/etc/selinux/config (centso 7 中)
SELINUX变量有3中参数:
SELINUX={disabled|enforcing|permissive}
管理文件安全标签
修改文件的SELinux标签的命令:chcon ;restorecon
chcon 命令
chcon - change file SELinux security context
更改文件的selinux安全上下文件
###更改文件标签之前文件的selinux类型为 :admin_home_t:
[root@centos7-->17:00:34~]#ll -Z text.txt
-rw-------. root root unconfined_u:object_r:admin_home_t:s0 text.txt
选项与用法:
chcon [option]... CONTXT /path/to/file... #直接对指定的文件写完整的安全上下文字段
chcon [option]... [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE... #根据上下文类型更改
chcon [option]... --reference=RFILE FILE.... #参考RFILE的上下文修改FILE的上下文
-R :如果是目录,将同时递归设置该目录下所有文件
##更改后文件text.txt的selinux标签
[root@centos7-->15:32:56~]#chcon -t var_log_t text.txt
[root@centos7-->15:33:10~]#ll -Z text.txt
-rw-r--r--. root root unconfined_u:object_r:var_log_t:s0 text.txt
SELinux规则管理工具命令:semanage
semanage - SELinux Policy Management tool
semange 命令 注:此命令来自policycoreutils-python RPM包
默认安全文件规则的查询和修改:semanage
semanage 命令
semanage fcontext [-S store] -{a|d|m|l|n|D} [-frstN] file_spec
用法与实例:
查询信息
#查看默认所有安全上下文列表
semanage fcontext -l
#添加安全上下文
semanage fcontext -a -t httpd_sys_content_t ‘/testdir(/.*)?’
#删除安全上下文
semanage fcontext -d -t httpd_sys_content_t ‘/testdir(/,*)?’
管理端口标签
端口标签的设置
#查询端口标签
semanage port -l
#添加端口
semanage port -a -t port_label -p tcp|udp PORT 例如:
semanage port -a -t http_port_t -p tcp 9527
#删除端口
semanage port -d -t port_label -p tcp|udp PORT 例如:
semanage port -d -t http_port -t -p tcp 9527
#修改现有端口为新标签
semanage port -m -t port_label -p tcp|udp PORT 例如:
semanage port -m -t http_port_t -p tcp 9527
管理SELinux布尔值开关
布尔值规则命令:getsebool setsebool
SELinux布尔值设置
查看bool命令:
getsebool -a
[root@centos7-->15:53:18~]#getsebool -a
abrt_anon_write --> off
abrt_handle_event --> off
abrt_upload_watch_anon_write --> on
antivirus_can_scan_system --> off
semanage boolean -l
##查看更为详细的布尔值
[root@centos7-->15:54:36~]#semanage boolean -l
SELinux boolean State Default Description
privoxy_connect_any (on , on) Determine whether privoxy can connect to all tcp ports.
smartmon_3ware (off , off) Determine whether smartmon can support devices on 3ware controllers.
mpd_enable_homedirs (off , off) Determine whether mpd can traverse user home directories.
xdm_sysadm_login (off , off) Allow the graphical
semanage boolean -l -C #查看修改过的布尔值
设置bool值命令:
setsebool -P value (on,off)
#修改samba_enable_home_dirs 的布尔值为 on 开启状态
[root@centos7-->15:57:58~]#setsebool -P samba_enable_home_dirs on
setsebool [-P] Boolean=value (0,1)
设置SELinux管理日志
SELinux日志管理:setrublesshhoot 命令
yum install setrublesshooot* (重启后生效)
setrub会将错误信息写入/var/log/message,使用下面方式查看:
grep ‘setroubleshoot’ /var/log/messages
sealert -l UUID
查看安全时间日志说明
sealert -a /var/log/audit/audit.log
扫描并分析日志
查看SELinux帮助
获取SELinux的相关帮助信息
yum -y install selinux-policy-devel #centos7下
yum -y install selinux-policy-doc #centos6下
mandb | makewhatis #更新man文档数据库
man -k _selinux #列出selinux关键字相关文档