温馨提示×

SELinux限制Ubuntu哪些功能

小樊
32
2025-12-28 05:50:51
栏目: 智能运维

SELinux在Ubuntu中的限制范围与原理

Ubuntu上,若启用SELinux,它会以强制访问控制(MAC)为核心,对进程、文件、网络与端口等施加细粒度限制;这与仅基于用户/组的传统DAC(rwx)不同,即使文件权限为777,只要与策略不匹配也会被拒绝。Ubuntu默认使用AppArmor,启用SELinux需额外安装与配置。SELinux通过给主体(进程)与客体(文件/套接字等)打上安全上下文(user:role:type:level),并由策略规则决定是否放行,常见策略类型为targeted(默认,重点约束网络服务)与mls

会被限制的典型功能与场景

  • 文件与目录访问
    进程只能按策略访问与其类型匹配的文件类型(type)。例如:将文件放入**/var/ftp后,若其上下文不是public_content_t**,即使权限正确,vsftpd也可能被拒绝读取;典型现象是“权限够但仍被拒”。这类限制由文件上下文与策略规则共同决定。

  • 进程与系统功能开关
    通过**布尔值(sebool)**控制进程的可选能力,例如:httpd_can_network_connect(允许httpd对外发起连接)、ftpd_anon_write(允许匿名FTP写入)、samba_export_all_rw(Samba共享读写)。未开启相应布尔值时,相关功能会被SELinux阻断,即使服务配置与DAC权限已放行。

  • 网络端口绑定
    服务只能绑定被策略允许的端口类型(如http_port_t)。例如:将SSH改为1111/tcp后,若未使用semanage port把1111加入ssh_port_t,sshd将无法绑定该端口并启动失败。

  • 进程间与脚本执行
    策略会限制进程能否执行特定脚本/程序、能否通过setuid/setgid切换身份、能否访问某些系统对象。例如有案例显示,SELinux会阻止Keepalived执行脚本,需在策略中显式允许相应权限。

  • 用户与角色边界
    MLS等更严格策略下,可对不同用户/角色实施多级安全与更细的访问隔离;在默认的targeted策略下,重点仍是约束服务进程对系统资源的访问。

与Ubuntu防火墙UFW的关系

UFW基于iptables做网络层流量过滤,SELinux做进程/客体层面的强制访问控制,二者可同时启用且职责不同:UFW决定是否放行某个端口/方向的流量,SELinux决定某个进程能否发起/接受连接、能否访问相应套接字或文件。配置时应分别验证:用ufw status检查防火墙规则,用sestatusgetenforce检查SELinux状态与模式,避免误判问题来源。

如何判断与调整这些限制

  • 查看与切换状态
    使用sestatusgetenforce查看状态;在排障阶段可先设为permissive(记录拒绝但不阻断),确认无误后再切回enforcing

  • 定位拒绝原因
    通过ausearch -m avc -ts recent或查看**/var/log/audit/audit.log中的AVC**拒绝记录,分析被拒绝的主体、客体、操作与所需权限,据此决定是调整上下文、布尔值还是编写策略模块。

  • 调整文件与目录上下文
    ls -Z查看上下文;临时用chcon,永久用semanage fcontext配合restorecon确保目录与子项一致,避免因上下文错误导致访问被拒。

  • 调整功能开关与端口绑定
    getsebool -a查看布尔值,必要时用setsebool -P永久开启(如httpd_can_network_connect);用semanage port -l | grep http查看端口类型,必要时用semanage port -a -t http_port_t -p tcp 1111将端口加入允许列表。

0