SELinux:Linux下紧张的权限控制安全组件

锦通  金牌会员 | 2024-11-3 20:37:38 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 991|帖子 991|积分 2973

SELinux是什么?

传统读写文件系统的方式位:DAC,自主访问控制,依据进程的拥有者对文件的权限来决定,缺点如下:1)root权限大概会被截取,具有最高权限控制,从而导致权限完全泄露;2)如果将文件设置为777,那么这会导致该文件会被全部用户访问
SELinux的筹谋控制为:以策略规则订定特定进程读写特定文件,即逼迫访问控制(MAC),每个进程都有自己的运行地区,各个进程只运行在自己的地区内,无法访问其他进程和文件(这和docker的资源管理有异曲同工之妙)
SELinux中分为主体、对象和策略,此处重点先容策略
策略做了什么安全保证?

要素:


  • 主体:进程
  • 对象:目标资源,一样平常是文件系统
  • 策略:会根据某些服务来订定基本的存取安全性政策,政策内还会有详细的规则 rule 来指定不同的服务开放某些资源的存取
对于SELinux,他提供了三种工作模式 :


  • Disabled:SELinux 被关闭,使用 DAC 访问控制方式
  • Permissive: 宽容模式,SELinux被启用,但安全策略规则并没有被逼迫实行。当安全策略规则应该拒绝访问时,访问仍然被允许。这时会向日志文件发送一条该访问应该被拒绝的消息
  • Enforcing: 逼迫模式,SELinux 被启动,并逼迫实行全部的安全策略规则
设置文件如下
  1. root@iZbp11biajzuozsuyop6jgZ:/# cat /etc/selinux/config
  2. # This file controls the state of SELinux on the system.
  3. # SELINUX= can take one of these three values:
  4. # enforcing - SELinux security policy is enforced.
  5. # permissive - SELinux prints warnings instead of enforcing.
  6. # disabled - No SELinux policy is loaded.
  7. SELINUX=permissive
  8. # SELINUXTYPE= can take one of these two values:
  9. # default - equivalent to the old strict and targeted policies
  10. # mls     - Multi-Level Security (for military and educational use)
  11. # src     - Custom policy built from source
  12. SELINUXTYPE=default
  13. # SETLOCALDEFS= Check local definition changes
  14. SETLOCALDEFS=0
复制代码
获取当前 SELinux 运行状态
  1. # sestatus
  2. SELinux status:                 enabled
  3. SELinuxfs mount:                /selinux
  4. Current mode:                   enforcing
  5. Mode from config file:          enforcing
  6. Policy version:                 21
  7. Policy from config file:        targeted
复制代码
改变 SELinux 运行状态
  1. # 强制访问控制
  2. setenforce 1
  3. # 自主访问控制
  4. setenforce 0
复制代码
SELinux中默认定义了两个策略来订定规则


  • targeted:默认策略,用于限定网络服务
  • strict :多级安全掩护策略,代表全部网络服务和访问哀求都要经过 SELinux
在/etc/sysconfig/selinux中对其进行修改
  1. # cat /etc/sysconfig/selinux
  2. # This file controls the state of SELinux on the system.
  3. # SELINUX= can take one of these three values:
  4. #     enforcing - SELinux security policy is enforced.
  5. #     permissive - SELinux prints warnings instead of enforcing.
  6. #     disabled - No SELinux policy is loaded.
  7. SELINUX=disabled
  8. # SELINUXTYPE= can take one of these two values:
  9. #     targeted - Targeted processes are protected,
  10. #     mls - Multi Level Security protection.
  11. SELINUXTYPE=strict
复制代码
除此之外,每个文件或者进程都要有一个安全上下文,进程是否可以访问文件或目次,就要其安全上下文是否匹配(是否匹配的规则是通过策略中的规则来订定的)
  1. [root@study ~]# ls -Z
  2. -rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 accountadd.sh
  3. -rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 accountadd.txt
  4. -rwxr--r--+ root root unconfined_u:object_r:admin_home_t:s0 acl_test1
  5. -rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 addaccount2.sh
  6. -rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
  7. -rw-r--r--. root root system_u:object_r:admin_home_t:s0 initial-setup-ks.cfg
复制代码
安全上下文存在于主体进程中与目标文件资源中,物理位置是放在文件的 inode 中,一样平常分为三个字段


  • identify:身份,相当于账户方面的身份辨认,一样平常分为unconfined_u、system_u
  • role:通过该字段,可以知道这个资料是属于进程、文件资源照旧代表使用者,object_r代表的是文件或目次等文件资源,system_r代表的是进程
  • type:类型字段在文件与进程的定义不雷同,在进程中称为domain
domain 需要与 type 搭配,则该进程才可以或许顺利的读取文件资源,一个进程安全上下文一样平常对应多个文件安全上下文
设置过程(以AppArmor为例)

   Ubuntu默认是不支持SELinux的,可以选择安装CentOS
  在此处我以AppArmor为例
两者均为MAC访问控制,但是也有一些差异点:AppArmor 的操纵原则是先授予权限,再应用限定。SELinux 则采取更为保守的方式,默认会限定全部应用步伐的访问,仅向提供适当凭证的用户授予访问权限
  1. sudo apt install apparmor-profiles
  2. sudo apt install apparmor-utils
  3. sudo apt install apparmor-profiles-extra
复制代码
查看AppArmor是否开启
  1. root@iZbp11biajzuozsuyop6jgZ:~# aa-enabled
  2. Yes
复制代码
AppArmor 通过设置文件来管理各个步伐的权限(这一点和qnx的secpool机制有点像)设置文件的文件名通常是其控制的步伐的完备路径名(比如 /etc/apparmor.d/usr.sbin.nginx 是控制 Nginx 的设置文件)
生效的设置文件的位置是 /etc/apparmor.d,而提供的一些可选设置文件夹位于 /usr/share/apparmor/profiles 里
  1. root@iZbp11biajzuozsuyop6jgZ:/etc/apparmor.d# ls
  2. abi           force-complain   samba-bgqd      tunables              usr.bin.pidgin                   usr.sbin.apt-cacher-ng  usr.sbin.mdnsd     usr.sbin.smbldap-useradd
  3. abstractions  local            sbin.dhclient   ubuntu_pro_apt_news   usr.bin.tcpdump                  usr.sbin.avahi-daemon   usr.sbin.nmbd      usr.sbin.traceroute
  4. apache2.d     lsb_release      sbin.klogd      ubuntu_pro_esm_cache  usr.bin.totem                    usr.sbin.chronyd        usr.sbin.nscd
  5. bin.ping      nvidia_modprobe  sbin.syslogd    usr.bin.irssi         usr.bin.totem-previewers         usr.sbin.dnsmasq        usr.sbin.rsyslogd
  6. disable       php-fpm          sbin.syslog-ng  usr.bin.man           usr.lib.snapd.snap-confine.real  usr.sbin.identd         usr.sbin.smbd
复制代码
在 AppArmor 中,每一个设置文件都有三种状态:enforce、complain 以及 disable,分别使用 aa-enforce ()、aa-complain () 以及 aa-disable () 来切换对应步伐的设置文件


  • enforce:逼迫模式,这种模式下,全部没有被授权的运动都会被禁止而且记载
  • complain:抱怨模式,此时未授权运动会被放行,但是也会被记载
  • disable:此时对应设置文件不加载,没有对步伐运动进行限定
开启和关闭AppArmor服务
  1. sudo systemctl enable apparmor # 允许该服务运行
  2. sudo systemctl disable apparmor # 禁止该服务运行
  3. sudo systemctl start apparmor.service   # 开启和服务
  4. sudo systemctl stop apparmor.service   # 停止服务
  5. sudo systemctl status apparmor.service   # 服务状态
  6. sudo systemctl reload apparmor.service   # 加载配置
复制代码
添加设置文件
  1. apparmor_parser -r /path/to/profile # 添加入内核中
  2. apparmor_parser -R /path/to/profile # 从内核中移除
复制代码
同理:QNX的secpol机制

参考官网:secpol官网资料

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

锦通

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表