selinux && firewalld

发布于:2025-06-10 ⋅ 阅读:(19) ⋅ 点赞:(0)

一、selinux

1.说明

SELinux 是 Security-Enhanced Linux 的缩写,意思是安全强化的 linux;

SELinux 主要由美国国家安全局(NSA)开发,当初开发的目的是为了避免资源的误用

DAC(Discretionary Access Control)自主访问控制系统
MAC(Mandatory Access Control)强制访问控制系统

2.工作原理

        SELinux 是通过 MAC 的方式来控制管理进程,它控制的主体是进程,而目标则是该进程能否读取的文件资源

主体(subject):就是进程;
目标(object):被主体访问的资源,可以是文件、目录、端口等;

策略(policy):由于进程与文件数量庞大,因此 SELinux 会依据某些服务来制定基本的访问安全策略。这些策略内还会有详细的规则(rule)来指定不同的服务开放某些资源的访问与否。目前主要的策略有:

  • targeted:针对网络服务限制较多,针对本机限制较少,是默认的策略;

  • strict:完整的 SELinux 限制,限制方面较为严格;

安全上下文(security context):主体能不能访问目标除了策略指定外,主体与目标的安全上下文必须一致才能够顺利访问。 最终文件的成功访问还是与文件系统的 rwx 权限设置有关 

大部分网络服务程序的进程访问目标对象(目录、文件、端口)进行标签匹配。如果目标对象使用户自定义的必须要更改标签

查看文件的安全上下文:

[root@localhost ~]# ls -Z

安全上下文用冒号分为四个字段:

① unconfined_u    ② object_r    ③ admin_home_t    ④ s0

① 身份标识(Identify):相当于账号方面的身份标识,主要有以下三种常见的类型:

root:表示root的账号身份;

system_u:表示程序方面的标识,通常就是进程;

unconfined_u:代表的是一般用户账号相关的身份;

② 角色(role):通过角色字段,可知道这个数据是属于程序、文件资源还是代表用户。一般角色有:

object_r:代表的是文件或目录等文件资源;

system_r:代表的是进程;

③ 类型(type):在默认的targeted策略中,Identify与role字段基本上是不重要的,重要的在于这个类型字段。而类型字段在文件与进程的定义不太相同,分别是:   content标签

type:在文件资源上面称为类型;

domain:在主体程序中则称为域;xxxx_xxx_xxx_t

domain需要与type搭配,则该程序才能够顺利读取文件资源;

④ 最后一个字段是和MLS和MCS相关的东西,代表灵敏度,一般用s0、s1、s2来命名,数字代表灵敏度的分级。数值越大、灵敏度越高

s0:不开启级别控制;

s1:开启级别并严格执行;

s2:相对 s1 而言较为宽松,不是很严格

3.启动、关闭与查看

① selinux 的三种模式:

enforcing:强制模式,代表SELinux正在运行中,开始限制 domain/type;
permissive:宽容模式,代表 SELinux 正在运行中,不过仅会有警告信息并不会实际限制 domain/type 的访问;
disabled:关闭,SELinux 并没有实际运行
①
# 查看目前的selinux模式
[root@localhost ~]# getenforce 
Enforcing   # 强制模式

②
# 查看目前selinux使用的策略
[root@localhost ~]# sestatus
SELinux status:                 enabled           # SELinux已加载并运行,若为disabled,则完全关闭
SELinuxfs mount:                /sys/fs/selinux   # SELinux的虚拟文件系统挂载点
SELinux root directory:         /etc/selinux      # SELinux主配置目录
Loaded policy name:             targeted          # 当前加载的策略名称
Current mode:                   enforcing         # 当前运行模式
Mode from config file:          enforcing         # 配置文件中设置的模式
Policy MLS status:              enabled           # 是否启用多级安全(Multi-Level Security)
Policy deny_unknown status:     allowed           # 未知类型的操作默认处理方式
Memory protection checking:     actual (secure)   # 内存保护检查级别
Max kernel policy version:      33                # 内核支持的最高策略版本

③
# 查看selinux的策略
[root@localhost ~]# vim /etc/selinux/config
SELINUX=enforcing   # 没有启动selinux模块再次启动selinux模块时,系统每个文件都会设置selinux标签
SELINUXTYPE=targeted

    改变策略之后需要重新启动;
    如果由enforcing或permissive改成disabled,或由disabled改为其它两个,也必须要重新启动;
    将selinux模式在enforcing和permissive之间切换的方法为:
        setenforce 0 转换成permissive宽容模式
        setenforce 1转换成enforcing强制模式

② 实验一:使用 httpd 服务演示安全上下文值的设定

临时生效 (chcon = change context)

chcon [-R] [-t type] [-u user] [-r role] 文件
-R:连同该目录下的子目录也同时修改;
-t:后面接安全上下文的类型字段;
-u:后面接身份识别;
-r:后面接角色
chcon [-R] --reference=范例文件 文件 将文件的安全上下文按照范例文件修改
# 原index.html安全上下文
[root@localhost ~]# ll -Z /www/index.html 
-rw-r--r--. 1 root root unconfined_u:object_r:default_t:s0 12  5月 26 16:19 /www/index.html


# 经过代码更改:
[root@localhost ~]# ll -Z /usr/share/nginx/html/index.html 
lrwxrwxrwx. 1 root root system_u:object_r:httpd_sys_content_t:s0 25  7月 16  20sr/share/nginx/html/index.html -> ../../testpage/index.html

[root@localhost ~]# chcon -t httpd_sys_content_t /www/ -R  


# 修改后index.html安全上下文
[root@localhost ~]# ll -Z /www/index.html 
-rw-r--r--. 1 root root unconfined_u:object_r:httpd_sys_content_t:s0 12  5月 269 /www/index.html


# chcon [-R] --reference=范例文件 文件 将文件的安全上下文按照范例文件修改
[root@localhost ~]# chcon --reference /usr/share/nginx/html/ /test

[root@localhost ~]# ll -Zd /test
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0 6  5月 26 17:00 /test

③ 重置指定文件或目录的安全上下文

restorecon [-Rv] 文件或目录
-R:连同子目录一起修改;
-v:将过程显示到屏幕上
restorecon怎么会知道每个目录记载的默认selinux type类型呢?因为系统将每个目录的默认selinux type类型记录在/etc/selinux/targeted/contexts/目录内。但是该目录内有很多不同的数据,所以我们可以用semanage这个命令的功能来查询与修改。
semanage {login|user|port|interface|fcontext|translation} -l    # 永久更改
semanage fcontext -{a|d|m} [-frst] file_spec
-l为查询;
-a:增加一些目录的默认安全上下文的设置;
-m:修改;
-d:删除;
-t:类型

restorecon  [-Rv]  文件或目录

# 原index.html安全上下文
[root@localhost ~]# ll -Z /www 
-rw-r--r--. 1 root root unconfined_u:object_r:httpd_sys_content_t:s0 12  5月 269 /www


# 经过代码更改:
[root@localhost ~]# restorecon /www 


# 修改后index.html安全上下文
[root@localhost ~]# ll -Zd /www
drwxr-xr-x. 3 root root unconfined_u:object_r:default_t:s0 33  5月 26 16:33 /www

semanage {login|user|port|interface|fcontext|translation} -l    # 永久更改

# 为SELinux添加一条持久化的文件上下文规则,确保/www目录及其内容被标记为httpd可访问的内容
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /www

# 标签未立刻改变是因为只是基于内核层做了更改,属性依旧是原来的default
[root@localhost ~]# ll -Zd /www
drwxr-xr-x. 3 root root unconfined_u:object_r:default_t:s0 33  5月 26 16:33 /www

# 进行回滚操作加载内核层信息
[root@localhost ~]# restorecon /www   

# 标签永久生效
[root@localhost ~]# ll -Zd /www
drwxr-xr-x. 3 root root unconfined_u:object_r:httpd_sys_content_t:s0 33  5月 26 16:33 /www

semanage  fcontext  -{a|d|m}  [-frst]  file_spec(更改端口标签)

[root@localhost ~]# semanage port -l | grep -w 80    # 查看80端口的SELinux规则
http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 900

[root@localhost ~]# semanage port -a -t http_port_t -p tcp 8909    # 添加新的HTTP端口规则

[root@localhost ~]# semanage port -l | grep -w 80
http_port_t                    tcp      8909, 80, 81, 443, 488, 8008, 8009, 84400

总结:

selinux 访问控制
1.服务配置时如果对服务程序的数据文件自定义路径时,selinux开启必须对数据文件的标签进行修改;
2.服务配置时自定义端口,需要更改端口的标签

二、firewalld

1.什么是防火墙

① 防火墙:防火墙是位于内部网和外部网之间的屏障,它按照系统管理员预先定义好的规则来控制数据包的进出

② 防火墙又可以分为硬件防火墙与软件防火墙

硬件防火墙:

由厂商设计好的主机硬件,这台硬件防火墙的操作系统主要以提供数据包数据的过滤机制为主,并将其他不必要的功能拿掉