rcmd(3)

NUME
rcmd, rresvport, iruserok, ruserok, rcmd_af, rresvport_af, iruserok_af, ruserok_af - rutine pentru returnarea unui flux către o comandă la distanță

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#include <netdb.h>    /* Sau <unistd.h> pe unele sisteme */

int rcmd(char **restrict ahost, unsigned short inport,
            const char *restrict locuser,
            const char *restrict remuser,
            const char *restrict cmd, int *restrict fd2p);

int rresvport(int *port);

int iruserok(uint32_t raddr, int superuser,
            const char *ruser, const char *luser);
int ruserok(const char *rhost, int superuser,
            const char *ruser, const char *luser);

int rcmd_af(char **restrict ahost, unsigned short inport,
            const char *restrict locuser,
            const char *restrict remuser,
            const char *restrict cmd, int *restrict fd2p,
            sa_family_t af);

int rresvport_af(int *port, sa_family_t af);

int iruserok_af(const void *restrict raddr, int superuser,
            const char *restrict ruser, const char *restrict luser,
            sa_family_t af);
int ruserok_af(const char *rhost, int superuser,
            const char *ruser, const char *luser,
            sa_family_t af);

    Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

rcmd(), rcmd_af(), rresvport(), rresvport_af(), iruserok(), iruserok_af(), ruserok(), ruserok_af():
    Începând cu glibc 2.19:
        _DEFAULT_SOURCE
    glibc 2.19 și versiunile anterioare:
        _BSD_SOURCE

DESCRIERE
Funcția rcmd() este utilizată de superutilizator pentru a executa o comandă pe o mașină la distanță utilizând o schemă de autentificare bazată pe numere de porturi privilegiate. Funcția rresvport() returnează un descriptor de fișier către un soclu cu o adresă în spațiul porturilor privilegiate. Funcțiile iruserok() și ruserok() sunt utilizate de servere pentru a autentifica clienții care solicită servicii cu rcmd(). Toate cele patru funcții sunt utilizate de serverul rshd(8) (printre altele).

  rcmd()
Funcția rcmd() caută gazda *ahost folosind gethostbyname(3), returnând -1 dacă gazda nu există. În caz contrar, *ahost este definit la numele standard al gazdei și se stabilește o conexiune la un server care se află la portul Internet bine cunoscut inport.

Dacă conexiunea reușește, se returnează apelantului un soclu în domeniul internet de tip SOCK_STREAM, care este transmis comenzii la distanță sub forma stdin și stdout. Dacă fd2p este diferit de zero, se va stabili un canal auxiliar către un proces de control și un descriptor de fișier pentru acesta va fi plasat în *fd2p. Procesul de control va returna ieșirea de diagnosticare de la comandă (unitatea 2) pe acest canal și va accepta, de asemenea, octeți pe acest canal ca fiind numere de semnal UNIX, pentru a fi transmise grupului de procese al comenzii. Dacă fd2p este 0, atunci stderr (unitatea 2 a comenzii de la distanță) va fi la fel ca stdout și nu se prevede trimiterea de semnale arbitrare către procesul de la distanță, deși este posibil să îi atrageți atenția folosind date în afara benzii.

Protocolul este descris în detaliu în rshd(8).

  rresvport()
Funcția rresvport() este utilizată pentru a obține un soclu cu un port privilegiat asociat acestuia. Acest soclu este potrivit pentru a fi utilizat de rcmd() și de alte câteva funcții. Porturile privilegiate sunt cele din intervalul 0-1023. Numai un proces privilegiat (pe Linux, un proces care are capacitatea CAP_NET_BIND_SERVICE în spațiul de nume al utilizatorului care guvernează spațiul de nume al rețelei sale) este autorizat să se conecteze la un port privilegiat. În implementarea glibc, această funcție își limitează căutarea la porturile de la 512 la 1023. Argumentul port este valoare-rezultat: valoarea pe care o furnizează apelului este utilizată ca punct de plecare pentru o căutare circulară a intervalului de porturi; la returnarea (cu succes), acesta conține numărul portului la care a fost asociat.

  iruserok() și ruserok()
Funcțiile iruserok() și ruserok() iau adresa IP sau numele unei gazde la distanță, respectiv două nume de utilizator și un indicator care arată dacă numele utilizatorului local este cel al superutilizatorului. Apoi, dacă utilizatorul nu este superutilizatorul, se verifică fișierul /etc/hosts.equiv. Dacă această căutare nu este efectuată sau nu are succes, se verifică .rhosts din directorul local al utilizatorului pentru a vedea dacă cererea de serviciu este permisă.

Dacă acest fișier nu există, nu este un fișier obișnuit, este deținut de oricine altcineva decât utilizatorul sau superutilizatorul, poate fi scris de oricine altcineva decât proprietarul sau este legat printr-o legătură dură oriunde, verificarea eșuează automat. Se returnează zero dacă numele mașinii este listat în fișierul hosts.equiv sau dacă gazda și numele de utilizator la distanță sunt găsite în fișierul .rhosts; în caz contrar, iruserok() și ruserok() returnează -1. În cazul în care domeniul local (obținut de la gethostname(2)) este același cu domeniul la distanță, trebuie specificat doar numele mașinii.

În cazul în care adresa IP a gazdei la distanță este cunoscută, iruserok() ar trebui să fie utilizat de preferință față de ruserok(), deoarece nu necesită încredere în serverul DNS pentru domeniul gazdei la distanță.

  *_af() variante
Toate funcțiile descrise mai sus funcționează cu socluri IPv4 (AF_INET). Variantele „_af” iau un argument suplimentar care permite specificarea familiei de adrese a soclului. Pentru aceste funcții, argumentul af poate fi specificat ca AF_INET sau AF_INET6. În plus, rcmd_af() acceptă utilizarea AF_UNSPEC.

VALOAREA RETURNATĂ
Funcția rcmd() returnează un descriptor de soclu valid în caz de succes. Returnează -1 în caz de eroare și imprimă un mesaj de diagnostic la ieșirea de eroare standard.

Funcția rresvport() returnează un descriptor de soclu valid și legat în caz de succes. În caz de eșec, aceasta returnează -1 și configurează errno pentru a indica eroarea. Codul de eroare EAGAIN este supraîncărcat pentru a semnifica: „Toate porturile de rețea sunt utilizate”.

Pentru informații privind returnarea de la ruserok() și iruserok(), a se vedea mai sus.

ATRIBUTE
Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
Interfață | Atribut | Valoare
rcmd(), rcmd_af() | Siguranța firelor | MT-Unsafe
rresvport(), rresvport_af() | Siguranța firelor | MT-Safe
iruserok(), ruserok(), iruserok_af(), ruserok_af() | Siguranța firelor | MT-Safe locale

STANDARDE
BSD.

ISTORIC

iruserok_af()
rcmd_af()
rresvport_af()
ruserok_af()
    glibc 2.2.

Solaris, 4.2BSD. Variantele „_af” sunt adăugate mai recent și nu sunt prezente pe o gamă atât de largă de sisteme.

ERORI
iruserok() și iruserok_af() sunt declarate în antetele glibc doar de la glibc 2.12.

CONSULTAȚI ȘI
rlogin(1), rsh(1), rexec(3), rexecd(8), rlogind(8), rshd(8)

TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.