Avanti Indietro Indice

8. Server di rete

La maggior parte dei server di rete non dovrebbe invocare sottoprocessi di alcun tipo. Per motivi di sicurezza il PATH di tali server dovrebbe essere minimale.

Un'eccezione importante riguarda tutti i servizi che permettono di fare il login del sistema dalla rete. Questa sezione descrive la struttura dell'ambiente in questi casi. Se il comando viene eseguito sulla macchina remota, il suo PATH è diverso a seconda che si stia utilizzando rsh o ssh. Allo stesso modo fare il login con rlogin, Telnet o ssh produce diversi risultati.

8.1 inetd

La maggior parte dei server di rete non ha processi propri che attendono le richieste. Questo compito è delegato ad un super server chiamato inetd. Inetd ascolta tutte le porte specificate e fa partire il server appropriato quando riceve una richiesta. Questo comportamento è definito in /etc/inetd.conf.

inetd è avviato dagli script di inizializzazione del sistema. Esso eredita solo il PATH del processo init, non lo modifica e tutti i server fatti partire da inetd hanno l'init path. Un esempio di tale server è imapd, il server del protocollo IMAP.

Altri esempi di processi inetd sono telnetd, rlogind, talkd, ftp, popd, molti server http e così via.

Spesso l'utilizzo di inetd è complicato ulteriormente da un programma tcpd separato che fa partire il server reale. È un programma che esegue ulteriori controlli di sicurezza prima di far partire l'applicazione vera e propria. Non fa modifiche a PATH (non verificato).

8.2 rsh

Il demone rsh imposta PATH da _PATH_DEFPATH (/usr/include/paths.h), che è lo stesso PATH che usa il programma login per gli utenti comuni. Root avrà lo steso PATH di un utente normale.

In realtà, rshd esegue il comando che gli viene fornito da riga di comando:

shell -c command-line

e "shell" qui non è una login shell. È desiderabile che tutte le shell menzionate in /etc/passwd supportino l'opzione -c da riga di comando.

8.3 rlogin

Rlogin invoca login per eseguire la vera procedura di login. Se si esegue il login da rlogin, si ottiene la stessa variabile PATH che con login. La maggior parte degli altri modi per fare il login su una macchina Linux non usa login. Si noti la differenza con rsh.

Per la precisione il comando login usato è

login -p -h host-name user-name

-p preserva l'ambiente, tranne le variabili HOME, PATH, SHELL, TERM, MAIL e LOGNAME. -h indica il nome dell'host remoto su cui fare il login.

8.4 telnet

Telnet è simile a rlogin. Esso usa il programma login e la riga di comando per invocarlo in maniera analoga.

8.5 ssh

ssh ha una configurazione di PATH tutta sua. Ha un PATH precompilato a cui aggiunge la directory in cui si trova ssh. Ciò spesso significa che /usr/bin è presente due volte nel PATH:

/usr/local/bin:/usr/bin:/bin:.:/usr/bin

Il path non contiene /usr/X11/bin e la shell invocata dal comando ssh non è una login shell. Quindi

ssh remotehost xterm

non funziona mai e qualunque cosa sia scritta in /etc/profile e /etc/csh.cshrc non può cambiare questa situazione. Si deve sempre usare il percorso specifico /usr/bin/X11/xterm.

ssh cerca delle variabili d'ambiente nella forma VARIABILE=VALORE nel file /etc/environment. Sfortunatamente ciò causa qualche problema con XFree86.


Avanti Indietro Indice