如何配置 SELinux 以使其不会阻止 endlessh 的执行

如何配置 SELinux 以使其不会阻止 endlessh 的执行

当我检查 endlessh 状态时,系统提示我执行错误,我认为 SELinux 阻止了该执行,如何让 SELinux 允许该执行?

[root@fedora endlessh]# systemctl status endlessh.service
× endlessh.service - Endlessh SSH Tarpit
     Loaded: loaded (/etc/systemd/system/endlessh.service; enabled; preset: disabled)
     Active: failed (Result: exit-code) since Tue 2023-01-03 19:17:46 +08; 12s ago
   Duration: 110ms
       Docs: man:endlessh(1)
    Process: 4331 ExecStart=/usr/local/bin/endlessh (code=exited, status=203/EXEC)
   Main PID: 4331 (code=exited, status=203/EXEC)
        CPU: 95ms

它在我的配置文件中的样子:

[root@fedora endlessh]# sudo nano /etc/systemd/system/endlessh.service
[Unit]
Description=Endlessh SSH Tarpit
Documentation=man:endlessh(1)
Requires=network-online.target

[Service]
Type=simple
Restart=always
RestartSec=30sec
ExecStart=/usr/local/bin/endlessh      
KillSignal=SIGTERM

# Stop trying to restart the service if it restarts too many times in a row
StartLimitInterval=5min
StartLimitBurst=4

StandardOutput=journal
StandardError=journal
StandardInput=null

PrivateTmp=true
PrivateDevices=true
ProtectSystem=full
ProtectHome=true

#InaccessiblePaths=/run /var

## If you want Endlessh to bind on ports < 1024
## 1) run: 
##     setcap 'cap_net_bind_service=+ep' /usr/local/bin/endlessh
## 2) uncomment following line
AmbientCapabilities=CAP_NET_BIND_SERVICE
## 3) comment following line
#PrivateUsers=true

NoNewPrivileges=true
ConfigurationDirectory=endlessh
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectControlGroups=true
MemoryDenyWriteExecute=true

[Install]
WantedBy=multi-user.target

答案1

首先,你不需要知道如果是 SELinux,你只需要怀疑一些东西。其次,SELinux 并不像“它允许或不允许 x 进程运行”那么简单,它远不止这些。它包括源上下文、目标上下文和操作等。

首先你需要收集被拒绝的操作。开始记录被 SELinux 拒绝的操作:

tail -f /var/log/audit/audit.log | grep denied

然后启动 endlessh 并查看是否有任何内容出现。如果没有,则不是 SELinux。如果是,则将这些拒绝的操作保存到文本文件中,例如endlessh.log

现在告诉 SELinux 允许这些操作:

audit2allow -i endlessh.log -M endlessh
semodule -i endlessh.pp

现在到了棘手的部分:SELinux 将允许日志文件中找到的特定操作,但其他不同的操作可能会随之而来。因为可执行文件可能会执行数千种不同的操作。它可能想执行 A、B 和 C 操作,但如果 SELinux 甚至阻止操作 A,它甚至无法执行 B 和 C,因为它已经失败了。因此,您需要不断迭代并添加这些新的被拒绝的操作,然后重新启动 endlessh,直到它最终成功,并且当您启动 endlessh 时,审计日志中不会出现任何新的“被拒绝”行。


另一个可能更有效的选项是将 SELinux 设置为宽容,在这种情况下,它会记录被拒绝的操作,但实际上并不拒绝它们。在这种情况下,您可以确保只需运行一次,所有需要允许的操作都会出现在日志中。为此,请编辑/etc/selinux/config

SELINUX=permissive

重启,然后按照上面说明进行日志收集和 SELinux 模块安装。完成所有操作后,将 SELinux 重新设置为强制执行:

SELINUX=enforcing

重新启动,一切就绪了。

更多细节:SELinux 速成课程

答案2

如果你从源代码安装了 endlessh,则需要将其删除并将其安装为 rpm 包,然后重新配置它,它应该可以工作

相关内容