文章的翻译是专门为课程的学生准备的 .

在这里,你将找到关于生命、宇宙以及万物的重要问题的答案。 Linux 安全性更高。
“一个重要的事实是,事情并不总是像看上去那样,这是常识……”
-道格拉斯·亚当斯, 银河旅行者指南
安全。 可靠性提高。 一致。 政策。 天启四骑士系统管理员。 除了我们的日常任务 - 监控、备份、实施、配置、更新等 - 我们还负责我们系统的安全。 即使是第三方提供商建议我们禁用增强安全性的系统。 感觉就像工作一样 摘自《碟中谍》。
面对这种困境,一些系统管理员决定采取 ,因为他们认为他们永远不会知道生命、宇宙等大问题的答案。 众所周知,答案是 42。
本着《银河系漫游指南》的精神,这里有 42 个有关控制和使用的重要问题的答案。 在您的系统上。
1. SELinux — 是一个强制访问控制系统,这意味着每个进程都有一个标签。每个文件、目录和系统对象也都有标签。策略规则控制着带标签的进程和对象之间的访问。内核负责强制执行这些规则。
2. 最重要的两个概念是: 贴/换标 — 标记(文件、进程、端口等)和 类型强制执行 (根据类型将进程彼此隔离)。
3. 正确的标签格式 user:role:type:level (选修的)。
4. 提供多级安全的目的(多级安全 - MLS)是根据进程(域)将使用的数据的安全级别来管理进程(域)。 例如,秘密进程无法读取绝密数据。
5. 确保多类别安全(多类别安全 - MCS) 保护类似进程免受相互干扰(例如虚拟机、OpenShift 引擎、SE 沙箱)Linux容器等)。
6. 用于改变SE模式的内核参数Linux 加载时:
autorelabel=1→ 导致系统运行重新标记selinux=0→内核未加载SE基础架构Linuxenforcing=0→ 以宽容模式加载
7. 如果您需要重新标记整个系统:
# touch /.autorelabel
#reboot
如果系统标记包含大量错误,您可能需要以宽容模式启动才能成功重新标记。
8. 检查 SE 是否已启用Linux: # getenforce
9. 临时启用/禁用 SELinux: # setenforce [1|0]
10. 检查 SE 状态Linux: # sestatus
11. 配置文件: /etc/selinux/config
12. 搜索引擎优化是如何运作的Linux以下是 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_something_t.
13. 许多命令接受参数 -Z 查看、创建和更改上下文:
ls -Zid -Zps -Znetstat -Zcp -Zmkdir -Z
当基于其父目录的上下文创建文件时,会建立上下文(有一些例外)。 RPM 可以在安装过程中建立上下文。
14. SE 错误主要有四个原因。Linux以下第 15-21 段将对此进行更详细的描述:
- 标签问题
- 因为SE的一些事情Linux 应该知道
- SE策略/应用程序出错Linux
- 您的信息可能会被泄露
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 需要知道告知 SE HTTPD 正在监听 8585 端口。Linux:
# semanage port -a -t http_port_t -p tcp 8585
18. SELinux 需要知道 允许您更改 SE 策略部分内容的布尔值Linux 在运行时,无需了解 SE 策略重写即可进行重写Linux例如,如果您希望 httpd 发送电子邮件,请输入: # setsebool -P httpd_can_sendmail 1
19. SELinux 需要知道 用于启用/禁用 SE 设置的逻辑值Linux:
- 要查看所有布尔值:
# getsebool -a - 要查看每个的描述:
# semanage boolean -l - 设置布尔值:
# setsebool [_boolean_] [1|0] - 对于永久安装,添加
-P。 例如:# setsebool httpd_enable_ftp_server 1 -P
20. SE政策/应用Linux 可能包含错误,包括:
- 不寻常的代码路径
- 配置
- 重定向标准输出
- 文件描述符泄漏
- 可执行内存
- 图书馆建得不好
开放票证(不要向 Bugzilla 提交报告;Bugzilla 没有 SLA)。
21. 您的信息可能会被泄露如果您有受限域尝试:
- 加载内核模块
- 禁用强制模式 SELinux
- 写给
etc_t/shadow_t - 更改 iptables 规则
22. SE 工具Linux 用于制定政策模块:
# yum -y install setroubleshoot setroubleshoot-server
重新启动或重新启动 auditd 安装后。
23. 使用
journalctl 显示与相关的所有日志的列表 setroubleshoot:
# journalctl -t setroubleshoot --since=14:20
24. 使用 journalctl 列出与特定 SE 标签关联的所有日志Linux。 例如:
# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0
25. 当发生 SE 错误时Linux 使用日志 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.html26. 日志记录:SELinux 多处记录信息:
- / var / log /消息
- /var/log/audit/audit.log
- /var/lib/setroubleshoot/setroubleshoot_database.xml
27. 日志记录:查找 SE 错误Linux 在审计日志中:
# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
28. 查找 SE 消息Linux 特定服务的访问向量缓存 (AVC):
# ausearch -m avc -c httpd
29. 效用 audit2allow 从禁止操作的日志中收集信息,然后生成 SE 权限策略规则Linux。 例如:
- 创建一个人类可读的描述来说明访问被拒绝的原因:
# 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 SE 策略Linux: # yum install selinux-policy-mls
в /etc/selinux/config:
SELINUX=允许
SELINUXTYPE=mls
确保 SELinux 以宽松模式运行: # setenforce 0
使用脚本 fixfiles确保在下次重新启动时重新标记文件:
# fixfiles -F onboot # reboot
34. 创建具有特定 MLS 范围的用户: # useradd -Z staff_u john
使用命令 useradd将新用户映射到现有的 SE 用户Linux (在这种情况下, staff_u).
35. 查看SE用户之间的通信Linux и 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. 容器在禁用 SE 的情况下运行Linux:
- 波德曼:
# podman run --security-opt label=disable … - 泊坞窗:
# docker run --security-opt label=disable …
42. 如果您需要授予容器对系统的完全访问权限:
- 波德曼:
# podman run --privileged … - 泊坞窗:
# docker run --privileged …
现在你已经知道答案了。所以请不要惊慌,打开 SE。Linux.
参考文献:
- by
- 作者:丹·沃尔什
- by
- by
来源: habr.com
