一、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)来指定不同的服务开放某些资源的访问与否。目前主要的策略有:
|
安全上下文(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.什么是防火墙
① 防火墙:防火墙是位于内部网和外部网之间的屏障,它按照系统管理员预先定义好的规则来控制数据包的进出
② 防火墙又可以分为硬件防火墙与软件防火墙
硬件防火墙: 由厂商设计好的主机硬件,这台硬件防火墙的操作系统主要以提供数据包数据的过滤机制为主,并将其他不必要的功能拿掉 |