我正在运行 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