本文的翻译是专门为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
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。参考文献: