当我检查 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 包,然后重新配置它,它应该可以工作