Passa al contenuto principale

Sotto STCP quando si hanno più processi in ascolto sullo stesso numero di porta solo il primo processo legato al numero di porta viene notificato quando viene richiesta una connessione. Un modo comune per aggirare questa restrizione è quello di chiudere la presa di ascolto quando una connessione è completata e poi creare una nuova presa e legare e riascoltare. Questo pone la presa di ascolto alla fine della catena di prese di ascolto.

A partire dal punto 17.1 questa procedura non funzionerà più senza modificare i valori dei parametri STCP di default.

Prima del 17.1, STCP ha interpretato erroneamente l'intento dell'opzione socket SO_REUSEADDR. L'intento di questa opzione era quello di permettere ad un processo che ascoltava sulla porta X di riavviarsi immediatamente se era terminato e il sistema aveva ancora i socket legati alla porta X in uno stato TIME_WAIT. Tuttavia, le precedenti release di STCP avrebbero permesso ad un processo in ascolto sulla porta X indipendentemente dallo stato dei socket esistenti vincolati alla porta X, supponendo ovviamente che l'opzione SO_REUSEADDR socket fosse impostata. Questo comportamento permette a due diverse applicazioni di ascoltare lo stesso numero di porta. Se la prima applicazione utilizza la procedura di riciclo della porta di ascolto o se il processo viene terminato e riavviato, la seconda applicazione dirotterà effettivamente la porta.

A partire dalla release 17.1 la funzione di binding restituirà l'errore EADDRINUSE a meno che tutti i socket vincolati sulla porta richiesta non siano in stato TIME_WAIT; oppure il secondo processo abbia lo stesso ID di sessione del primo processo. Tutti i processi avviati dallo stesso processo padre avranno lo stesso ID di sessione, in modo che un processo possa biforcare più processi figli e tutti quei figli possano ascoltare sulla porta X.

Due parametri STCP sono stati aggiunti nella release 17.1 che possono essere usati per cambiare il comportamento dell'STCP al comportamento precedente alla 17.1, questi sono tcp_reuseaddr_action e udp_reuseaddr_action. Ogni parametro ha i valori "safe" (default) e "unsafe". Il termine "non sicuro" è usato perché l'impostazione permetterà il port hijacking descritto sopra.

Si può usare la richiesta analyze_system list_stcp_param per mostrare l'impostazione attuale di questi due parametri (figura 1) e la richiesta set_stcp_param per modificare l'impostazione (figura 2). Come tutti i cambiamenti dei parametri STCP sono efficaci solo fino al riavvio del sistema, quindi per rendere permanente la modifica un comando che imposta il parametro su non sicuro deve essere inserito nel file module_start.cm o nel file start_stcp.cm.

analizza_sistema -linea_richiesta 'lista_stcp_parametri_parametri tcp_reuseaddr_action' -quit
OpenVOS Release 17.1.0ab, analizza_sistema Release 17.1.0ab
Il processo attuale è 481, passo 89B6B740, Noah_Davids.CAC

TCP SO_REUSEADDR azione [safe/unsafe] (tcp_reuseaddr_action) safe

pronto 17:10:29

analizza_sistema -linea_richiesta 'list_stcp_parametri_parametri_di_lista' -quit
OpenVOS Release 17.1.0ab, analizza_sistema Release 17.1.0ab
Il processo attuale è 481, passo 89B6B740, Noah_Davids.CAC

UDP SO_REUSEADDR azione [safe/unsafe] (udp_reuseaddr_action) safe

pronto 17:11:16
Figura 1 - visualizzazione dei due parametri di azione reuseaddr

 

 

analyze_system -request_line 'set_stcp_param tcp_reuseaddr_action unsafe' -quit
OpenVOS Release 17.1.0ab, analizza_sistema Release 17.1.0ab
Il processo attuale è 481, passo 89B6B740, Noah_Davids.CAC

Modifica dell'azione TCP SO_REUSEADDR (tcp_reuseaddr_action)
da sicuro a insicuro
pronto 07:30:38
Figura 2 comando per cambiare tcp_reuseaddr_action in non sicuro

 

© 2024 Stratus Technologies.