Linux : selinux
DAC vs MAC 对比
模型 | 控制方式 | 决策依据 | 安全强度 |
---|---|---|---|
DAC | 自主访问控制 | 文件所有者的权限设置 | 低 |
MAC | 强制访问控制 | 系统级安全策略 | 极高 |
SELinux的核心原理是基于 强制访问控制(MAC) 模型,通过为系统资源打上安全标签并制定精细策略,实现远超传统 Linux 权限控制的保护机制
安全策略
策略类型 | 适用场景 | 特点 |
---|---|---|
targeted | 默认策略(推荐) | 仅保护关键服务(如 httpd) |
mls | 军事/政府级安全 | 极端严格,配置复杂 |
minimum | 最小化保护(容器环境) | 仅基础进程保护 |
模式
模式 | 状态 | 推荐场景 | 切换命令 |
---|---|---|---|
Enforcing | 强制模式 | 生产环境(默认) | setenforce 1 |
Permissive | 宽容模式 | 故障排查(仅记录不拦截) | setenforce 0 |
Disabled | 禁用模式 | 彻底禁用(需重启生效) | 修改 /etc/selinux/config |
getenforce 查看selinux当前状态
setenforce 更改selinux当前状态(暂时更改)
查看
[root@xieyuhui ~]# getenforce
Enforcing
更改
[root@xieyuhui ~]# setenforce 0
[root@xieyuhui ~]# getenforce
Permissive
setenforce 0表示更改为permissive,1表示为更改enforcing,永久更改需要进入配置文件/etc/sysconfig/selinux,修改下次开机的selinux状态
上下文
查看文件的context值:
ll -Z /abc/aa
查看目录的context值:
[root@xieyuhui ~]# ll -ldZ /kili
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /kili
安全上下文三部分组成:用户u、角色r和类型识别符t
chcon -t tmp_t redhat 更改redhat的context值为tmp_t
# 1. 临时修改文件上下文
[root@xieyuhui ~]# chcon -t tmp_t /kili
[root@xieyuhui ~]# ll -ldZ /kili
drwxr-xr-x. root root unconfined_u:object_r:tmp_t:s0 /kili# 2. 永久修改目录上下文(含子文件)
semanage fcontext -a -t httpd_sys_content_t "/www(/.*)?"(目录及子目录)
restorecon -Rv /www# 3. 重置错误上下文
touch /.autorelabel # 重启后重打标签
布尔值策略管理
# 查看所有布尔值开关
getsebool -a[root@xieyuhui ~]# getsebool -a
abrt_anon_write --> off
abrt_handle_event --> off
abrt_upload_watch_anon_write --> on
antivirus_can_scan_system --> off
antivirus_use_jit --> off
auditadm_exec_content --> on
authlogin_nsswitch_use_ldap --> off
authlogin_radius --> off
authlogin_yubikey --> off
awstats_purge_apache_log_files --> off# 查询特定服务开关
getsebool -a | grep ftp[root@xieyuhui ~]# getsebool -a | grep ftp
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_home_dir --> off# 临时启用
[root@xieyuhui ~]# setsebool cron_can_relabel on# 永久启用
[root@xieyuhui ~]# setsebool cron_can_relabel on -P
端口标记管理
# 添加 HTTP 端口标记
semanage port -a -t http_port_t -p tcp 8080[root@xieyuhui ~]# 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@xieyuhui ~]# semanage port -l | grep 8080
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010# 删除旧端口标记
semanage port -d -t http_port_t -p tcp 80# 查看所有端口标记
semanage port -ltcp 8080, 8118, 8123, 10001-10010# 删除旧端口标记
semanage port -d -t http_port_t -p tcp 80# 查看所有端口标记
semanage port -l