SELinux 不允许我在端口 443 下运行 sshd

SELinux 不允许我在端口 443 下运行 sshd

我正在运行 Redhat 7.7。我试图让 ssh-service 接受端口 22 和端口 443 上的连接。我已经使用以下命令打开了防火墙

sudo firewall-cmd --add-port=443/tcp --permanent
sudo firewall-cmd --reload

并设置

Port 22
Port 443

/etc/ssh/sshd_config并重新加载

sudo systemctl reload sshd

sudo journalctl -u sshd仍然说无法绑定到 443。我现在需要做什么?

答案1

您不需要生成本地策略,您可以使用 semanage(8) 将端口 443 的 SELinux 端口类型修改为合适的类型。

semange port -l | grep ssh
ssh_port_t                     tcp      22

所以我们需要将端口类型改为ssh_port_t

semanage port -m -t ssh_port_t -p tcp 443  

并验证

semange port -l | grep ssh
ssh_port_t                     tcp      443, 22

答案2

我是 selinux 新手。但我还是继续吧。我已经遵循了本指南SELinux - 5.6. 在宽容模式下收集审计日志

切换到 root 权限,因为您需要 root 权限才能执行以下命令

sudo su

首先,您需要找到哪个 semodule 阻止了您的端口:

ausearch -m avc

这将向您显示一些最近的错误。您需要查看错误发生的上下文。对我来说,它是sshd_t

time-> <timestamp>
type=PROCTITLE msg=audit(1567419463.747:16052): proctitle=2F7573722F7362696E2F73736864002D44
type=SYSCALL msg=audit(1567419463.747:16052): arch=c000003e syscall=49 success=no exit=-13 a0=3 a1=55f0f8e1cce0 a2=10 a3=7ffee40f91a8 items=0 ppid=1 pid=1339 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="sshd" exe="/usr/sbin/sshd" subj=system_u:system_r:sshd_t:s0-s0:c0.c1023 key=(null)
type=AVC msg=audit(1567419463.747:16052): avc:  denied  { name_bind } for  pid=1339 comm="sshd" src=443 scontext=system_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:http_port_t:s0 tclass=tcp_socket permissive=0

将在 scontext 中找到的模块暂时设置为允许。重新加载 sshd 服务并查看它现在是否正常工作。

semanage permissive -a sshd_t
systemctl reload sshd
journalctl -u sshd

如果此方法有效,我们现在可以创建自己的本地 semodule。在此示例中,我将其称为sshdlocal

以下命令显示新规则的样子:

grep sshd_t /var/log/audit/audit.log | audit2allow -m sshdlocal

就我而言:

module sshdlocal 1.0;

require {
        type http_port_t;
        type sshd_t;
        class tcp_socket name_bind;
}

#============= sshd_t ==============

#!!!! This avc is allowed in the current policy
allow sshd_t http_port_t:tcp_socket name_bind;

要实际生成并安装 semodule,请执行以下操作:

grep sshd_t /var/log/audit/audit.log | audit2allow -M sshdlocal
semodule -i sshdlocal.pp

您可以像这样列出所有 semodule:

semodule -l

现在删除允许的 sshd_t,重新加载 sshd_config 并使用 journalctl 检查设置是否仍然有效。

semanage permissive -d sshd_t
systemctl reload sshd
journalctl -u sshd

答案3

赶紧跑

semanage port -a -t ssh_port_t -p tcp 443

相关内容