SELinux:Linux下紧张的权限控制安全组件
SELinux是什么?传统读写文件系统的方式位:DAC,自主访问控制,依据进程的拥有者对文件的权限来决定,缺点如下:1)root权限大概会被截取,具有最高权限控制,从而导致权限完全泄露;2)如果将文件设置为777,那么这会导致该文件会被全部用户访问
SELinux的筹谋控制为:以策略规则订定特定进程读写特定文件,即逼迫访问控制(MAC),每个进程都有自己的运行地区,各个进程只运行在自己的地区内,无法访问其他进程和文件(这和docker的资源管理有异曲同工之妙)
SELinux中分为主体、对象和策略,此处重点先容策略
策略做了什么安全保证?
要素:
[*] 主体:进程
[*] 对象:目标资源,一样平常是文件系统
[*] 策略:会根据某些服务来订定基本的存取安全性政策,政策内还会有详细的规则 rule 来指定不同的服务开放某些资源的存取
对于SELinux,他提供了三种工作模式 :
[*] Disabled:SELinux 被关闭,使用 DAC 访问控制方式
[*] Permissive: 宽容模式,SELinux被启用,但安全策略规则并没有被逼迫实行。当安全策略规则应该拒绝访问时,访问仍然被允许。这时会向日志文件发送一条该访问应该被拒绝的消息
[*] Enforcing: 逼迫模式,SELinux 被启动,并逼迫实行全部的安全策略规则
设置文件如下
root@iZbp11biajzuozsuyop6jgZ:/# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of these two values:
# default - equivalent to the old strict and targeted policies
# mls - Multi-Level Security (for military and educational use)
# src - Custom policy built from source
SELINUXTYPE=default
# SETLOCALDEFS= Check local definition changes
SETLOCALDEFS=0
获取当前 SELinux 运行状态
# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 21
Policy from config file: targeted
改变 SELinux 运行状态
# 强制访问控制
setenforce 1
# 自主访问控制
setenforce 0
SELinux中默认定义了两个策略来订定规则
[*] targeted:默认策略,用于限定网络服务
[*] strict :多级安全掩护策略,代表全部网络服务和访问哀求都要经过 SELinux
在/etc/sysconfig/selinux中对其进行修改
# cat /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=strict
除此之外,每个文件或者进程都要有一个安全上下文,进程是否可以访问文件或目次,就要其安全上下文是否匹配(是否匹配的规则是通过策略中的规则来订定的)
# ls -Z
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 accountadd.sh
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 accountadd.txt
-rwxr--r--+ root root unconfined_u:object_r:admin_home_t:s0 acl_test1
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 addaccount2.sh
-rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
-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 则采取更为保守的方式,默认会限定全部应用步伐的访问,仅向提供适当凭证的用户授予访问权限
sudo apt install apparmor-profiles
sudo apt install apparmor-utils
sudo apt install apparmor-profiles-extra
查看AppArmor是否开启
root@iZbp11biajzuozsuyop6jgZ:~# aa-enabled
Yes
AppArmor 通过设置文件来管理各个步伐的权限(这一点和qnx的secpool机制有点像)设置文件的文件名通常是其控制的步伐的完备路径名(比如 /etc/apparmor.d/usr.sbin.nginx 是控制 Nginx 的设置文件)
生效的设置文件的位置是 /etc/apparmor.d,而提供的一些可选设置文件夹位于 /usr/share/apparmor/profiles 里
root@iZbp11biajzuozsuyop6jgZ:/etc/apparmor.d# ls
abi force-complain samba-bgqd tunables usr.bin.pidgin usr.sbin.apt-cacher-ngusr.sbin.mdnsd usr.sbin.smbldap-useradd
abstractionslocal sbin.dhclient ubuntu_pro_apt_news usr.bin.tcpdump usr.sbin.avahi-daemon usr.sbin.nmbd usr.sbin.traceroute
apache2.d lsb_release sbin.klogd ubuntu_pro_esm_cacheusr.bin.totem usr.sbin.chronyd usr.sbin.nscd
bin.ping nvidia_modprobesbin.syslogd usr.bin.irssi usr.bin.totem-previewers usr.sbin.dnsmasq usr.sbin.rsyslogd
disable php-fpm sbin.syslog-ngusr.bin.man usr.lib.snapd.snap-confine.realusr.sbin.identd usr.sbin.smbd
在 AppArmor 中,每一个设置文件都有三种状态:enforce、complain 以及 disable,分别使用 aa-enforce ()、aa-complain () 以及 aa-disable () 来切换对应步伐的设置文件
[*] enforce:逼迫模式,这种模式下,全部没有被授权的运动都会被禁止而且记载
[*] complain:抱怨模式,此时未授权运动会被放行,但是也会被记载
[*] disable:此时对应设置文件不加载,没有对步伐运动进行限定
开启和关闭AppArmor服务
sudo systemctl enable apparmor # 允许该服务运行
sudo systemctl disable apparmor # 禁止该服务运行
sudo systemctl start apparmor.service # 开启和服务
sudo systemctl stop apparmor.service # 停止服务
sudo systemctl status apparmor.service # 服务状态
sudo systemctl reload apparmor.service # 加载配置
添加设置文件
apparmor_parser -r /path/to/profile # 添加入内核中
apparmor_parser -R /path/to/profile # 从内核中移除
同理:QNX的secpol机制
参考官网:secpol官网资料
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]