centOS 权限问题-selinux小结:

注:本文图片来自鸟哥私房菜基础篇第四版截图,

在centOS7.x中经常遇到给足权限,但是进程依旧提示权限不够的问题,前几天用rsyslog管理远程日志的时候就是这样,后来发现在cenOS7.x后系统还有一个selinux的进程在对进程读取文件的过程做权限监管,selinux是什么呢?

[百度百科解释:]SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到。

SELinux 是 2.6 版本的 Linux 内核中提供的强制访问控制(MAC)系统。对于目前可用的 Linux安全模块来说,SELinux 是功能最全面,而且测试最充分的,它是在 20 年的 MAC 研究基础上建立的。SELinux 在类型强制服务器中合并了多级安全性或一种可选的多类策略,并采用了基于角色的访问控制概念。 [1]

selinux采用控制主体[subject,可以理解为进程]是否能操作目标[object,可以理解为文件],是否能够操作控制的依据就是这两者间的策略,但是由于进程与文件数量庞大,因此selinux会依据某些服务来定制基本的存取安全性策略,这些策略内还会有详细的规则(rule)来指定不同的服务开放某些资源是否可以读取。centos7中只提供了3中策略:

​ targeted:针对网络服务较多,针对本机限制较少,预设的策略

​ minimum:由targeted修订而来,针对选着的进程来保护

​ mls:完整的selinux限制,限制方面非常严格

除了主体与目标的策略外,还要保证两者之间的安全性文本一致。

进程的安全性文本在内存中,而文件的则保存到了inode中了, 所以进程读取文件时需要先获取文件的inode。

查看文件安全性文本:

[root@localhost log]# ls -Zdl ../log/
drwxr-xr-x. 2 unconfined_u:object_r:home_root_t:s0 root root 6 530 16:51 ../log/
安全性文本为: unconfined_u:object_r:home_root_t:s0
分别是:Identify:role:type
       身份:角色:类型
身份识别:相当于账号方面的身份识别,主要的身份识别有:
        unconfined_u:不受限的用户,也就是, 该文件来自不受限的进程产生,一般来时,我们使用登录账号获取bash后,预设的bash环境是不受限selinux管制的,因为bash并不是什么特别的网络服务,所有这个不受selinux管制,所有它产生的文件也是unconfied_u
        system_u:系统用户,大部分就是系统自己产生的文件
 角色:透过角色字段,我们可以知道这个资源是属于进程,文件还是代表使用者,一般角色有:
        object_r:代表文件或目录等文件资源
        system_r:代表进程,一般使用者也会被指定为system_r
 类型:其实比对安全性文本,最重要的就是类型,其他两个基本不重要。type在进程中叫domain,在文件中叫Type

 进程中的domain需要和文件中的Type搭配才能进行文件的读取

 进程安全文本查询:
 [root@localhost log]# ps -eZ | grep rsys
system_u:system_r:syslogd_t:s0  22048 ?        00:00:02 rsyslogd
安全文本:system_u:system_r:syslogd_t:s0

selunux

selinux的三种模式:如上图描述

Disabled:关闭,不会进行检查

Permissive:警告模式:表示检查,但是如果出现不匹配只是警告

enforcing:强制:检查匹配,默认

查看模式:

[root@localhost log]# getenforce 
Enforcing
默认强制模式

查看selinux状态:

sestatus [-vb]
-v:检查列于/etc/sestatus.conf内的文件与进程的安全性文本内容
-b:将目前策略的规则boolean列出,
[root@localhost log]# sets
setsebool  setserial  setsid     
[root@localhost log]# 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]
0宽容模式
1强制模式

查看系统规则是启用:

[root@localhost log]# 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 
....

seinfo

sesearch

chcon

recon

练习:将系统日志更换到/home/log/message中

1.查看进程安全性文本
[root@localhost log]# ps -eZ | grep rsyslog
system_u:system_r:syslogd_t:s0  25015 ?        00:00:00 rsyslogd
知道domain : syslogd_t
2.查看/home/log安全性文本
[root@localhost log]# ls -lZd /home/log/
drwxr-xr-x. root root unconfined_u:object_r:user_home_dir_t:s0 /home/log/
知道了Type: user_home_dir_t
3.查看主体syslogd_t 是否能与目标 user_home_dir_t 匹配
[root@localhost log]# sesearch -A -s syslogd_t | grep user_home_dir_t
   allow syslogd_t user_home_dir_t : dir { getattr search open } ; 
   allow syslogd_t user_home_dir_t : lnk_file { read getattr } ; 
从中知道是能进行匹配的, 但是只能读取文件, 不能写文件, 还是不能解决我们的问题
4.这个时候需要找到syslogd_t能匹配运行写文件的目标Type, 可以使用sesearch -A -s syslogd_t | grep write查询的方式,也可以直接使用/var/log/message的Type,这里直接使用/var/log/message的Type
5.更改Type
[root@localhost log]# chcon -R -v -t var_log_t /home/log/
正在更改"/home/log/" 的安全环境
6.验证:
[root@localhost log]# ls -Zld /home/log/
drwxr-xr-x. 2 unconfined_u:object_r:var_log_t:s0 root root 6 530 19:15 /home/log/
[root@localhost log]# cd /home/log/
[root@localhost log]# ls
[root@localhost log]# systemctl restart rsyslog.service
[root@localhost log]# ls
message
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值