SELinux
一、简介
SELinux : 安全强化的Linux;在开启后,会对进程本身部署安全上下文;会对文件部署安全上下文;对法务使用端口进行限制;对程序本身的不安全功能做限制
二、工作原理
1、工作方式
通过MAC的方式来控制管理进程,它控制的主体是进程,而目标则是该进程能否读取的文件资源,如文件、目录、端口等等
2、安全上下文
security context : 主体与目标的安全上下文必须一致才能访问;最终文件的成功访问还是与文件系统的rwx权限设置有关
#文件安全上下文查看
ls -Z
#进程的安全上下文
ps auZ | grep vsftpd
[root@hai ~]# cd /var/ftp/
[root@hai ftp]# ls -Z
unconfined_u:object_r:public_content_t:s0 file
unconfined_u:object_r:mnt_t:s0 file1
system_u:object_r:public_content_t:s0 pub
[root@hai ftp]#
[root@hai ftp]# ps auZ | grep vsftpd
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 root 4311 0.0 0.0 221680 2304 pts/0 S+ 17:03 0:00 grep --color=auto vsftpd
安全上下文字段: Identify : role : type
身份标识 : root账号身份、system_u进程、unconfined_u一般用户账号
角色 : object_r 文件或目录等文件资源、 system_r进程
类型 : type在文件资源上面称为类型、domain在主体程序中则称域
domain需要与type搭配,则该进程才能顺利读取文件资源
s0、s1 : 代表灵敏度的分级,数值越大,灵敏度越高
三、优化管理
1、工作模式
- enforcing : 强制模式,开始限制domain/type
- permissing : 宽容模式,仅警告并不限制
- disabled : 关闭,没有运行
2、对于SELinux状态管理
# 查看当前状态
[root@hai ~]# getenforce
Enforcing
# 临时更改工作模式
setenforce 0|1 # 0表示宽容模式 1表示强制模式
[root@hai ~]# setenforce 0
[root@hai ~]# getenforce
Permissive
# 永久更改
grubby --update-kernel ALL --args selinux=0 #更改重启才能生效
# 创建识别刷新文件
touch /.autorelabel
3、管理文件的安全上下文
# 临时更改文件的安全上下文
chcon
-R : 连同该目录下的子目录同时修改
-t : 后面接安全上下文的类型字段
-u : 身份识别
-r : 角色
# 永久修改
semanger fcontext
-l : 列出所有记录
-a : 添加记录
-m : 修改
-d : 删除
-t : 添加的类型
# 刷新安全上下文
restorecon -RV 文件目录 # -R 连同子目录一起修改 -V 将进程显示到屏幕上
4、对服务的影响
# 查看sebool值
getsebool -a | grep 服务名称
#修改
setsebool -P 0|1 # -P 表示永久生效
# 查询ssh被允许使用的端口,并添加更改
[root@hai ~]# semanage port -l | grep ssh
ssh_port_t tcp 22
[root@hai ~]# semanage port -a -t ssh_port_t -p tcp 666
[root@hai ~]# semanage port -l | grep ssh
ssh_port_t tcp 666, 22
[root@hai ~]#
5、实例
[root@hai ftp]# getenforce
Enforcing # 在强制模式下
[root@hai ftp]# lftp 172.25.254.200 # 上传
lftp 172.25.254.200:~> ls
-rw-r--r-- 1 0 0 0 Nov 19 08:45 file1
drwxr-xr-x 2 0 0 6 Oct 30 2023 pub
lftp 172.25.254.200:/> cd pub/
lftp 172.25.254.200:/pub> ls
lftp 172.25.254.200:/pub> put /etc/inittab # 上传文件失败
put: /etc/inittab: 访问失败: 553 Could not create file. (inittab)
lftp 172.25.254.200:/pub>
exit
[root@hai ftp]# ls -Z # 查看文件安全上下文
system_u:object_r:public_content_t:s0 file1
system_u:object_r:public_content_t:s0 pub
# 永久修改安全上下文
[root@hai ftp]# semanage fcontext -a -t public_content_rw_t '/var/ftp/pub(/.*)?'
[root@hai ftp]# restorecon -RvvF /var/ftp/pub/ # 刷新安全上下文
Relabeled /var/ftp/pub from system_u:object_r:public_content_t:s0 to system_u:object_r:public_content_rw_t:s0
[root@hai ftp]# getsebool -a | grep ftp # 查看ftp服务的sebool值
ftpd_anon_write --> off # 关闭
[root@hai ftp]# setsebool -P ftpd_anon_write on # 永久生效修改
[root@hai ftp]# getsebool -a | grep ftp
ftpd_anon_write --> on # 已开启
[root@hai ftp]# chmod 777 /var/ftp/pub
[root@hai ftp]# lftp 172.25.254.200
lftp 172.25.254.200:~> cd pub/
lftp 172.25.254.200:/pub> put /etc/inittab
490 bytes transferred # 上传成功
[root@hai ~]# getenforce #查看当前SELinux状态
Enforcing
[root@hai ~]# setenforce 0 # 修改为宽容模式
[root@hai ~]# vim /etc/nginx/nginx.conf
[root@hai ~]# systemctl restart nginx.service # 可以重启服务
[root@hai ~]# setenforce 1 #强制模式
[root@hai ~]# systemctl restart nginx.service #强制模式下重启失败
Job for nginx.service failed because the control process exited with error code.
See "systemctl status nginx.service" and "journalctl -xeu nginx.service" for details.
[root@hai ~]# semanage port -l | grep http #查询服务允许使用的端口
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
[root@hai ~]# semanage port -a -t http_port_t -p tcp 8989 #更改被允许使用的端口8989
[root@hai ~]# semanage port -l | grep http
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 8989, 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
[root@hai ~]# systemctl restart nginx.service #重启服务
原文地址:https://blog.csdn.net/m0_64469733/article/details/143918893
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!