SELinux對Ubuntu多用戶的支持機制與配置
SELinux(Security-Enhanced Linux)通過強制訪問控制(MAC)模型,在Ubuntu系統中為多用戶環境提供更細粒度的安全隔離。其核心設計是通過安全上下文(Security Context)和角色-based訪問控制(RBAC),確保不同用戶的進程和資源相互隔離,防止單個用戶的未授權操作影響其他用戶或系統安全。
SELinux中的SELinux用戶(如user_u、staff_u)與Linux系統用戶(如lisa、testuser)是分離的。多個Linux用戶可映射到同一個SELinux用戶,但SELinux用戶決定了用戶能承擔的角色和訪問權限范圍。
semanage login命令將Linux用戶映射到SELinux用戶。例如,將用戶lisa映射到staff_u(允許更多權限),將users組的用戶映射到user_u(限制更多):sudo semanage login -a -s staff_u lisa # 單個用戶映射
sudo semanage login -a -s user_u %users # 組用戶批量映射(%表示組)
pkill -KILL -u lisa)使新映射生效,同時重置用戶主目錄上下文(restorecon -RF /home/lisa)以避免上下文沖突。SELinux通過**角色(Role)**進一步限制SELinux用戶的權限。每個SELinux用戶關聯一個或多個角色(如user_r、staff_r),角色定義了用戶能執行的進程域(Domain)。例如:
user_u用戶通常關聯user_r角色,只能運行普通用戶進程(如bash、firefox);staff_u用戶可關聯staff_r角色,允許運行部分管理任務(如sudo)。semanage login -l查看用戶與SELinux用戶的映射及角色:sudo semanage login -l
# 輸出示例:Login Name SELinux User MLS/MCS Range Service
# __default__ user_u s0 *
# lisa staff_u s0-s0:c0.c4 *
每個文件、目錄和進程都有安全上下文(格式:USER:ROLE:TYPE:LEVEL[:CATEGORY]),其中USER對應SELinux用戶,ROLE對應角色,TYPE定義資源類型(如user_home_t表示用戶家目錄)。SELinux通過比較進程上下文與資源上下文,決定是否允許訪問。
semanage fcontext添加自定義上下文規則,用restorecon恢復默認上下文。例如,限制用戶user1只能訪問/home/user1/documents目錄:sudo semanage fcontext -a -t user_home_t "/home/user1/documents(/.*)?" # 添加規則
sudo restorecon -Rv /home/user1/documents # 恢復上下文
ls -Z查看文件/目錄上下文,ps -eZ查看進程上下文。對于需要更嚴格隔離的多租戶環境(如托管多個客戶的服務器),可通過**敏感性(sensitivity)和類別(category)**實現。例如:
s0、s1),通過MLS(多級安全)策略限制低敏感性進程訪問高敏感性資源(遵循“禁止向上讀取、禁止向下寫入”原則);users組用戶映射到staff_u,并限制敏感性范圍為s0-s0:c0.c4:sudo semanage login -m -s staff_u -r "s0-s0:c0.c4" %users
當用戶因SELinux策略被拒絕訪問時,需通過日志定位問題:
ausearch命令過濾AVC(訪問控制拒絕)消息:sudo ausearch -m avc -ts recent # 查看近期拒絕事件
audit2allow根據日志生成自定義策略(謹慎使用,避免過度放寬權限):sudo ausearch -m avc -ts recent | audit2allow -M mypolicy # 生成策略模塊
sudo semodule -i mypolicy.pp # 安裝模塊
通過以上配置,SELinux在Ubuntu中實現了多用戶的安全隔離:不同用戶通過SELinux用戶映射到不同角色,進程和資源的上下文限制了訪問范圍,多租戶環境可通過敏感度和類別進一步隔離。這種機制既保證了多用戶的正常使用,又提升了系統的整體安全性。