程序员

SELinux 相关整理

2018-09-03  本文已影响509人  58bc06151329

文前说明

作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。

本文仅供学习交流使用,侵权必删。
不用于商业目的,转载请注明出处。

1. 简介

1.1 DAC(任意访问控制)

1.2 MAC(强制访问控制)

1.3 SELinux

1.3.1 优势

1.3.2 强制类型安全上下文

[root@nodeA ovirt-engine]# ls -Z
drwxr-xr-x. root root system_u:object_r:bin_t:s0       bin
drwxr-xr-x. root root system_u:object_r:usr_t:s0       branding
drwxr-xr-x. root root system_u:object_r:usr_t:s0       conf
drwxr-xr-x. root root system_u:object_r:usr_t:s0       dbscripts
drwxr-xr-x. root root system_u:object_r:usr_t:s0       engine.ear
drwxr-xr-x. root root system_u:object_r:usr_t:s0       files
drwxr-xr-x. root root system_u:object_r:usr_t:s0       firewalld
drwxr-xr-x. root root system_u:object_r:usr_t:s0       modules
drwxr-xr-x. root root system_u:object_r:usr_t:s0       services
drwxr-xr-x. root root system_u:object_r:usr_t:s0       setup
drwxr-xr-x. root root system_u:object_r:usr_t:s0       ui-plugins
[root@engine22 keepalived]# ps -eZ |grep ovirt
system_u:system_r:initrc_t:s0    1856 ?        00:00:00 ovirt-websocket

1.3.3 类型强制访问控制

allow <Source type> <Target type> : <Object class> {<Permission>};
allow keepalived_t var_lib_t:file { open read };
allow keepalived_t etc_t:file append;
allow keepalived_t etc_t:file setattr;
allow keepalived_t tmp_t:file setattr;

1.3.4 域转换

[root@engine22 ~]# chmod u+s anaconda-ks.cfg 
[root@engine22 ~]# ll
总用量 4
-rwS------. 1 root root 1241 5月  23 09:47 anaconda-ks.cfg
type_transition user_t passwd_exec_t : process passwd_t

1.3.5 SELinux 特性

Usage: sestatus [OPTION]
  -v  Verbose check of process and file contexts.
  -b  Display current state of booleans.
[root@nodeA ~]# 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:      28
[root@nodeA ~]# selinuxenabled;echo $?
0
usage:  setenforce [ Enforcing | Permissive | 1 | 0 ]
[root@nodeA ~]# getenforce
Enforcing
[root@nodeA ~]# setenforce Permissive
[root@nodeA ~]# getenforce
Permissive

2 SELinu 策略语言

2.1 声明客体类别(Object class(es))

class 类别名字
// 为目录声明一个客体类别
class dir
客体类别 描述
blk_file Block files(块文件)
chr_file Character files(字符文件)
dir Directories(目录)
fd File descriptors(文件描述符)
fifo_file Named pipes(命名管道)
file Ordinary files(普通文件)
filesystem Filesystem(for example,an actual partition)(文件系统,如分区)
lnk_file Symbolic links(符号链接)
sock_file UNIX domain sockets(UNIX 域套接字)
客体类别 描述
association IPsec security association(IPsec 安全联盟)
key_socket Sockets that are of protocol family PF_KEY , used for key management in IPsec(PF_KEY协议家族的套接字,用于管理IPsec中的秘钥)
netif Network interface(网络接口,如eth0)
netlink_audit_socket Netlink socket for controlling auditing(用于控制审核的Netlink套接字)
netlink_dnrt_socket Netlink socket for controlling DECnet routing(控制DECnet路由的Netlink套接字)
netlink_firewall_socket Netlink socket for creating user space firewall filters(用于创建用户空间防火墙过滤器的Netlink套接字)
netlink_ip6fw_socket Netlink socket for creating user space firewall filters(用于创建用户空间防火墙过滤器的Netlink套接字 )
netlink_kobject_uevent_socket Netlink socket for receiving kernel event notifications in user space(用于在用户空间接收内核时间通知的Netlink套接字)
netlink_nflog_socket Netlink socket for receiving Netfilter logging messages( 用于接收Netfilter日志消息的Netlink套接字 )
netlink_route_socket Netlink socket for controlling and managing network resources such as the routing table and IP address(用于控制和管理网络资源如路由表和IP地址的Netlink套接字 )
netlink_selinux_socket Netlink socket for receiving notices of policy load, enforcement mode toggle, and AVC cache flush(用于接收策略载入通知,强制模式切换和清空AVC缓存的Netlink套接字 )
netlink_tcpdiag_socket Netlink socket for monitoring TCP connections( 用于件事TCP连接的Netlink套接字)
netlink_socket All other Netlink sockets(所有其他的Netlink套接字)
netlink_xfrm_socket Netlink socket for getting, maintaining, and setting IPsec parameters(用于获取、管理和设置IPsec参数的Netlink套接字)
node Host represented by an IP address or range of addresses(代表一个IP地址或一段IP地址的主机)
packet_socket Raw sockets where the protocol is implemented in userspace(协议在用户空间执行的原始套接字)
rawip_socket IP sockets that are neither TCP or UDP(既不是TCP也不是UDP的IP套接字)
socket All other sockets(其他套接字)
tcp_socket TCP sockets(TCP套接字)
udp_socket UDP sockets(UDP套接字)
unix_dgram_socket IPC datagram sockets on a local machine (UNIX domain)(本地机器上(unix域)的IPC数据报套接字)
unix_stream_socket IPC stream sockets on a local machine (UNIX domain)(本地机器上(unix域)的IPC流套接字)
客体类别 描述
ipc Deprecated; no longer used(不建议使用)
msg Messages within a message queue (消息队列中的消息)
msgg Message queues (消息队列)
sem Semaphores (信号量)
shm Shared memory segment (共享内存段)
客体类别 描述
capability Privileges that are implemented as capabilities in Linux 特权
process Processes which are also objects in SELinux SELinux中的进程
security SELinux security server in the kernel 内核中的SELinux
system System as a whole (整个系统)

2.2 声明客体许可(Permission(s))

2.2.1 通用许可

common 通用名 {许可集}
common file
{
    ioctl
    read
    write
    create
    getattr
    setattr
    lock
    relabelfrom
    relabelto
    append
    unlink
    link
    rename
    execute
    swapon
    quotaon
    mounton
}

2.2.2 联合许可

class dir { search }
class dir { search add_name remove_name }
class dir inherits file {add_name remove_name reparent  search rmdir}

2.2.3 文件客体类别许可

file 许可 描述 分类
ioctl ioctl(2)系统调用请求
read 读取文件内容,对应标准 Linux 下的 r 访问权 标准 Linux 许可
write 写入文件内容,对应标准 Linux 下的 w 访问权 标准 Linux 许可
create 创建一个新文件
getattr 获取文件的属性,如访问模式(例如:stat,部分 ioctl)
setattr 改变文件的属性,如访问模式(例如:chmod,部分 ioctl)
lock 设置和清除文件锁
relabelfrom 从现有类型改变安全上下文 SELinux 特定许可
relabelto 改变新类型的安全上下文 SELinux 特定许可
append 附加到文件内容(即用 o_append 标记打开) 文件扩展许可
unlink 移除硬链接(删除)
link 创建一个硬链接
rename 重命名一个硬链接
execute 执行,与标准 Linux 下的 x 访问权一致 标准 Linux 许可
swapon 不赞成使用。它用于将文件当做换页/交换空间 文件扩展许可
quotaon 允许文件用作一个限额数据库 文件扩展许可
mounton 用作挂载点 文件扩展许可
audit_access
open 打开文件
execmod 使被修改过的文件可执行(含有写时复制的意思) SELinux 特定许可
execute_no_trans 在访问者域转换的执行文件(即没有域转换) SELinux 特定许可
entrypoint 通过域转换,可以用作新域的入口点的文件 SELinux 特定许可

2.2.3.1 标准 Linux 许可

2.2.3.2 SELinux 特定许可

2.2.4 进程客体类别许可

process 许可 描述 分类
fork 派生两个进程 创建进程
transition 通过 execve(2) 系统调用转换到一个新的上下文(域类型) 进程域类型转换
sigchld 发送 sigchld 信号 进程信号
sigkill 发送 sigkill 信号 进程信号
sigstop 发送 sigstop 信号 进程信号
signull 不发送信号测试另一个进程的存在性 进程信号
signal 发送一个非 sigkill、sigstop 或 sigchld 的信号 进程信号
ptrace 跟踪程序执行的父进程或子进程
getsched 获取进程的优先级 进程属性
setsched 设置进程的优先级 进程属性
getsession 获取进程的会话 ID 进程属性
getpgid 获取进程的组进程 ID 进程属性
setpgid 设置进程的组进程 ID 进程属性
getcap 获取这个进程允许的 Linux 能力 进程属性
setcap 为进程设置允许的 Linux 能力 进程属性
share 允许与克隆的或派生的进程共享状态 创建进程
getattr 通过 /proc/[pid]/attr/ 目录获取进程的属性
setexec 下一次调用 execve(2) 时覆盖默认的上下文
setfscreate 允许进程设置由其创建的客体的上下文
noatsecure 禁用清除安全模式环境,允许进程在 execve(2) 上禁用 glibc 的安全模式特性 进程域类型转换
siginh 在 execve(2) 上继承信号状态 创建进程
setrlimit 改变进程硬性资源限制
rlimitinh 在 execve(2) 上继承进程资源限制 创建进程
dyntransition 允许进程动态地转移到新的上下文中 进程域类型转换
setcurrent 设置当前的进程上下文,当进程试图执行一个动态域转换时,这是第一个检查的能力
execmem 产生一个匿名的映像或可写的私有文件映像可执行体 执行可写入内存
execstack 产生进程堆栈可执行体 执行可写入内存
execheap 产生一个堆栈可执行体 执行可写入内存
setkeycreate
setsockcreate

2.3 类型增强

2.3.1 属性、类型和别名

2.3.1.1 类型声明

type 类型名称 [alias 别名集] [,属性集];
type httpd_t;
type http_user_content_t;

2.3.1.2 属性声明

attribute 属性名称;

2.3.1.3 关联类型和属性

type 类型名,属性名;
type http_user_content_t,file_type;  
typeattribute 类型名 属性名;
type httpd_user_content_t;
typeattribute httpd_user_content_t file_type,httpdcontent;

2.3.1.4 别名

type mozilla_t alias netscape_t, domain
typealias 类型名称 alias 别名名称
type mozilla_t, domain;
typealias mozilla_t alias netscape_t;

2.3.2 访问向量规则( Access Vector Rules,即 AV 规则)

2.3.2.1 AV 规则语法

2.3.2.1.1 通用 AV 规则语法
allow(规则类型) user_t(域类型) bin_t(客体类型) : file(客体类别) execute(访问向量);
2.3.2.1.2 AV 规则的键
2.3.2.1.3 AV 规则中使用属性
allow domain exec_type:file execute;
2.3.2.1.4 AV 规则中的多类型和属性
allow user_t { bin_t sbin_t }:file execute;
allow {user_t domain} {bin_t file_type sbin_t}:file execute;
2.3.2.1.5 特殊类型 self
allow user_t user_t:process signal;
allow user_t self:process signal;
allow user_t user_t:process signal;
allow staff_t staff_t:process signal;
allow {user_t staff_t} self:process signal;
2.3.2.1.6 特殊操作符 " 非 "
allow domain { exec_type -sbin_t }:file execute;
2.3.2.1.7 在 AV 规则中指定多个客体类别和类型
allow user_t bin_t:{ file dir } { read getattr };
// 无效的规则,因为 search 对于客体类别 file 是无效的
allow user_t bin_t:{ file dir } { read getattr search };
// 当许可对两个客体类别不是都有效时,需要两条规则
allow user_t bin_t:file { read getattr };
allow user_t bin_t:dir { read getattr search };
2.3.2.1.8 AV 规则中的特殊许可操作符
// 域类型 user_t 具有对客体类型 bint_t 的客体类别 file 和 dir 具有所有许可。
allow user_t bin_t:{ file dir } *;
// 允许域类型 user_t 对客体类型 bin_t 具有除 write、setattr、ioctl 之外的任何访问许可。
allow user_t bin_t:file ~{ write setattr ioctl };

2.3.2.2 allow 规则

// 允许域类型为 user_t 的进程对客体类型为 bin_t 的文件具有读和可执行权限。
allow user_t bin_t:file { read execute };

2.3.2.3 audit 规则

// 域类型为 httpd_t 的进程对客体类型为 etc_t 的目录进行 search 访问被拒绝时,这个拒绝不会被审核。简单来理解就是对权限检查失败的操作不做记录。
dontaudit httpd_t etc_t:dir search;
// 域类型为 domain 的进程对客体类型为 shadow_t 的文件进行 write 访问得到允许时进行审核。
auditallow domain shadow_t:file write;

2.3.2.4 neverallow 规则

// 禁止域类型为 user_t 的进程执行对客体类型为 shadow_t 的文件写权限。
neverallow user_t shadow_t:file write;

2.4 类型规则

2.4.1 通用类型规则语法

规则名称 type_transition 或 type_change
源类型(域类型,如进程) The type(s) of the creating or owning process(创建或拥有进程的类型)
目标类型(客体类型,如某个具体的文件或目录等) 新的或重新标记的客体的客体类型
客体类别(如文件file、目录dir等) 新的或重新标记的客体的类别
默认类型 新创建或重新标记的单一默认类型
// 规则名称 域类型 客体类型:客体类别 默认类型。
type_transition user_t passwd_exec_t:process passwd_t;
// type_transition 规则在域列表中包括两个类型:user_t 和 sysadm_t 。
type_transition { user_t sysadm_t } passwd_exec_t:process passwd_t;
// 这两条规则将会冲突,编译时会报错
type_transition user_t passwd_exec_t:process passwd_t;
type_transition user_t passwd_exec_t:process user_passwd_t;

2.4.2 类型转换规则

2.4.2.1 默认域转换

//类型为 init_t 的进程执行一个类型为 apache_exec_t 的文件时,进程类型将会转换到 apache_t。
type_transition init_t apache_exec_t:process apache_t;
allow init_t apache_exec_t:file execute;
allow init_t apache_t:process transition;
allow apache_t apache_exec_t:file entrypoint;

2.4.2.2 默认客体转换

//域类型为 passwd_t 的进程在一个客体类型为 tmp_t 的目录下创建一个普通文件(file 客体类别)时,默认情况下,如果策略允许的话,新创建的文件类型默认为 passwd_tmp_t,而不是客体类型 tmp_t。
type_transition passwd_t tmp_t:file passwd_tmp_t;

2.5 角色和用户

2.5.1 角色

// 为 user_t 类型声明 user_r 角色
role user_r types user_t;
// 为 passwd_t 类型声明 user_r 角色
role user_r types passwd_t;
allow staff_r sysadm_r;
// 角色为 sysadm_r 的进程执行 http_exec_t 的文件时,SELinux 会尝试转换为角色 system_r。
role_transition sysadm_r http_exec_t system_r;
// 声明一个角色 super_r,sysadm_r,secadm_r 并使其同时具有 sysadm_r 和 secadm_r 角色的内容。
dominance { role super_r {role sysadm_r; role secadm_r;}

2.5.2 用户

//声明用户 keepalived 并与角色 user_r 进行关联。
user keepalived roles {user_r};
// 定义普通用户 user_u 并授予角色user_r。
// 如果 SELinux 策略中没有定义用户 keepalived,那么当 Linux 用户 keepalived 登录时,在初始 shell 进程安全上下文的用户表示符将是 user_u。
user user_u roles {user_r};

2.6 约束

2.6.1 约束语句

constrain 类别集 许可集 表达式;
关键字 说明
t1 源类型
r1 源角色
u1 源用户
t2 目标类型
r2 目标角色
u2 目标用户
操作符 说明
== 相等
!= 不相等
eq (角色关键字)等于
dom (角色关键字)优先于
A domby B (角色关键字)B优先A
incomp (角色关键字)无可比性
// 域转换过程中需要 transition 许可,此约束作了进一步限制,且被应用到 process 客体类别当中。
// 所有的域转换,主客体用户标识符要保持一致。
constrain process transition (u1==u2);
// 要求所有的域转换,主客体角色标识符需保持一致。
constrain process transition (r1==r2);

2.6.2 标记转换约束

关键字 说明
t1 旧安全上下文的类型
r1 旧安全上下文的角色
u1 旧安全上下文的用户
t2 新安全上下文的类型
r2 新安全上下文的角色
u2 新安全上下文的用户
t3 进程安全上下文的类型
r3 进程安全上下文的角色
u3 进程安全上下文的用户
//首先使用了一个普通文件和一个符号链接文件(lnk_file),因为不想某些人使用链接代替文件。然后表达式中禁止某个域类型被授权可以重新标记一个用户临时文件的类型为 shadow 密码文件的类型。
validatetrans {file lnk_file} ( t2 != shadow_t or t1 !=user_tmp_t );

3. SELinux 相关指令工具

命令 说明
sestatus 查询系统的 selinux 目前的狀态。
selinuxenabled 查询系统的 selinux 支持是否有启用。
setenforce 设定 selinux 运行狀态。
getsebool 列出所有 selinux 开关数值清单列表与内容。
setsebool 设定 selinux 开关数值内容。
chcon 变更档案目录的安全上下文。
restorecon 重载档案目录的安全上下文。
fixfiles 修正档案目录的安全上下文。
semanage SELiux 策略维护管理程序。
secon 分析项目的 SELinux 安全上下文。
audit2why 分析 SELinux audit 日志的内容。
sealert SELinux 信息诊断用户端程序。

3.1 sestatus

Usage: sestatus [OPTION]
  -v  Verbose check of process and file contexts.
  -b  Display current state of booleans.
[root@nodeA engine]# 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:      28

3.2 selinuxenabled

[root@engineA engine]# selinuxenabled ; echo $?
0

3.3 setenforce

usage:  setenforce [ Enforcing | Permissive | 1 | 0 ]
[root@nodeA ~]# getenforce
Enforcing
[root@nodeA ~]# setenforce Permissive
[root@nodeA ~]# getenforce
Permissive

3.4 getsebool

usage:  getsebool -a or getsebool boolean...
[root@engine22 engine-HA.V2.0]# getsebool -a
abrt_anon_write --> off
abrt_handle_event --> off
abrt_upload_watch_anon_write --> on
antivirus_can_scan_system --> off
antivirus_use_jit --> off
auditadm_exec_content --> on
authlogin_nsswitch_use_ldap --> off
authlogin_radius --> off
authlogin_yubikey --> off
awstats_purge_apache_log_files --> off
boinc_execmem --> on
cdrecord_read_content --> off
cluster_can_network_connect --> off
cluster_manage_all_files --> off
cluster_use_execmem --> off
cobbler_anon_write --> off
cobbler_can_network_connect --> off
cobbler_use_cifs --> off
cobbler_use_nfs --> off
collectd_tcp_network_connect --> off
condor_tcp_network_connect --> off
conman_can_network --> off
container_connect_any --> off
......

3.5 setsebool

Usage:  setsebool [ -NPV ] boolean value | bool1=val1 bool2=val2...
setsebool ftpd_disable_trans=on
参数 说明
-N 磁盘上的策略不会重新加载到内核中。
-P 所有挂起的值都被写入磁盘上的策略文件。将在重新启动时保持持久性。
-V 将从语义库中打印详细的错误消息。

3.6 chcon

用法:  chcon [选项]... CONTEXT FILES...
或:  chcon [选项]... [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] 文件...
或:  chcon [选项]... --reference=PEF_FILES FILES...
参数 说明
CONTEXT 需要设置的安全上下文。
FILES 对象(文件)。
--reference 参照的对象。
PEF_FILES 参照文件上下文。
FILES 应用参照文件上下文为我的上下文。
选择 说明
-f 强迫执行。
-R 递归地修改对象的安全上下文。
-r ROLE 修改安全上下文角色的配置。
-t TYPE 修改安全上下文类型的配置。
-u USER 修改安全上下文用户的配置。
-v 显示详细的信息。
-l, --range=RANGE 修改安全上下文中的安全级别。
chcon -t var_t /etc/vsftpd/vsftpd.conf
chcon --reference=/var/www/html index.html

若是变更于目录上,后续于该目录内建立的档案目录会套用目录本身 type 设定。

3.7 restorecon

restorecon [FRrv] [-e excludedir ] pathname... ]
参数 说明
-r | -R 包含子目录与其下档案目录
-F 恢复使用预设
-v 显示执行过程
restorecon /etc/ntp.conf
restorecon -v /etc/ntp.conf
restorecon -v -F /etc/ntp.conf
[root@nodeA files]# pwd
/etc/selinux/targeted/contexts/files
[root@nodeA files]# cat file_contexts.local
# This file is auto-generated by libsemanage
# Do not edit directly.

'sedZPQ2b3'    system_u:object_r:snmpd_var_lib_t:s0
'50-rhev-1.brand'    system_u:object_r:var_run_t:s0
'rsync'    system_u:object_r:var_run_t:s0
'sed0taHOK'    system_u:object_r:var_run_t:s0
'branding'    system_u:object_r:snmpd_var_lib_t:s0
'engine-backup.log'    system_u:object_r:zoneminder_log_t:s0
'20180523095032-setup.conf'    system_u:object_r:zarafa_var_lib_t:s0
'/var/lib/ovirt-engine/engine.up'    system_u:object_r:zoneminder_log_t:s0
'jhrw.deploy.temp'    system_u:object_r:var_run_t:s0
'ovirt-engine'    system_u:object_r:snmpd_var_lib_t:s0
'engine-ha.log'    system_u:object_r:zoneminder_log_t:s0
'/var/lib/ovirt-engine/setup/answers/20180523095032-setup.conf'    system_u:object_r:zoneminder_log_t:s0
sedZPQ2b3    system_u:object_r:snmpd_var_lib_t:s0
engine-ha.log    system_u:object_r:keepalived_var_run_t:s0

3.8 fixfiles

/usr/sbin/fixfiles [-v] [-F]  [-N time ] [-l logfile ] { check | restore| [-f] relabel | verify } [[dir/file] ... ]
/usr/sbin/fixfiles [-v] [-F] -R rpmpackage[,rpmpackage...] [-l logfile ] { check | restore | verify }
/usr/sbin/fixfiles [-v] [-F] -C PREVIOUS_FILECONTEXT { check | restore | verify }
/usr/sbin/fixfiles [-F] [-B] onboot
参数 说明
-l logfile 将输出保存到指定的日志文件。
-F 强制重置上下文以匹配可定制文件的文件上下文。
-f 清除 /tmp 目录,带清除提示。
-R rpmpackagename[,rpmpackagename...] 使用 rpm 数据库发现指定包中的所有文件并还原文件上下文。
-N time 只对指定日期后创建的文件进行操作。日期必须是 " YYYY-MD DD HH:MM " 格式。
-v 显示详细的信息。
操作 说明
check 打印所有不正确的文件上下文标签,显示旧的和新的上下文,但不要更改它们。
restore 更改任何不正确的文件上下文标签。
relable 提示删除 /tmp 目录的内容,更改所有不正确的文件上下文标签以匹配安装的 file_contexts 文件。
verify 用不正确的文件上下文标签来验证列表文件,但不要更改它们。
[[dir/file] ... ] 希望检查的文件上下文文件或目录树列表。
[root@nodeA files]# fixfiles check /etc
Warning: Skipping the following R/O filesystems:
/sys/fs/cgroup
/sbin/restorecon reset /etc/selinux/targeted/semanage.read.LOCK context unconfined_u:object_r:semanage_trans_lock_t:s0->unconfined_u:object_r:selinux_config_t:s0
/sbin/restorecon reset /etc/selinux/targeted/semanage.trans.LOCK context unconfined_u:object_r:semanage_trans_lock_t:s0->unconfined_u:object_r:selinux_config_t:s0
/sbin/restorecon reset /etc/sysconfig/iptables context unconfined_u:object_r:etc_t:s0->unconfined_u:object_r:system_conf_t:s0
/sbin/restorecon reset /etc/sysconfig/anaconda context system_u:object_r:etc_runtime_t:s0->system_u:object_r:etc_t:s0
/sbin/restorecon reset /etc/sysconfig/iptables.20180523094935 context unconfined_u:object_r:etc_t:s0->unconfined_u:object_r:system_conf_t:s0
/sbin/restorecon reset /etc/ovirt-engine/sdcos-schedule/logging.properties context system_u:object_r:etc_runtime_t:s0->system_u:object_r:etc_t:s0
/sbin/restorecon reset /etc/ovirt-engine/sdcos-schedule/sdcos-schedule_history/sdcos-schedule.initial.xml context system_u:object_r:etc_runtime_t:s0->system_u:object_r:etc_t:s0
/sbin/restorecon reset /etc/ovirt-engine/sdcos-schedule/sdcos-schedule_history/sdcos-schedule.last.xml context system_u:object_r:etc_runtime_t:s0->system_u:object_r:etc_t:s0
/sbin/restorecon reset /etc/ovirt-engine/sdcos-schedule/sdcos-schedule_history/sdcos-schedule.boot.xml context system_u:object_r:etc_runtime_t:s0->system_u:object_r:etc_t:s0

3.9 semanage

usage: semanage [-h]
                
                {import,export,login,user,port,interface,module,node,fcontext,boolean,permissive,dontaudit}
                ...
参数 说明
import 导入本地定制。
export 导出本地定制。
login Linux 用户与 SELinux 登录管理登录映射。
user 管理 SELinux 受限用户(角色和级别)。
port 管理网络端口类型定义。
interface 管理网络接口类型定义。
module 管理 SELinux 策略模块。
node 管理网络节点类型定义。
fcontext 上下文文件映射定义。
boolean 管理布尔选择选择性启用功能。
permissive 管理过程类型实施模式。
dontaudit 禁用/启用策略中的 dontaudit 规则。
[root@nodeA files]# semanage login -l

登录名                  SELinux 用户           MLS/MCS 范围           服务

__default__          unconfined_u         s0-s0:c0.c1023       *
root                 unconfined_u         s0-s0:c0.c1023       *
system_u             system_u             s0-s0:c0.c1023       *

3.10 secon

Usage: secon [-hVurtscmPRCfLp] [ context | - ]
          --help          -h            Show this message.
          --version       -V            Show the version.
          --prompt        -P            Output in a format good for a prompt.
          --user          -u            Show the user of the context.
          --role          -r            Show the role of the context.
          --type          -t            Show the type of the context.
          --sensitivity   -s            Show the sensitivity level of the context.
          --clearance     -c            Show the clearance level of the context.
          --mls-range     -m            Show the sensitivity to clearance range of 
                                        the context.
          --raw           -R            Show the context in "raw" format.
          --color         -C            Output using ANSI color codes (requires -P).
          --current,      --self        Get the context for the current process.
          --current-exec, --self-exec   Get the exec context for the current process.
          --current-fs,   --self-fs     Get the fs context for the current process.
          --current-key,  --self-key    Get the key context for the current process.
          --parent                      Get the context for the parent process.
          --parent-exec                 Get the exec context for the parent process.
          --parent-fs                   Get the fs context for the parent process.
          --parent-key                  Get the key context for the parent process.
          --pid           -p <arg>      Use the context from the specified pid.
          --pid-exec      <arg>         Use the exec context from the specified pid.
          --pid-fs        <arg>         Use the fs context from the specified pid.
          --pid-key       <arg>         Use the key context from the specified pid.
          --file          -f <arg>      Use the context from the specified file.
          --link          -L <arg>      Use the context from the specified link.
[root@nodeA files]# secon -u
unconfined_u

3.11 audit2why

audit2why <  /var/log/audit/audit.log
[root@nodeA files]# audit2why <  /var/log/audit/audit.log
......
#Constraint rule:

#   constrain lnk_file { create relabelfrom relabelto } ((u1 == u2 -Fail-)  or (t1 == { abrt_dump_oops_t abrt_handle_event_t anaconda_t install_t preupgrade_t httpd_t httpd_unconfined_script_t auditadm_su_t auditadm_sudo_t authconfig_t updpwd_t bacula_unconfined_script_t kernel_t boinc_project_t bootloader_t cachefiles_kernel_t certmonger_unconfined_t cinder_api_t cinder_backup_t cinder_scheduler_t cinder_volume_t cloud_init_t cmirrord_t cockpit_session_t condor_startd_t conman_unconfined_script_t container_runtime_t spc_t crond_t system_cronjob_t unconfined_cronjob_t cupsd_t dbadm_sudo_t devicekit_t devicekit_power_t devicekit_disk_t dirsrv_t dirsrvadmin_unconfined_script_t dovecot_t firstboot_t fsadm_t ftpd_t glusterd_t gssproxy_t inetd_t inetd_child_t init_t initrc_t ipa_helper_t ipsec_t racoon_t kdumpctl_t keepalived_unconfined_script_t kadmind_t kpropd_t krb5kdc_t keystone_t slapd_t lsassd_t livecd_t local_login_t sulogin_t syslogd_t logrotate_t clvmd_t lvm_t depmod_t insmod_t mount_t unconfined_mount_t unconfined_munin_plugin_t mysqld_t nagios_unconfined_plugin_t nagios_eventhandler_plugin_t namespace_init_t ncftool_t yppasswdd_t oddjob_t oddjob_mkhomedir_t openshift_initrc_t openshift_t openshift_app_t openvpn_t openvpn_unconfined_script_t openwsman_t pegasus_openlmi_account_t pegasus_openlmi_logicalfile_t pegasus_openlmi_unconfined_t pki_tomcat_t pki_tomcat_script_t policykit_t policykit_auth_t postgresql_t prelink_t prelink_cron_system_t puppetagent_t puppetmaster_t rabbitmq_t radiusd_t realmd_t realmd_consolehelper_t remote_login_t cluster_t rhev_agentd_consolehelper_t rlogind_t gssd_t rpm_t rpm_script_t rshd_t rtas_errd_t samba_unconfined_script_t samba_unconfined_net_t saslauthd_t secadm_t secadm_su_t secadm_sudo_t newrole_t restorecond_t semanage_t setfiles_t setfiles_mac_t unconfined_sendmail_t sge_shepherd_t sge_job_t snapperd_t sosreport_t squid_t sshd_t sssd_t staff_t staff_sudo_t staff_consolehelper_t sysadm_t sysadm_su_t sysadm_sudo_t dhcpc_t systemd_tmpfiles_t telnetd_t tuned_t udev_t unconfined_service_t unconfined_t unconfined_dbusd_t chfn_t groupadd_t passwd_t sysadm_passwd_t useradd_t virtd_t virtd_lxc_t virt_qemu_ga_unconfined_t vlock_t vmtools_t vmtools_helper_t vmware_host_t watchdog_unconfined_t wine_t xdm_t xserver_t xdm_unconfined_t zabbix_script_t } -Fail-) ); Constraint DENIED

#   Possible cause is the source user (system_u) and target user (unconfined_u) are different.

3.12 audit2allow

[root@localhost ovirt-engine]# audit2allow --help
Usage: audit2allow [options]

Options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit
  -b, --boot            audit messages since last boot conflicts with -i
  -a, --all             read input from audit log - conflicts with -i
  -p POLICY, --policy=POLICY
                        Policy file to use for analysis
  -d, --dmesg           read input from dmesg - conflicts with --all and
                        --input
  -i INPUT, --input=INPUT
                        read input from <input> - conflicts with -a
  -l, --lastreload      read input only after the last reload
  -r, --requires        generate require statements for rules
  -m MODULE, --module=MODULE
                        set the module name - implies --requires
  -M MODULE_PACKAGE, --module-package=MODULE_PACKAGE
                        generate a module package - conflicts with -o and -m
  -o OUTPUT, --output=OUTPUT
                        append output to <filename>, conflicts with -M
  -D, --dontaudit       generate policy with dontaudit rules
  -R, --reference       generate refpolicy style output
  -N, --noreference     do not generate refpolicy style output
  -v, --verbose         explain generated output
  -e, --explain         fully explain generated output
  -t TYPE, --type=TYPE  only process messages with a type that matches this
                        regex
  --perm-map=PERM_MAP   file name of perm map
  --interface-info=INTERFACE_INFO
                        file name of interface information
  --debug               leave generated modules for -M
  -w, --why             Translates SELinux audit messages into a description
                        of why the access was denied

3.13 sealert

Usage: sealert [options]

Options:
  -h, --help            show this help message and exit
  -b, --browser         Launch the browser
  -s, --service         Start sealert as a dbus service
  -S, --noservice       Start sealert without dbus service as stand alone app
  -l LOOKUPID, --lookupid=LOOKUPID
                        Lookup alert by id, id may be wildcard * to lookup all
                        alerts
  -a FILE, --analyze=FILE
                        Scan a log file, analyze it's AVC's
  -u USER, --user=USER  logon user name
  -p PASSWORD, --password=PASSWORD
                        logon user password
  -P PLUGIN, --plugin=PLUGIN
                        Plugin Name Required for -f
  -f FIX, --fix=FIX     fix avc with the given uuid, requires plugin
[root@nodeA files]# sealert -a /var/log/audit/audit.log
......
*****  插件 catchall (17.1 置信度) 建议  ********************************************

If you believe that mandb should be allowed read access on the cat1 directory by default.
Then 应该将这个情况作为 bug 报告。
可以生成本地策略模块以允许此访问。
Do
allow this access for now by executing:
# ausearch -c 'mandb' --raw | audit2allow -M my-mandb
# semodule -i my-mandb.pp


更多信息:
源环境 (Context)                 system_u:system_r:mandb_t:s0-s0:c0.c1023
目标环境                          system_u:object_r:unlabeled_t:s0
目标对象                          cat1 [ dir ]
源                             mandb
源路径                           /usr/bin/mandb
端口                            <Unknown>
主机                            <Unknown>
源 RPM 软件包                     man-db-2.6.3-9.el7.x86_64
目标 RPM 软件包                    
策略 RPM                        selinux-policy-3.13.1-166.el7.noarch
Selinux 已启用                   True
策略类型                          targeted
强制模式                          Enforcing
主机名                           engine22
平台                            Linux engine22 3.10.0-693.1.1.el7.x86_64 #1 SMP
                              Thu Aug 3 08:15:31 EDT 2017 x86_64 x86_64
警报计数                          1
第一个                           2018-09-01 03:47:02 CST
最后一个                          2018-09-01 03:47:02 CST
本地 ID                         fcd41d4e-8f18-45cb-87ff-e1b7c59dc28a

原始核查信息
type=AVC msg=audit(1535744822.131:22044): avc:  denied  { read } for  pid=1972 comm="mandb" name="cat1" dev="dm-0" ino=51432678 scontext=system_u:system_r:mandb_t:s0-s0:c0.c1023 tcontext=system_u:object_r:unlabeled_t:s0 tclass=dir
yum install setroubleshoot setools
ausearch -c 'mandb' --raw | audit2allow -M my-mandb
semodule -i my-mandb.pp

3.14 seinfo

[root@localhost answers]# seinfo --help
Usage: seinfo [OPTIONS] [EXPRESSION] [POLICY ...]

Print information about the components of a SELinux policy.

EXPRESSIONS:
  -c[NAME], --class[=NAME]         print object classes
  --sensitivity[=NAME]             print sensitivities
  --category[=NAME]                print categories
  -t[NAME], --type[=NAME]          print types (no aliases or attributes)
  -a[NAME], --attribute[=NAME]     print type attributes
  -r[NAME], --role[=NAME]          print roles
  -u[NAME], --user[=NAME]          print users
  -b[NAME], --bool[=NAME]          print conditional booleans
  --constrain                      print constrain statements
  --initialsid[=NAME]              print initial SIDs
  --fs_use[=TYPE]                  print fs_use statements
  --genfscon[=TYPE]                print genfscon statements
  --netifcon[=NAME]                print netif contexts
  --nodecon[=ADDR]                 print node contexts
  --permissive                     print permissive types
  --polcap                         print policy capabilities
  --portcon[=PORT]                 print port contexts
  --protocol=PROTO                 specify a protocol for portcons
  --all                            print all of the above
OPTIONS:
  -x, --expand                     show more info for specified components
  --stats                          print useful policy statistics
  -l, --line-breaks                print line breaks in constrain statements
  -h, --help                       print this help text and exit
  -V, --version                    print version information and exit
[root@localhost answers]# seinfo 

Statistics for policy file: /sys/fs/selinux/policy
Policy Version & Type: v.28 (binary, mls)

   Classes:            94    Permissions:       262
   Sensitivities:       1    Categories:       1024
   Types:            4747    Attributes:        251
   Users:               8    Roles:              14
   Booleans:          307    Cond. Expr.:       356
   Allow:          101724    Neverallow:          0
   Auditallow:        155    Dontaudit:        8846
   Type_trans:      17759    Type_change:        74
   Type_member:        35    Role allow:         39
   Role_trans:        416    Range_trans:      5697
   Constraints:       109    Validatetrans:       0
   Initial SIDs:       27    Fs_use:             29
   Genfscon:          105    Portcon:           602
   Netifcon:            0    Nodecon:             0
   Permissives:         6    Polcap:              2
yum install setools

3.15 sesearch

Usage: sesearch [OPTIONS] RULE_TYPE [RULE_TYPE ...] [EXPESSION] [POLICY ...]

    Try sesearch --help for more help.

One of --all, --allow, --neverallow, --auditallow, --dontaudit,
--range_trans, --type, --role_allow, or --role_trans must be specified.
[root@localhost answers]# sesearch --allow
......
   allow nscd_t nscd_t : fifo_file { ioctl read write create getattr setattr lock append unlink link rename open } ; 
   allow chfn_t chfn_t : capability net_bind_service ; 
   allow chfn_t chfn_t : capability net_bind_service ; 
   allow httpd_suexec_t w3c_validator_script_exec_t : file { read getattr execute open } ; 
   allow nscd_t init_var_run_t : dir { getattr search open } ; 
   allow lpr_t printer_t : sock_file { write getattr append open } ; 
   allow lpr_t printer_t : sock_file { read getattr open } ; 
   allow portmap_t portmap_t : fifo_file { ioctl read write create getattr setattr lock append unlink link rename open } ; 
   allow lsassd_t var_t : dir { getattr search open } ; 
   allow nscd_t cyphesis_t : lnk_file { read getattr } ; 
   allow cvs_script_t httpd_suexec_t : process sigchld ; 
......
yum install setools
上一篇下一篇

猜你喜欢

热点阅读