SELinux系统管理员速查表:42个重要问题的答案

本文的翻译是专门为Linux Administrator课程的学生准备的。




在这里,您将获得有关生命,宇宙以及Linux中具有增强的安全性的所有重要问题的答案。

“重要的事实是,事物并不一定总是众所周知的……”

道格拉斯·亚当斯(Douglas Adams),《 银河系漫游指南》

安全性 提高可靠性。 合规性。 政治。 sysadmin启示录的四个骑士。 除了我们的日常任务-监视,备份,实现,配置,更新等-我们还负责系统的安全性。 即使是第三方提供商建议使用的系统,也要关闭增强的安全性。 这类似于《不可能的任务》中伊桑·亨特的作品。

面对这一难题,一些系统管理员决定服用蓝色药丸,因为他们认为他们永远不会知道生命,宇宙等所有大问题的答案。 而且,众所周知,答案是42。

本着“ Galaxy旅行者指南”的精神,以下是有关在系统上管理和使用SELinux的重要问题的42个答案。

1. SELinux是强制访问控制系统,这意味着每个进程都有一个标签。 每个文件,目录和系统对象还具有标签。 策略规则控制标记的进程和对象之间的访问。 内核执行这些规则。

2.两个最重要的概念是: 标记 -标记(文件,进程,端口等)和类型强制 (根据类型将进程彼此隔离)。

3.正确的标签格式是user:role:type:level (可选)。

4.提供多级安全性(MLS )的目标是根据将使用的数据的安全性级别来管理进程(域)。 例如,机密进程无法读取机密数据。

5.确保多类别安全性(MCS )相互保护相似的进程(例如,虚拟机,OpenShift机制,SELinux沙箱,容器等)。

6.用于在引导时更改SELinux模式的内核参数:

  • autorelabel=1强制系统开始重新标记
  • selinux=0内核未加载SELinux基础结构
  • enforcing=0以允许模式加载

7.如果需要重新标记整个系统:

# touch /.autorelabel
#reboot


如果系统标记包含大量错误,则可能需要以宽松模式引导才能使标记成功。

8.要检查SELinux是否启用: # getenforce

9.临时启用/禁用SELinux: # setenforce [1|0]

10.检查SELinux状态: # sestatus

11.配置文件: /etc/selinux/config

12. SELinux如何工作? 这是Apache Web服务器的示例标签:

  • 二进制表示: /usr/sbin/httpd→httpd_exec_t
  • 配置目录: /etc/httpd→httpd_config_t
  • 日志文件目录: /var/log/httpd → httpd_log_t
  • 内容目录: /var/www/html → httpd_sys_content_t
  • 启动脚本: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • 进程: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • 端口: 80/tcp, 443/tcp → httpd_t, http_port_t

httpd_t上下文中运行的httpd_t可以与标记为httpd_something_t的对象进行httpd_something_t

13.许多命令接受-Z参数来查看,创建和更改上下文:

  • ls -Z
  • id -Z
  • ps -Z
  • netstat -Z
  • cp -Z
  • mkdir -Z

根据文件的父目录的上下文创建文件时会设置上下文(某些情况除外)。 RPM可以在安装过程中设置上下文。

14. SELinux错误有四个主要原因,以下第15-21段对此进行了详细说明:

  • 标签问题
  • 由于SELinux需要了解
  • SELinux策略/应用程序中的错误
  • 您的信息可能被泄露。

15. 标记问题 :如果/srv/myweb标记错误,则可能会拒绝访问。 以下是解决此问题的一些方法:

  • 如果您知道标签:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • 如果您知道带有等效标记的文件:
    # semanage fcontext -a -e /srv/myweb /var/www
  • 恢复上下文(两种情况):
    # restorecon -vR /srv/myweb

16. 标记问题:如果您移动文件而不是复制文件,则文件将保留其原始上下文。 要解决此问题:

  • 更改标记为以下内容的上下文命令:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • 使用链接标签更改上下文命令:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • 还原上下文(两种情况): # restorecon -vR /var/www/html/

17.如果SELinux需要知道 HTTPD正在侦听端口8585,请告诉SELinux:

# semanage port -a -t http_port_t -p tcp 8585

18. SELinux需要知道布尔值, 这些布尔值使您可以在运行时更改SELinux策略的某些部分而无需重写SELinux策略。 例如,如果您希望httpd发送电子邮件,请输入: # setsebool -P httpd_can_sendmail 1

19. SELinux需要知道启用/禁用SELinux设置逻辑值:

  • 要查看所有布尔值: # getsebool -a
  • 查看每个的描述: # semanage boolean -l
  • 设置布尔值: # setsebool [_boolean_] [1|0]
  • 对于永久安装,请添加-P 。 例如: # setsebool httpd_enable_ftp_server 1 -P

20. SELinux策略/应用程序可能包含错误,包括:

  • 花式代码路径
  • 构型
  • 重定向标准输出
  • 文件描述符泄漏
  • 可执行内存
  • 建库不良

公开票证(不要向Bugzilla发送报告; Bugzilla中没有SLA)。

21.如果您的域有限, 您可能会破坏您的信息

  • 下载内核模块
  • 禁用强制的SELinux模式
  • 写在etc_t/shadow_t
  • 更改iptables规则

22.用于开发策略模块的SELinux工具:

# yum -y install setroubleshoot setroubleshoot-server

安装后重新启动或重新启动auditd

23.使用
 journalctl 
列出与setroubleshoot相关的所有日志:

# journalctl -t setroubleshoot --since=14:20

24.使用journalctl列出与特定SELinux标签关联的所有日志。 例如:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25.如果发生SELinux错误,请使用setroubleshoot日志以及一些可能的解决方案。
例如,来自journalctl

 Jun 14 19:41:07 web1 setroubleshoot: SELinux is preventing httpd from getattr access on the file /var/www/html/index.html. For complete message run: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e # sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e SELinux is preventing httpd from getattr access on the file /var/www/html/index.html. ***** Plugin restorecon (99.5 confidence) suggests ************************ If you want to fix the label, /var/www/html/index.html default label should be httpd_syscontent_t. Then you can restorecon. Do # /sbin/restorecon -v /var/www/html/index.html 


26.日志记录:SELinux在许多地方记录信息:

  • / var / log /消息
  • /var/log/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27.日志记录:在审核日志中搜索SELinux错误:

# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today

28.查找特定服务的SELinux访问向量高速缓存(AVC)消息:

# ausearch -m avc -c httpd

29. audit2allow实用程序从禁止的操作日志中收集信息,然后生成SELinux权限策略规则。 例如:

  • 要创建拒绝访问的原因的可读描述: # audit2allow -w -a
  • 要查看允许拒绝访问的类型实施规则: # audit2allow -a
  • 要创建定制模块: # audit2allow -a -M mypolicy
  • -M选项创建具有指定名称的类型强制执行文件(.te),并将规则编译为策略包(.pp): mypolicy.pp mypolicy.te
  • 要安装定制模块: # semodule -i mypolicy.pp

30.配置一个单独的进程(域)以在许可模式下工作: # semanage permissive -a httpd_t

31.如果您不再希望该域是可允许的: # semanage permissive -d httpd_t

32.禁用所有许可域: # semodule -d permissivedomains

33.启用MLS SELinux策略: # yum install selinux-policy-mls
/etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls
# yum install selinux-policy-mls
/etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls


确保SELinux处于宽松模式: # setenforce 0
使用fixfiles脚本来确保在下次重新引导期间重新标记文件:

# fixfiles -F onboot # reboot

34.创建一个具有特定MLS范围的用户: # useradd -Z staff_u john

使用useradd命令,将新用户映射到现有的SELinux用户(在本例中为staff_u )。

35.要查看SELinux和Linux用户之间的对应关系: # semanage login -l

36.为用户定义一个特定范围: # semanage login --modify --range s2:c100 john

37.要更正用户主目录中的标签(如有必要): # chcon -R -l s2:c100 /home/john

38.查看当前类别: # chcat -L

39.要更改类别或开始创建自己的类别,请按如下所示编辑文件:

/etc/selinux/_< selinuxtype > _/setrans.conf

40.要在特定文件,角色和用户上下文中运行命令或脚本,请执行以下操作:

# runcon -t initrc_t -r system_r -u user_u yourcommandhere

  • -t文件上下文
  • -r角色上下文
  • -u用户上下文

41.使用禁用的SELinux的容器:

  • Podman: # podman run --security-opt label=disable …
  • # docker run --security-opt label=disable …# docker run --security-opt label=disable …

42.如果需要授予容器对系统的完全访问权限:

  • Podman: # podman run --privileged …
  • # docker run --privileged …# docker run --privileged …

现在您已经知道答案了。 因此,请:不要惊慌并打开SELinux。

参考文献:


Source: https://habr.com/ru/post/zh-CN484896/


All Articles