温馨提示×

Ubuntu SELinux如何限制访问权限

小樊
56
2025-09-21 02:46:56
栏目: 智能运维

1. 前提准备:安装SELinux并启用
Ubuntu默认使用AppArmor而非SELinux,需先安装SELinux相关组件并切换安全模块。安装命令:

sudo apt install selinux-basics selinux-policy-default auditd setools

激活SELinux(添加内核启动参数):

sudo selinux-activate

设置SELinux为permissive模式(记录违规但不阻止,避免启动失败):
编辑/etc/selinux/config文件,修改SELINUX=permissive;或临时设置:

sudo setenforce 0

重启系统使配置生效,通过sestatus命令确认状态(应为SELinux status: enabledCurrent mode: permissive)。

2. 控制文件/目录访问:设置安全上下文
SELinux通过安全上下文user:role:type:level)控制文件/目录访问,核心是type(类型)。

  • 查看文件上下文
    ls -Z /path/to/file
    
  • 永久修改文件上下文
    使用semanage fcontext添加规则,restorecon应用更改(示例:限制/home/user1/data仅能被user_home_t类型访问):
    sudo semanage fcontext -a -t user_home_t "/home/user1/data(/.*)?"
    sudo restorecon -Rv /home/user1/data
    
  • 临时修改文件上下文
    使用chcon(重启后失效,仅用于测试):
    sudo chcon -t user_home_t /home/user1/data
    

    注:目录需递归修改(-R),确保子文件/子目录上下文一致。

3. 调整策略:通过布尔值快速配置
SELinux布尔值是策略中的“开关”,可快速启用/禁用特定权限(如允许Web服务器访问网络、允许Samba写入共享目录)。

  • 查看所有布尔值
    sudo getsebool -a  # 列出所有布尔值及状态
    sudo semanage boolean -l  # 显示当前值与默认值
    
  • 临时设置布尔值
    sudo setsebool httpd_can_network_connect on  # 允许httpd访问网络
    
  • 永久设置布尔值
    -P参数(修改配置文件,重启后生效):
    sudo setsebool -P samba_export_all_rw on  # 允许Samba共享目录可读写
    
    常见场景:Web服务器需访问数据库时,开启httpd_can_network_connect_db;允许用户通过FTP访问家目录时,开启ftp_home_dir

4. 自定义策略:限制应用程序权限
若内置策略无法满足需求(如限制自定义应用myapp的访问范围),需创建自定义策略模块。

  • 创建策略文件(如myapp.te):
    定义类型、权限及转换规则(示例:允许myapp_t类型进程访问自身文件):
    module myapp 1.0;
    require {
        type unconfined_t;
        class file { read write execute };
    }
    type myapp_t;
    allow unconfined_t myapp_t:file { read write execute };
    
  • 编译并加载策略
    使用checkmodule生成模块文件,semodule_package打包,semodule加载:
    checkmodule -M -m -o myapp.mod myapp.te
    semodule_package -o myapp.pp -m myapp.mod
    sudo semodule -i myapp.pp
    
  • 验证策略
    运行应用并检查日志(/var/log/audit/audit.log),若有拒绝记录,用audit2allow生成新规则:
    sudo ausearch -c 'myapp' --raw | audit2allow -M myapp_new
    sudo semodule -i myapp_new.pp
    

    注:自定义策略需谨慎,避免过度放宽权限。

5. 监控与排查:解决访问问题

  • 查看SELinux拒绝日志
    使用ausearchjournalctl过滤AVC(访问控制)拒绝消息:
    sudo ausearch -m avc -ts recent  # 查看近期拒绝记录
    sudo journalctl | grep AVC        # 实时监控拒绝日志
    
  • 分析拒绝原因
    日志中会显示“拒绝的操作”(如readwrite)、“涉及的主体”(进程)、“客体”(文件/目录)及“所需权限”,据此调整策略(如添加布尔值、修改上下文或创建自定义策略)。

0