Domanda

Quando provo a collegare la porta 80 a un socket in c, ricevo sempre l'errore, che non ho l'autorizzazione per usare questa porta. c'è un modo semplice per ottenere questa autorizzazione?

È stato utile?

Soluzione

Solitamente solo il superutente (root) può associarsi a porte "privilegiate" (cioè quei numeri di porta inferiori a 1024).

Ciò significa che devi eseguire il tuo programma come root o rendere il tuo 'suid root' eseguibile.

Entrambe hanno conseguenze sulla sicurezza, quindi potresti prendere in considerazione l'uso dell'approccio del suid e la rinuncia ai privilegi di superutente una volta effettuata la chiamata di bind.

Altri suggerimenti

Troverai questo tutorial molto utile sulla programmazione di rete con C / C ++.

E, comunque, ANSI C non ha modo di accedere alla rete. Sono le librerie fornite dal sistema operativo (l'API socket BSD, anche portate su Windows come winsock ) che forniscono questa funzionalità.

Le porte 1024 e precedenti sono chiamate Porte privilegiate , l'associazione a queste porte richiede un'autorizzazione elevata.

Le porte superiori a 1024 sono chiamate Porte temporanee . L'associazione a questi non richiede autorizzazioni speciali.

Il modo più semplice per accedere alle porte privilegiate è essere l'utente root.

Se si utilizza un sistema condiviso (come un computer universitario) e non si esegue il root, non esiste un modo "semplice" per ottenere tale autorizzazione, in base alla progettazione.

È proprio come dice @Charles Bailey ... e vorrei aggiungere che questo è il motivo per cui si vedevano gli indirizzi dei server http su 8080 in base alle specifiche della porta nell'URL come http: //some.url : 8080 /

Tradizionalmente solo il root può associare i socket alle porte inferiori a 1024.

La risposta di S.Lott può aver innescato reazioni molto negative ma la sua idea è tutt'altro che stupida: se la domanda originale è per un programma reale (non un incarico scolastico), svilupparla come un'applicazione dietro un server HTTP è spesso ragionevole scelta. In questo modo, puoi lasciare molti dettagli di basso livello a un programma valido e ben messo a punto, Apache.

L'applicazione non deve essere un CGI, può essere un modulo Apache. Apache, dalla versione 2, non è più solo un server HTTP. Ora è una piattaforma per sviluppare programmi di rete. La scrittura di un modulo Apache può essere la risposta corretta alla domanda originale (vedere Documentazione Apache )

I programmi normali non possono associare " privilegiato " porte - quelle inferiori a 1024. Questa è una caratteristica di sicurezza per lo più obsoleta di sistemi operativi simili a UNIX.

L'esecuzione come superutente, sebbene suggerito da molti altri qui, è una cattiva soluzione a questo problema. Se stai usando un sistema Debian o Ubuntu, ti suggerisco di installare il pacchetto authbind , che consentirti di concedere al tuo programma l'autorizzazione ad aprire porte privilegiate senza effettivamente concedere al tuo programma altre autorizzazioni speciali.

Se stai eseguendo qualsiasi altro sistema, ti suggerisco di installare debian o ubuntu ;-).

Sì, puoi facilmente associare alla porta 80. Usa Apache. Scrivi un'applicazione web. Apache si collega alla porta 80 ed esegue l'applicazione Web.

Stai provando a scrivere il prossimo Apache? In tal caso, dovrai conoscere la setuid nell'API operativa sistema.

Se non stai scrivendo una nuova versione di Apache, molte persone usano una porta senza privilegi. 8000 è popolare, così come 8080.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top