热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

centOS权限问题-selinux小结:

注:本文图片来自鸟哥私房菜基础篇第四版截图,在centOS7.x中经常遇到给足权限,但是进程依旧提示权限不够的问题,前几天用rsyslog管理远程日志的时候就是这样,后来发现在cenOS7

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

在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

推荐阅读
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • Linux环境下MySQL的安装与配置
    本文详细介绍了在Linux系统上安装和配置MySQL的步骤,包括安装前的准备工作、下载和解压安装包、初始化数据库、配置文件编辑、启动服务以及设置开机自启动等。 ... [详细]
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • 对象存储与块存储、文件存储等对比
    看到一篇文档,讲对象存储,好奇,搜索文章,摘抄,学习记录!背景:传统存储在面对海量非结构化数据时,在存储、分享与容灾上面临很大的挑战,主要表现在以下几个方面:传统存储并非为非结 ... [详细]
  • 本文详细介绍了如何在Linux系统(以CentOS为例)上彻底卸载Zimbra邮件系统,包括停止服务、删除文件和用户等步骤。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • Jupyter Notebook多语言环境搭建指南
    本文详细介绍了如何在Linux环境下为Jupyter Notebook配置Python、Python3、R及Go四种编程语言的环境,包括必要的软件安装和配置步骤。 ... [详细]
  • 本文通过分析一个具体的案例,探讨了64位Linux系统对32位应用程序的兼容性问题。案例涉及OpenVPN客户端在64位系统上的异常行为,通过逐步排查和代码测试,最终定位到了与TUN/TAP设备相关的系统调用兼容性问题。 ... [详细]
  • 本文探讨了在Windows系统中运行Apache服务器时频繁出现崩溃的问题,并提供了多种可能的解决方案和建议。错误日志显示多个子进程因达到最大请求限制而退出。 ... [详细]
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • 在尝试启动Java应用服务器Tomcat时,遇到了org.apache.catalina.LifecycleException异常。本文详细记录了异常的具体表现形式,并提供了有效的解决方案。 ... [详细]
  • 【原创】《Linux设备驱动程序》学习之循序渐进---调试技术第四章---调试技术内核编程带有它自己的,独特的调试挑战性.内核代码无法轻易地在一个调试器下运行,也无法轻易的被跟踪,因为 ... [详细]
  • Linux系统中的日志管理与维护策略
    #journalctl命令的用法#用journal服务永久存储日志 系统默认日志存放在runlogjournal中,默认方式在系统重启后之前的日志会被清理 要永久保存 ... [详细]
  • 一些东西不经常用老忘记,记在这里有空就看看,一起进步H3C相关配置绑定接口的ip地址与MAC地址[H3C-GigabitEthernet107]user-bindip-addres ... [详细]
author-avatar
兔子东大门一手批发
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有