Nota: questo è un obiettivo d’esame RHCE 7.
Presentazione
A causa della politica SELinux, un servizio è normalmente autorizzato a funzionare su un elenco limitato di porte conosciute. Ad esempio, nel caso del servizio httpd, questo elenco è 80, 443, 488, 8008, 8009, 8443.
Per consentire a un servizio di utilizzare porte non standard, è necessario seguire una procedura specifica per modificare la politica di SELinux.
Prerequisiti
Installare il server setroubleshoot (per ottenere il comando semanage) e, opzionalmente, i pacchetti selinux-policy-devel (per ottenere il comando sepolicy):
# yum install -y setroubleshoot-server selinux-policy-devel
Installa il servizio (qui httpd) che vuoi eseguire (se non è già stato fatto):
# yum install -y httpd
Procedura SELinux
Per ottenere l’elenco di tutte le porte con restrizioni per servizio, digitare:
# semanage port -l SELinux Port Type Proto Port Number afs3_callback_port_t tcp 7001 afs3_callback_port_t udp 7001 afs_bos_port_t udp 7007 afs_fs_port_t tcp 2040 afs_fs_port_t udp 7000, 7005 afs_ka_port_t udp 7004 afs_pt_port_t udp 7002 afs_vl_port_t udp 7003 ... http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000 ... zookeeper_client_port_t tcp 2181 zookeeper_election_port_t tcp 3888 zookeeper_leader_port_t tcp 2888 zope_port_t tcp 8021
Per ottenere l’elenco delle porte conosciute per il servizio httpd, digitare:
# semanage port -l | grep -w http_port_t http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
In alternativa, puoi anche usare il comando sepolicy per ottenere lo stesso risultato:
# sepolicy network -t http_port_t http_port_t: tcp: 80,81,443,488,8008,8009,8443,9000
Per verificare se una porta è già utilizzata (qui 8001), digitare:
# sepolicy network -p 8001 8001: tcp unreserved_port_t 1024-32767 8001: udp unreserved_port_t 1024-32767
Per consentire l’esecuzione del servizio httpd sulla porta tcp 8001 (-a per aggiungere), digitare:
# semanage port -a -t http_port_t -p tcp 8001
Nota 1: utilizzare l’opzione -d anziché l’opzione -a per rimuovere una porta dall’elenco.
Nota 2: Nel caso in cui la porta tcp 8001 sia già assegnata ad un altro servizio, utilizzare l’opzione -m (per ulteriori informazioni consultare le domande frequenti su Sander van Vugt RHCE): una porta può essere utilizzata da un solo servizio alla volta.
Per verificare che l’elenco sia aggiornato, digitare:
# semanage port -l | grep -w http_port_t http_port_t tcp 8001, 80, 81, 443, 488, 8008, 8009, 8443, 9000
In alternativa, puoi controllare il nuovo stato della porta (qui 8001):
# sepolicy network -p 8001 8001: tcp unreserved_port_t 1024-32767 8001: udp unreserved_port_t 1024-32767 8001: tcp http_port_t 8001
Configurazione di servizio specifica aggiuntiva
Oltre alla modifica della politica di SELinux, potrebbe essere necessario modificare la configurazione del servizio.
Ad esempio, con il servizio httpd, è necessario aggiornare la direttiva Listen o, se si tratta di un host virtuale, la direttiva <VirtualHost> nel file /etc/httpd/conf/httpd.conf per tenere conto della nuova porta.
Fonte: Guida per utenti e amministratori SELinux di RHEL 7 e pagina man di sepolicy network.