17.SELinux

发布时间:2024年01月11日

SELinux

1、SELinux简介

为了保障linux系统的安全,除了firewalld防火墙外,linux系统管理员通常会控制用户和组的权限,这种基于用户和组的安全模型称之为主动访问控制,而SELinux提供了一个额外的系统安全层,它是基于对象的安全模型,对象可以是文件、目录或端口,这样安全模型称之为强制访问控制。
SELinux提供了一组基于进程是否可以访问文件、目录或端口的安全策略。

security enhanced linux–安全加强的linux。是由美国国家安全局开发的以及历史。selinux之前是基于自主存取控制方法DAC,只要符合权限即可,通过suid和sgid特殊权限存在有一定的安全隐患,甚至一些错误的配置就会引发巨大的漏洞,被轻易攻击。
selinux是基于强制存取控制方法MAC,应用程序或用户必须同时符合DCA既要对应selinux的MAC才能正常操作,否则遭到拒绝。

DAC和MAC的比较
DAC:自主访问控制,主体是用户,访问目标文件,由文件本身权限决定的
MAC:强制访问控制,主体是程序,访问目标文件,由文件权限和策略决定。

2、SELinux的模式

SELinux一共有三种模式,分别是Enforcing、Permissive和Disabled。

模式功能说明
enforcing强制模式,主动拒绝SELinux策略限制的访问行为,同时会对访问行为进行记录
permissive许可模式,暂时允许SELinux策略正在限制的访问行为,同时会对访问进行记录。该模式一般用于故障排除。
disabled禁用模式,完全禁用SELinux

强制模式与许可模式之间可以相互切换,无需重新启动操作系统。若将模式从强制模式或许可模式更变设置为禁用模式时,此时需要重新启动操作系统才能彻底禁用SELinux;同样,若将模式从禁用模式变更设置为强制模式或许可模式时,此时也需要重新启动操作系统才能真正变更模式设置。

命令"setenforce"命令的设置只会改变SELinux当前的模式,并不会影响操作系统启动后SELinux所处的模式。配置文件/etc/selinux/config中SELINUX参数值的修改只会影响操作系统启动后SELinux所处的模式,并不会影响SELinux当前的模式。

3、管理SELinux上下文

Linux系统中每个文件、目录和端口都具有特别的安全标签,该标签称之为SELinux上下文。SELinux安全策略就是通过SELinux上下文用来确定进程是否可以访问文件、目录或端口。

SELinux标签具有多种上下文,依照顺序依次为用户、角色、类型和敏感度。RHEL中的默认策略会根据第三个上下文,即类型值上下文来制定规则。类型值的特征非常明显,通常以"_t"结尾。如web服务器的DocumentRoot目录/var/www/html中的文件或目录的类型为"httpd_sys_content_t"。

初始SELinux上下文

  • 一般情况下,文件的初始SELinux上下文由该文件父目录的SELinux上下文决定。当在某个目录中新建文件时,父目录的SELinux上下文会分配给新建的文件。

SELinux上下文的更改

  • 文件或目录SELinux上下文的更改由"chcon"和"restorecon"这两个命令完成。
命令功能描述
chcon将文件或目录的SELinux上下文更改为指定的类型,选项”-t”用于指定上下文类型
restorecon更改文件或目录的SELinux上下文的首选方式。它使用SELinux策略中的规则来确定文件或目录默认的上下文

查看文件的context值:

ll -Z  /abc/aa

查看目录的context值:

ll -ldZ /abc/

安全上下文三部分组成:用户u、角色r和类型识别符t

chcon -t tmp_t redhat # 更改redhat的context值为tmp_t

restorecon -v redhat  # 恢复redhat的context值
# 更改路径context值也会发生变化。

# 永久修改context值
semanage fcontext -a -t tmp_t "/abc(/.*)?"
restorecon -RFv /abc/

标签换乱时,touch /.autorelabel 重打标签
或将selinux配置文件中改为disabled重启再改回来。

4、bool开关

getsebool -a # 查看所有bool开关
setsebool -P # 修改布尔开关

例子:
临时修改(服务器重启后,失效)

setsebool  ftpd_full_access on

永久修改:

setsebool -P ftpd_full_access on

端口标记
添加

semanage port  -a -t [端口类型] -p  【tcp/udp】  【端口号】

添加端口标签

semanage port -a -t http_port_t -p tcp 8910

查询端口标签

semanage port -a | grep 8910

修改端口标签

semanage port -m -t pegasus_http_port_t -p tcp 8910

删除端口标签

semanage port -d -t pegasus_http_port_t -p tcp 8910
e port -m -t pegasus_http_port_t -p tcp 8910

删除端口标签

semanage port -d -t pegasus_http_port_t -p tcp 8910
文章来源:https://blog.csdn.net/qq_57012538/article/details/135526796
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。