Perché le prime 1024 porte sono riservate solo all'utente root?


53

Questa è più curiosità oziosa di ogni altra cosa. Un mio amico mi ha chiesto "quale intervallo di porte è che solo root può usare sotto Linux?" Gli ho detto che 0-1024 erano limitati. Poi mi ha chiesto perché fosse così e ... Ero in perdita. Nessuna idea.

C'è un motivo per cui queste porte sono limitate e 1025-65535 non lo sono?

La maggior parte dei principali servizi di rete (HTTP, FTP, SSH, Telnet, HTTPS, POP, SMTP, ecc.) Sono in questa gamma, quindi possibili risposte che ho pensato:

  • Un utente non attendibile potrebbe eseguire un programma in ascolto su queste porte per i dettagli di accesso.
  • Un utente non attendibile potrebbe eseguire un'applicazione server non autorizzata.

Qualcuno può far luce qui?

Risposte:


52

Supponiamo di scambiare dati con un computer su una porta <1024 e di sapere che il computer sta eseguendo una variante di unix. Quindi sai che il servizio in esecuzione su quella porta è approvato dall'amministratore di sistema: è in esecuzione come root o almeno doveva essere avviato come root.

Nell'ampio mondo selvaggio di Internet, questo non ha importanza. La maggior parte dei server sono amministrati dalle stesse persone dei servizi in esecuzione su di essi; non ti fideresti delle radici più degli altri utenti.

Con le macchine multiutente, specialmente su una rete locale, questo può importare. Ad esempio, nei giorni prima della crittografia civile, un metodo popolare di esecuzione shell comandi su un'altra macchina era rsh( r emote sh ell); potresti usare l'autenticazione con password o puoi autenticarti semplicemente dimostrando di essere l'utente X sulla macchina A (con la macchina B consapevole che X @ A potrebbe accedere come X @ B senza password). Come dimostrarlo? Il rshclient è setuid root e utilizza un numero di porta <1024, quindi il server sa che il client con cui sta parlando è affidabile e non mentirà su quale utente su A lo sta invocando. Allo stesso modo NFS è stato progettato per essere trasparente rispetto agli utenti e alle autorizzazioni, quindi una configurazione comune era che su una rete locale ogni macchina utilizzava lo stesso database di utenti e l'utente N su A che montava filesystem dal server B avrebbe ottenuto le autorizzazioni dell'utente N su B. Ancora una volta, il fatto che il client NFS provenga da un numero di porta <1024 dimostra che la radice in A ha verificato il client NFS, il che dovrebbe assicurarsi che se trasmette una richiesta che pretende di provenire dall'utente N, quella richiesta è davvero dall'utente N.

Gli utenti non autorizzati che non sono in grado di eseguire server su porte basse sono un altro vantaggio, ma non quello principale. Ai tempi, lo spoofing era piuttosto una novità e gli utenti che eseguivano server spoof sarebbero stati rapidamente eliminati dagli amministratori vigili.


2
Quindi, una sorta di autenticazione di un uomo povero, allora? Questa convenzione ha qualche reale vantaggio nei moderni sistemi operativi simili a * nix?
Andrew Lambert,

2
@Amazed: Il mondo unix è conservativo, quindi la domanda da porsi è "Provoca davvero problemi?" (e si dovrebbe rispondere con la piena consapevolezza che ogni server che vale la pena eseguire ha un argomento da riga di comando per cambiare la porta).
Dmckee,

5
@dmckee si potrebbe anche sostenere che un tale progetto porta a più server in esecuzione come root, anche se hanno la possibilità di funzionare su porte alternative.
Andrew Lambert,

5
@Amazed Può ancora occasionalmente essere utile oggi, sulle reti locali. Non credo che porti a più server in esecuzione come root, i servizi possono associare la porta quindi rilasciare i privilegi o utilizzare le funzionalità se disponibili, o l'amministratore può reindirizzare una porta sulla configurazione del firewall. Non penso che verrebbe inserito se unix fosse stato progettato oggi, ma non fa male.
Gilles 'SO- smetti di essere malvagio' il

1
Questa assurdità dovrebbe essere eliminata a lungo dal kernel. Nessun numero di porta dovrebbe avere un significato speciale. Il "ragionamento" alla base di quel design è da lungo tempo superato (penso che fosse controverso anche in fase di progettazione). Ma ciò che è peggio dell'idea di eventuali intervalli di numeri speciali "affidabili" sono le implicazioni. I server web devono essere eseguiti come root solo per servire pagine web. Un singolo exploit e il server buco non c'è più. E per cosa? Per un design legacy che non ha mai funzionato nemmeno leggermente.
masi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.