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