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用户映射到不同角色,进程和资源的上下文限制了访问范围,多租户环境可通过敏感度和类别进一步隔离。这种机制既保证了多用户的正常使用,又提升了系统的整体安全性。