Linux
SELinux(Security-Enhanced Linux)
權限管理
為了加強系統安全性,SELinux 採用強制存取控制(MAC, Mandatory Access Control),不再讓檔案擁有者擁有完全的授權權力。
在 SELinux 中,每個物件(檔案、程式等)都有一個安全標籤(Security Context),記載該物件能夠被什麼主體(subject)以什麼方式操作。
安全標籤查看
範例輸出:
user_u:SELinux 用戶(user)
object_r:角色(role)
admin_home_t:類型(type)
s0:敏感度(level),主要用於 MLS(多層級安全)策略
常見標籤結尾代表意義:
_u 結尾:user
_r 結尾:role
_t 結尾:type
SELinux 設定檔與狀態查詢
SELinux 所有設定都集中於 /etc/selinux/ 目錄下。
查詢 SELinux 狀態與模式
常見模式:
Enforcing:強制模式,完全執行 SELinux 安全策略
Permissive:寬鬆模式,僅記錄違規行為,不會阻止操作
Disabled:關閉模式,不執行 SELinux 機制
暫時切換模式(不重開機)
永久關閉 SELinux(需重開機)
編輯 /etc/selinux/config:
SELinux 布林值設定 setsebool
使用布林參數可微調 SELinux 對特定服務的限制:
基本指令
DHCPD
BIND(DNS)
HTTPD
VSFTPD
SAMBA
NFS
semanage 指令(進階設定)
安裝必要套件
設定 Web 路徑標籤(永久)
手動設定 Web 安全標籤
暫時設定(執行 chcon,重開機後會失效)
永久設定
編輯 /etc/selinux/targeted/contexts/files/file_contexts.local:
接著套用設定:
補充參考資源
Linux SELinux(Security-Enhanced Linux)
權限管理
為了加強系統安全性,SELinux 採用強制存取控制(MAC, Mandatory Access Control),不再讓檔案擁有者擁有完全的授權權力。
在 SELinux 中,每個物件(檔案、程式等)都有一個安全標籤(Security Context),記載該物件能夠被什麼主體(subject)以什麼方式操作。
安全標籤查看
範例輸出:
user_u:SELinux 用戶(user)object_r:角色(role)admin_home_t:類型(type)s0:敏感度(level),主要用於 MLS(多層級安全)策略SELinux 設定檔與狀態查詢
SELinux 所有設定都集中於
/etc/selinux/目錄下。查詢 SELinux 狀態與模式
# 查看目前狀態(啟用與否) sestatus # 查看當前運行模式 getenforce常見模式:
Enforcing:強制模式,完全執行 SELinux 安全策略Permissive:寬鬆模式,僅記錄違規行為,不會阻止操作Disabled:關閉模式,不執行 SELinux 機制暫時切換模式(不重開機)
# 切換為 Permissive 模式 setenforce 0 # 切換為 Enforcing 模式 setenforce 1永久關閉 SELinux(需重開機)
編輯
/etc/selinux/config:# 將下列行修改 SELINUX=disabled # 完全關閉 # 或 SELINUX=permissive # 僅警告,不阻擋 # 預設是 enforcingSELinux 布林值設定 setsebool
使用布林參數可微調 SELinux 對特定服務的限制:
基本指令
# 查詢布林設定 getsebool -a # 啟用某個布林選項 setsebool <布林名> on # 永久啟用布林選項(加 -P) setsebool -P <布林名> onDHCPD
# 允許 dhcpd 使用 LDAP 後端 setsebool -P dhcpd_use_ldap on # 允許 dhcpc 用戶端執行 iptables setsebool -P dhcpc_exec_iptables onBIND(DNS)
# 允許 named 可寫主區域檔 setsebool -P named_write_master_zones on # 允許 named 綁定 HTTP port(非標準行為) setsebool -P named_tcp_bind_http_port onHTTPD
# 允許 httpd 執行 CGI script setsebool -P httpd_enable_cgi on # 允許 httpd 存取使用者家目錄 setsebool -P httpd_enable_homedirs on # 手動設定標籤(非永久) chcon -R -t httpd_sys_content_t /home/user/public_htmlVSFTPD
# 允許使用者 FTP 家目錄 setsebool -P ftp_home_dir on # 允許匿名用戶寫入 setsebool -P ftpd_anon_write onSAMBA
# 允許 Samba 存取家目錄 setsebool -P samba_enable_home_dirs on # 允許掛接遠端 Samba 家目錄 setsebool -P use_samba_home_dirs onNFS
# 允許 NFS 分享唯讀資料 setsebool -P nfs_export_all_ro on # 允許 NFS 分享可寫資料 setsebool -P nfs_export_all_rw on # 允許 NFS 掛載使用者家目錄 setsebool -P use_nfs_home_dirs onsemanage 指令(進階設定)
安裝必要套件
# 確保 semanage 可用 dnf install -y policycoreutils-python-utils # 查詢套件來源 dnf provides '*/semanage'設定 Web 路徑標籤(永久)
# 將目錄加入 SELinux 的 context 設定中 semanage fcontext -a -t httpd_sys_content_t "/data/wwwroot(/.*)?" # 套用標籤(恢復預設或自訂標籤) restorecon -Rv /data/wwwroot手動設定 Web 安全標籤
暫時設定(執行 chcon,重開機後會失效)
chcon -R -t httpd_sys_content_t /path/to/your/directory永久設定
編輯
/etc/selinux/targeted/contexts/files/file_contexts.local:接著套用設定:
補充參考資源
man semanageman setseboolman chcon