RBAC(Role-Based Access Control)是一种通过角色来管理系统权限的访问控制机制。在Linux系统中,可以通过多种方式实现RBAC。
最基本的RBAC实现方式是利用Linux的用户组机制:
# 创建角色组
sudo groupadd developers
sudo groupadd auditors
# 将用户分配到角色组
sudo usermod -aG developers alice
sudo usermod -aG auditors bob
# 设置目录权限
sudo mkdir /var/dev_projects
sudo chown :developers /var/dev_projects
sudo chmod 2770 /var/dev_projects # 设置SGID保持组权限
通过配置sudoers文件可以实现更精细的角色控制:
# 编辑sudoers文件
sudo visudo
# 添加以下内容
# 开发者角色可以运行开发相关命令
%developers ALL=(ALL) /usr/bin/git, /usr/bin/make, /usr/bin/docker
# 审计员角色可以查看日志
%auditors ALL=(ALL) /usr/bin/tail /var/log/*, /usr/bin/cat /var/log/*
对于需要更严格安全控制的系统,可以使用SELinux:
# 检查SELinux状态
sestatus
# 创建新角色
sudo semanage user -a -R "staff_r system_r" -L s0 -r s0-c20.c30 developer_u
# 将用户映射到SELinux用户
sudo semanage login -a -s developer_u alice
# 创建自定义策略模块
sudo audit2allow -M mypolicy < /var/log/audit/audit.log
sudo semodule -i mypolicy.pp
AppArmor是另一种Linux安全模块:
# 检查AppArmor状态
sudo apparmor_status
# 创建新的配置文件
sudo aa-genprof /usr/bin/myapp
# 编辑生成的配置文件
sudo nano /etc/apparmor.d/usr.bin.myapp
# 重新加载配置
sudo apparmor_parser -r /etc/apparmor.d/usr.bin.myapp
通过PAM(Pluggable Authentication Modules)可以实现登录级别的访问控制:
# 编辑PAM配置
sudo nano /etc/pam.d/sshd
# 添加基于组的访问控制
auth required pam_listfile.so item=group sense=allow file=/etc/ssh/access_groups onerr=fail
然后在/etc/ssh/access_groups
中列出允许的组。
# 检查用户组成员
groups username
# 检查有效权限
sudo -l -U username
# SELinux相关故障排除
ausearch -m avc -ts recent
sealert -a /var/log/audit/audit.log
# AppArmor日志
dmesg | grep apparmor
通过以上方法,您可以在Linux系统上建立灵活的基于角色的访问控制系统,根据组织的安全需求进行定制。