查看安全上下文
[root@www ~]# ls -Z
drwxr-xr-x root root root:object_r:user_home_t Desktop
-rw-r--r-- root root root:object_r:user_home_t install.log
-rw-r--r-- root root root:object_r:user_home_t install.log.syslog
# root:object_r:user_home_t,就是安全上下文的内容!
Identify:role:type
身份识别:角色:类型
-
身份识别 (Identify)
root:表示 root 的帐号身份; system_u:表示系统程序方面的识别,通常就是程序; user_u:代表的是一般使用者帐号相关的身份。
-
角色 (Role)
object_r:代表的是文件或目录等文件资源,这应该是最常见的; system_r:代表的就是程序啦!不过,一般使用者也会被指定成为 system_r !
-
类型 (Type)
type:在文件资源 (Object) 上面称为类型 (Type); domain:在主体程序 (Subject) 则称为领域 (domain)
对应关系
身份识别 角色 在 targeted 的意义
root system_r 代表供 root 帐号登陆时所取得的权限
system_u system_r 由于为系统帐号,因此是非交谈式的系统运行程序
user_u system_r 一般可登陆使用者的程序
SELinux 的启动、关闭与查看
SELinux 支持三种模式
enforcing:强制模式,代表 SELinux 运行中,且已经正确的开始限制 domain/type 了;
permissive:宽容模式:代表 SELinux 运行中,不过仅会有警告信息并不会实际限制 domain/type 的存取。这种模式可以运来作为 SELinux 的 debug 之用;
disabled:关闭,SELinux 并没有实际运行。
查看
getenforce :查看SELinux状态
[root@www ~]# sestatus [-vb]
选项与参数:
-v :检查在 /etc/sestatus.conf 内的文件与程序的安全上下文内容;
-b :将目前策略的规则布林值列出,亦即某些规则 (rule) 是否要启动 (0/1)
更改SELinux配置文件
[root@www ~]# vi /etc/selinux/config
SELINUX=enforcing <==调整 enforcing|disabled|permissive #开机启动有效
SELINUXTYPE=targeted <==目前仅有 targeted 与 strict #开机启动有效
SELinux启动与关闭
[root@www ~]# setenforce [0|1]
选项与参数:
0 :转成 permissive 宽容模式 #立即生效
1 :转成 Enforcing 强制模式 #立即生效
ps -Z 这个『 -Z 』的选项可以让我们查阅程序的安全上下文
[root@www ~]# ps aux -Z |grep http
root:system_r:httpd_t root 24089 0.2 1.2 22896 9256 ? Ss 16:06 0:00 /usr/sbin/httpd
root:system_r:httpd_t apache 24092 0.0 0.6 22896 4752 ? S 16:06 0:00 /usr/sbin/httpd
root:system_r:httpd_t apache 24093 0.0 0.6 22896 4752 ? S 16:06 0:00 /usr/sbin/httpd
....(后面省略)....
重置安全上下文
[root@www ~]# chcon [-R] [-t type] [-u user] [-r role] 文件
[root@www ~]# chcon [-R] --reference=范例档 文件
选项与参数:
-R :连同该目录下的次目录也同时修改;
-t :后面接安全上下文的类型栏位!例如 httpd_sys_content_t ;
-u :后面接身份识别,例如 system_u;
-r :后面接角色,例如 system_r;
--reference=范例档:拿某个文件当范例来修改后续接的文件的类型!
chcon 是透过直接指定的方式来处理安全性本文的类型数据。
[root@www ~]# restorecon [-Rv] 文件或目录
选项与参数:
-R :连同次目录一起修改;
-v :将过程显示到萤幕上
辅助SELinux的服务
setroubleshoot --> 错误信息写入 /var/log/messages
cat /var/log/messages | grep setroubleshoot
sealert -l 6c028f77-ddb6-4515-91f4-4e3e719994d4
SELinux 的策略与规则管理
[root@www ~]# seinfo [-Atrub]
选项与参数:
-A :列出 SELinux 的状态、守则布林值、身份识别、角色、类别等所有资讯
-t :列出 SELinux 的所有类别 (type) 种类
-r :列出 SELinux 的所有角色 (role) 种类
-u :列出 SELinux 的所有身份识别 (user) 种类
-b :列出所有守则的种类 (布林值)
[root@www ~]# sesearch [-a] [-s 主体类别] [-t 目标类别] [-b 布林值]
选项与参数:
-a :列出该类别或布林值的所有相关信息
-t :后面还要接类别,例如 -t httpd_t
-b :后面还要接布林值的规则,例如 -b httpd_enable_ftp_server
布林值的查询与修改
[root@www ~]# getsebool [-a] [布林值条款]
选项与参数:
-a :列出目前系统上面的所有布林值条款配置为开启或关闭值
[root@www ~]# setsebool [-P] 布林值=[0|1]
选项与参数:
-P :直接将配置值写入配置档,该配置数据未来会生效的!
默认目录的安全上下文查询与修改
[root@www ~]# semanage {login|user|port|interface|fcontext|translation} -l
[root@www ~]# semanage fcontext -{a|d|m} [-frst] file_spec
选项与参数:
fcontext :主要用在安全性本文方面的用途, -l 为查询的意思;
-a :添加的意思,你可以添加一些目录的默认安全性本文类型配置;
-m :修改的意思;
-d :删除的意思。
范例:利用 semanage 配置 /srv/samba 目录的默认安全性本文为 publiccontentt
[root@www ~]# mkdir /srv/samba
[root@www ~]# ll -Zd /srv/samba
drwxr-xr-x root root root:object_r:var_t /srv/samba
# 如上所示,默认的情况应该是 var_t 这个咚咚的!
[root@www ~]# semanage fcontext -l | grep '/srv'
/srv/.* all files system_u:object_r:var_t:s0
/srv/([^/]*/)?ftp(/.*)? all files system_u:object_r:public_content_t:s0
/srv/([^/]*/)?www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
/srv/([^/]*/)?rsync(/.*)? all files system_u:object_r:public_content_t:s0
/srv/gallery2(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
/srv directory system_u:object_r:var_t:s0 <==看这里!
# 上面则是默认的 /srv 底下的安全性本文数据,不过,并没有指定到 /srv/samba 啦
[root@www ~]# semanage fcontext -a -t public_content_t "/srv/samba(/.*)?"
[root@www ~]# semanage fcontext -l | grep '/srv/samba'
/srv/samba(/.*)? all files system_u:object_r:public_content_t:s0
[root@www ~]# cat /etc/selinux/targeted/contexts/files/file_contexts.local
# This file is auto-generated by libsemanage
# Please use the semanage command to make changes
/srv/samba(/.*)? system_u:object_r:public_content_t:s0
# 其实就是写入这个文件的罗! ^_^
[root@www ~]# restorecon -Rv /srv/samba* <==尝试恢复默认值
[root@www ~]# ll -Zd /srv/samba
drwxr-xr-x root root system_u:object_r:public_content_t /srv/samba/
# 有默认值,以后用 restorecon 来修改比较简单!