RH134-第二十一节-selinux对文件的控制

本文深入解析SELinux的工作原理,包括主体、目标与政策的概念,以及如何配置安全性本文(security context)来确保系统的安全性。同时介绍了SELinux的启动、关闭与观察方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SELinux 的运作模式

    主体 (Subject):SELinux 主要想要管理的就是程序,因此你可以将『主体』跟 process 划上等号;

    目标 (Object): 主体程序能否存取的『目标资源』一般就是文件系统。因此这个目标项目可以等文件系统划上等号;

    政策 (Policy): 由于程序与档案数量庞大,因此 SELinux 会依据某些服务来制订基本的存取安全性政策。这些政策内还会有详细的规则 (rule) 来指定不同的服务开放某些资源的存取与否。在目前的 CentOS 6.x 里面仅有提供两个主要的政策如下,一般来说,使用预设的 target 政策即可。
        targeted:针对网络服务限制较多,针对本机限制较少,是预设的政策;
        mls:完整的 SELinux 限制,限制方面较为严格。

   安全性本文 (security context): 我们刚刚谈到了主体、目标与政策面,但是主体能不能存取目标除了要符合政策指定之外,主体与目标的安全性本文必须一致才能够顺利存取。 这个安全性本文 (security context) 有点类似文件系统的 rwx 啦!安全性本文的内容与设定是非常重要的! 如果设定错误,你的某些服务(主体程序)就无法存取文件系统(目标资源),当然就会一直出现『权限不符』的错误讯息了!

(1) 主体程序必须要通过 SELinux 政策内的规则放行后,就可以与目标资源进行安全性本文的比对
(2)若比对失败则无法存取目标,若比对成功则可以开始存取目标。


安全性本文 (Security Context)



身份识别 (Identify): 相当于账号方面的身份识别!主要的身份识别则有底下三种常见的类型:
         root:表示 root 的账号身份,如同上面的表格显示的是 root 家目录下的数据啊!
         system_u:表示系统程序方面的识别,通常就是程序啰;
        user_u:代表的是一般使用者账号相关的身份。

    角色 (Role): 透过角色字段,我们可以知道这个数据是属于程序、档案资源还是代表使用者。一般的角色有:
         object_r:代表的是档案或目录等档案资源,这应该是最常见的啰;
        system_r:代表的就是程序啦!不过,一般使用者也会被指定成为 system_r 喔!

    类型 (Type): 在预设的 targeted 政策中, Identify 与 Role 字段基本上是不重要的!重要的在于这个类型 (type) 字段! 基本上,一个主体程序能不能读取到这个档案资源,与类型字段有关!而类型字段在档案与程序的定义不太相同,分别是:
         type:在档案资源 (Object) 上面称为类型 (Type);
         domain:在主体程序 (Subject) 则称为领域 (domain) 了!
    domain 需要与 type 搭配,则该程序才能够顺利的读取档案资源啦!


SELinux 的启动、关闭与观察

查看并永久修改selinux的启动和政策






  注:如果由 enforcing 或 permissive 改成 disabled ,或由 disabled 改成其他两个,那也必须要重新启动。

SELinux type 的修改

    注:单纯的复制文件时,SELinux 的 type 字段是会继承目标目录的(即会变成和所到的目录的一样); 如果是移动,那么连同 SELinux 的类型也会被移动过去。



    复原成原有的 SELinux type:


默认目录的安全性本文查询与修改

    semanage(需要安装:yum install policycoreutils-python):



    利用 semanage 设定 /srv/vbird 目录的默认安全性本文为 public_content_t(修改的就是默认值):



政策查询:seinfo(需要安装:yum install setools-console



    政策为targeted时,针对httpd制定的规则为:


如果你想要找到有 httpd 字样的安全性本文类别时, 就可以使用『 seinfo -t | grep httpd 』来查询了!如果查询到相关的类别或者是布尔值后,想要知道详细的规则时, 就得要使用 sesearch 这个指令了!
    sesearch:



布尔值的查询与修改:(getsebool,setsebool)







整篇最重要的内容

    setroubleshoot --> 错误讯息写入 /var/log/messages
    需要软件:setroublshoot 与 setroubleshoot-server
    原本的 SELinux 信息本来是以两个服务来记录的,分别是 auditd 与 setroubleshootd。既然是同样的信息, 因此 CentOS 6.x 将两者整合在 auditd 当中啦!所以,并没有 setroubleshootd 的服务存在了喔!因此, 当你安装好了 setroubleshoot-server 之后,请记得要 重新启动 auditd,否则 setroubleshootd 的功能不会被启动的。

    演示:




     让 setroubleshoot 主动的发送产生的信息到我们指定的 email:



SELinux 错误克服的总结:
         1、在服务与 rwx 权限都没有问题,却无法成功的使用网络服务时;
         2、先使用 setenforce 0 设定为宽容模式;
         3、再次使用该网络服务,如果这样就能用,表示 SELinux 出问题,请往下继续处理。如果这样还不能用,那问题就不是在 SELinux 上面!请再找其他解决方法,底下的动作不适合你;
         4、分析 /var/log/messages 内的信息,找到 sealert -l 相关的信息并且执行;
         5、找到 Allow Access 的关键词,照里面的动作来进行 SELinux 的错误克服;
         6、处理完毕重新 setenforce 1 ,再次测试网络服务吧!

##selinux:
selinux
是进程,文件等权限设置依据的一个内核模块。

   selinux
的启动关闭与查看:
   模式:vim/etc/sysconfig/selinux
     enforceing:强制模式

     permissive:警告模式
     diabled:关闭,selinux并没有实际运行

   查看:

     getenforce        ##显示selinux模式
     setenforce 0|1    ##更改selinux模式
     0:表示permissive警告模式
     1:表示enforceing强制模式
  

 显示进程的selinux的安全上下文:
     ps axuZ |  grep vsftpd   ##-Z参数可以查询进程的安全上下文

测试

    touch file
    mv file /var/ftp/pub
   1)enforceing
模式
     ls ##不能看到从别处转移过来的文件
  

2)permissive模式
     ls ##可以看到从别处转移过来的文件

     ls -Z ##查看文件selinux的安全上下文,本地文件和从别处转移过来的文件的selinux安全上下文是不一样的



    chcon -t public_content_t/var/ftp/pub/file    更改文件的selinux安全上下文,与本地文件一样,此时在enforcing模式下也可以看到从别处移过来的文件


  

1.selinux的永久设定:
selinux=Enforcing:
   mkdir /westos                 
   touch /westos/file{1..10}      
   ls /westos/
   vim /etc/vsftpd/vsftpd.conf          ##将匿名用户的家目录设置为/westos:
anon_root=/westos

   systemctl restart vsftpd.service     ##重启服务

  lftp 172.25.254.122                 ##匿名用户登陆的家目录/westos,用ls进行查看看不到之前新建的10个文件
   ps auxZ | grep vsftpd                ##显示vsftpd进程的安全上下文
   ls -lZ /var/ftp                      ##查看/var/ftp文件selinux的安全上下文
   ls -Zd /westos/                      ##查看/westos目录selinux的安全上下文
   semanage fcontext -l | grepwestos      ##查询/westos的默认安全上下文设置
   semanage fcontext -l | grep/var/ftp/   ##查看/var/ftp文件的默认安全上下文设置
   semanage fcontext -a -tpublic_content_t '/westos(/.*)?'  ##永久更改目/westos的selinux安全上下文和/var/ftp中的文件一样
  semanage fcontext -l | grep /var/ftp/   
   semanage fcontext -l | grepwestos
   ls -Zd /westos/
   restorecon -RvvF /westos/           ##
恢复更改后的/westos的selinux的安全上下文
   lftp 172.25.254.122         
   touch /westos/file11                ##
在目录中新建文件
   lftp 172.25.254.122                 ##用ls进行查看可以看到新建的file11文件,证明新建文件的安全上下文和目录保持一致
   ls -Z /westos/                      ##查询新建文件之后的目录中所有文件的安全上下文,
   ##目录的安全上下文被更改之后,目录下新建文件的安全上下文和目录保持一致



 



selinux=Permissive时:


  ##在selinux=Permissive时,不用修改/westos的安全上下文,用lftp连接之后直接可以看到/westos下建立的文件
.
 
selinux默认关闭服务开启:(selinux内核防火墙在enforcing状态下会自动关闭一些不安全的服务)

   getenforce                                 ##查询selinux状态
   vim /etc/vsftpd/vsftpd.conf                ##默认情况下本地用户具有写的权限

   lftp 172.25.254.122 -u student             ##student用户登陆,不能上传文件

   ls -ld /home/student/                      ##查询/home/student目录权限
   chmod u+w /home/student/                   ##给/home/student增加写的权限
   lftp 172.25.254.122 -u student             ##student用户登陆,增加权限后依然不能上传文件
   getsebool -a | grep ftp                    ##查看所有ftp服务设定状态
   setsebool -P ftp_home_dir 1                ##直接将设置 写入配置文件,修改之后会生效
   参数P必须是大写,否则命令无法执行
   getsebool -a | grep ftp                    ##检查是否开启
   lftp 172.25.254.122 -u student             ##student用户登陆,上传文件成功


   ##由于进程的文件数量庞大,因此selinux服务会依据某些服务来制定基本的访问安全性策略,这些策略里还会有详细的规则来制定不同的服务开放某些资源的访问与否。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值