Ubuntu默認安全框架:AppArmor
Ubuntu系統默認采用AppArmor(Application Armor)作為安全模塊,通過為應用程序定義安全配置文件(Profile),限制其可訪問的文件、網絡端口、系統能力等資源,實現進程與資源的隔離。AppArmor的配置基于路徑,策略生效后,違規行為會被記錄到系統日志(/var/log/syslog或/var/log/kern.log)。
使用以下命令確認AppArmor是否啟用及運行狀態:
sudo apparmor_status
輸出示例:
apparmor module is loaded.
12 profiles are loaded.
12 profiles are in enforce mode.
...
AppArmor的配置文件位于/etc/apparmor.d/目錄,文件名通常與應用程序的二進制路徑相關(如/usr/sbin/nginx的配置文件為usr.sbin.nginx)。
#include <tunables/global>
/usr/sbin/nginx {
#include <abstractions/apache2-common> # 包含通用規則
#include <abstractions/base>
capability net_bind_service, # 允許綁定網絡端口
/etc/nginx/** r, # 允許讀取/etc/nginx目錄下的所有文件
/usr/sbin/nginx mr, # 允許讀取和執行nginx二進制文件
/var/log/nginx/** rw, # 允許讀寫/var/log/nginx目錄下的文件
}
關鍵符號說明:r=讀、w=寫、x=執行、m=內存映射。sudo apparmor_parser -r /etc/apparmor.d/<profile_name> # 重新加載(replace)
sudo apparmor_parser -R /etc/apparmor.d/<profile_name> # 卸載(remove)
/etc/apparmor.d/force-complain文件(存在則全局進入complain模式),或使用aa-complain命令針對特定應用程序:sudo aa-complain /usr/sbin/nginx # 將nginx設置為complain模式
sudo aa-enforce /usr/sbin/nginx # 切回enforce模式
apparmor_status命令查看各Profile的模式狀態。當應用程序因AppArmor限制無法正常運行時,需通過日志分析違規原因:
sudo dmesg | grep apparmor # 查看內核日志中的AppArmor拒絕信息
sudo journalctl -f -u apparmor # 實時查看apparmor服務的日志(需systemd)
日志示例:
apparmor="DENIED" operation="open" profile="/usr/sbin/nginx" name="/var/www/html/test.txt" pid=1234 comm="nginx"
根據日志提示,編輯對應Profile添加允許規則(如上述/var/www/html/** r),然后重新加載配置。
若需使用SELinux(Security-Enhanced Linux,基于標簽的安全模塊),需先卸載AppArmor(避免沖突),再安裝SELinux相關組件:
sudo systemctl stop apparmor
sudo apt purge apparmor # 卸載AppArmor
sudo apt install selinux-basics selinux-policy-default auditd # 安裝SELinux
sudo selinux-activate # 添加內核啟動參數并創建自標簽文件
/etc/selinux/config文件,將SELINUX=設置為enforcing(強制模式)、permissive(寬容模式)或disabled(禁用),重啟系統生效。ls -Z # 查看文件/目錄的安全上下文
ps -eZ # 查看進程的安全上下文
chcon臨時修改(重啟或restorecon會還原),restorecon恢復默認上下文:sudo chcon -t httpd_sys_content_t /var/www/html/test.txt # 臨時修改
sudo restorecon -v /var/www/html/test.txt # 恢復默認
注意事項: