Я использую Redhat 7.7. Я пытаюсь разрешить ssh-service принимать соединения как через порт 22, так и через порт 443. Я уже открыл firewalld с помощью
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. Что мне теперь делать?
Вам не нужно создавать локальную политику, вы можете изменить тип порта SELinux порта 443 на что-то подходящее, используя semanage (8).
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
Я новичок в 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
.
Команда Follwing показывает, как будет выглядеть новое правило:
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 -l
Теперь удалите разрешающий sshd_t, перезагрузите sshd_config и проверьте с помощью journalctl, работает ли установка.
semanage permissive -d sshd_t
systemctl reload sshd
journalctl -u sshd