rshd
— server
della shell remota
Il server rshd
è il server per la
routine rcmd(3) e, di conseguenza, per il programma
rsh(1). Il server fornisce servizi di esecuzione remota
con autenticazione basata su numeri di porta privilegiati da host di
fiducia.
Il server rshd
si mette in ascolto delle
richieste di servizio alla porta indicata nella specifica di servizio
``cmd''; vedere services(5). Quando viene ricevuta una
richiesta di servizio viene iniziato il seguente protocollo:
- Il server verifica la porta sorgente del client. Se la porta non è
nel range 512-1023, il server abortisce la connessione.
- Il server legge cartteri dal socket fino a un byte null (`\0'). La stringa
risultante è interpretata come un numero ASCII base 10.
- Se il numero ricevuto nel passo 2 è non-zero, esso è
interpretato come numero di porta di un flusso secondario da usare per
stderr. Una seconda connessione è quindi creata
sulla porta specificata sulla macchina client. Anche la porta sorgente di
questa seconda connessione è nel range 512-1023.
- Il server verifica l'indirizzo sorgente del client e richiede il
corrispondente nome host (vedere gethostbyaddr(3),
hosts(5) e named(8)). Se il nome host
non può essere determinato, è usata la rappresentazione con
notazione a punti dell'indirizzo dell'host. Se il nome dell'host è
nello stesso dominio del server (in accordo con gli ultimi due componenti
del nome di dominio), o se viene data l' opzione
-a
sono richiesti gli indirizzi per quel nome
host, verificando che nome e indirizzo corrispondano. Se la verifica
dell'indirizzo fallisce, la connessione è abortita con il
messaggio, ``Host address mismatch.''
- Un nome di utente che finisce con null di almeno 16 caratteri
è recuperato sul primo socket. Questo nome utente è
interpretato come identità dell'utente sulla macchina del
client.
- Un nome di utente che termina con null di almeno 16 caratteri
è recuperato sul primo socket. Questo nome utente è
interpretato come identità dell'utente da usare sulla macchina del
server.
- Un comando che termina con null da passare a una shell è recuperato
sul primo socket. La lunghezza del comando è limitata dal limite
superiore nella dimensione dell'elenco degli argomenti del sistema.
Rshd
quindi valida l'utente usando
ruserok(3), che usa il file
/etc/hosts.equiv e il file
.rhosts trovato nella home directory dell'utente.
L'opzione -l
impedisce a
ruserok(3) di effettuare validazioni basate sul file
``.rhosts'' dell'utente, a meno che l'utente non sia il superutente.
- Se il file /etc/nologin esiste e l'utente non
è il superutente, la connessione è chiusa.
- Un byte null è restituito sul primo socket e la linea di comando
è passata alla normale shell di login dell'utente. La shell eredita
le connessione di rete stabilite da
rshd
.
I messaggi keepalive a livello trasporto sono abilitato a meno che
non sia presente l'opzione -n
. L'uso di messaggi
keepalive permette alle sessioni di scadere se il client va in crash o
diviene irraggiungibile.
L'opzione -L
causa il log di tutti gli
accessi riusciti in syslogd(8) come messaggi
auth.info
.
Tranne l'ultimo elencato sopra, tutti i messaggi di diagnostica
sono restituiti al primo socket, dopo di che goni connessione di rete viene
chiusa. In errore è indicato da un byte iniziale con un valore di 1
(0 è restituito nel precedente passo 10 quando tutti i passi
precedenti l'esecuzione della shell di login sono completati con
successo).
- Locuser
too long.
- Il nome dell'utente sulla macchina del client è più lungo di
16 caratteri.
- Ruser too
long.
- Il nome dell'utente sulla macchina remota è più lungo di 16
caratteri.
- Command
too long.
- La linea di comando passata supera le dimensioni dell'elenco argomenti
(come configurato nel sistema).
- Login
incorrect.
- Non esiste alcun campo nel file password per il nome utente.
- Remote
directory.
- Il comando chdir nella home directory è
fallito.
- Permission
denied.
- La procedura di autenticazione descritta sopra è fallita.
- Can't make
pipe.
- La pipe necessaria per stderr, non è stata
creata.
- Can't
fork; try again.
- Un fork del server è fallito.
- <shellname>:
...
- La shell di login dell'utente non può essere avviata. Questo
messaggio è restituito alla connessione associata con
stderr, e on è preceduto da un byte flag.
La procedura di autenticazione usata qui presume
l'integrità di ciascuna macchina client e del mezzo di connessione.
Questo non è sicuro, ma è utile in un ambiente ``open''.
Deve essere presente un servizio per permettere la cifratura di
tutti gli scambi di dati.
Può essere usato un protocollo più estensibile (come
Telnet).