GNU/Linux >> Linux Esercitazione >  >> Linux

Creazione di socket raw in Python senza privilegi di root

Non esiste un modo per un processo senza privilegi (Python o altro) di elevare i propri privilegi. È una specie di pietra angolare per avere tutta questa cosa tra utenti privilegiati e non privilegiati. Per quanto riguarda i raw socket, dalla pagina di manuale raw(7):

Solo i processi con un ID utente effettivo pari a 0 o la funzionalità CAP_NET_RAW possono aprire socket raw.

L'ID utente 0 indica root. Vedi qui per informazioni sui raw socket su Linux.

Come sottolineato nella risposta / nei commenti di Faust, non sarai in grado di impostare direttamente la funzionalità CAP_NET_RAW per il tuo programma Python, poiché si tratta di uno script che viene eseguito dall'interprete Python, ma potrebbero esserci soluzioni sul Web che possono aggirare questa limitazione.


Come hai notato, i raw socket richiedono privilegi più elevati rispetto a quelli di un utente normale. Puoi aggirare questo problema in due modi:

  1. Attivando il bit SUID per il file con un comando come chmod +s file e imposta il suo proprietario su root con chown root.root file . Questo eseguirà il tuo script come root, indipendentemente dall'utente effettivo che lo ha eseguito. Ovviamente questo potrebbe essere pericoloso se il tuo script ha qualche difetto.
  2. Impostazione della funzionalità CAP_NET_RAW sul file specificato con un comando come setcap cap_net_raw+ep file . Questo gli darà solo i privilegi richiesti per aprire un raw socket e nient'altro.

MODIFICA:

Come sottolineato da @Netch, le soluzioni fornite non funzioneranno con nessun linguaggio interpretato (come Python). Avrai bisogno di qualche "hack" per farlo funzionare. Prova a cercare su Google per "Python SUID", dovresti trovare qualcosa.


Linux
  1. Come eliminare i privilegi di root negli script della shell?

  2. Cambia la password di root con Sudo, senza Su?

  3. Come eseguire un comando senza proprietà di root?

  4. come associare il socket raw a un'interfaccia specifica

  5. Installare zsh senza accesso root?

HOWTO:eseguire Linux su Android senza root

Rileva il blocco del socket senza inviare o ricevere?

Debug in pyCharm con privilegi sudo?

python raw socket:protocollo non supportato

Esegui ifconfig senza sudo

Installazione di software su Linux senza privilegi di root