GNU/Linux >> Linux Esercitazione >  >> Linux

C'è un modo per i processi non root di collegarsi alle porte privilegiate su Linux?

Ok, grazie alle persone che hanno sottolineato il sistema delle capacità e CAP_NET_BIND_SERVICE capacità. Se si dispone di un kernel recente, è effettivamente possibile utilizzarlo per avviare un servizio come non root ma associare porte basse. La risposta breve è che lo fai:

setcap 'cap_net_bind_service=+ep' /path/to/program

E poi in qualsiasi momento program viene eseguito successivamente avrà il CAP_NET_BIND_SERVICE capacità. setcap è nel pacchetto debian libcap2-bin .

Ora per gli avvertimenti:

  1. Sarà necessario almeno un kernel 2.6.24
  2. Questo non funzionerà se il tuo file è uno script. (vale a dire, usa una riga #! per lanciare un interprete). In questo caso, per quanto ho capito, dovresti applicare la capacità all'eseguibile dell'interprete stesso, il che ovviamente è un incubo per la sicurezza, poiché qualsiasi programma che utilizza quell'interprete avrà la capacità. Non sono riuscito a trovare un modo pulito e semplice per aggirare questo problema.
  3. Linux disabiliterà LD_LIBRARY_PATH su qualsiasi program che ha privilegi elevati come setcap o suid . Quindi se il tuo program utilizza il proprio .../lib/ , potresti dover considerare un'altra opzione come il port forwarding.

Risorse:

    pagina man
  • capabilities(7). Leggilo a lungo se hai intenzione di utilizzare le funzionalità in un ambiente di produzione. Ci sono alcuni dettagli davvero complicati su come le capacità vengono ereditate attraverso le chiamate exec() che sono dettagliate qui.
  • pagina man di setcap
  • "Bind ports below 1024 without root on GNU/Linux":il documento che per primo mi ha indirizzato verso setcap .

Nota:RHEL lo ha aggiunto per la prima volta nella v6.


Puoi eseguire un reindirizzamento della porta. Questo è ciò che faccio per un server dei criteri Silverlight in esecuzione su una macchina Linux

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 943 -j REDIRECT --to-port 1300

Il modo standard è renderli "setuid" in modo che si avviino come root, e poi buttino via quel privilegio di root non appena si sono collegati alla porta ma prima che inizino ad accettare connessioni ad essa. Puoi vedere buoni esempi di ciò nel codice sorgente per Apache e INN. Mi è stato detto che Lighttpd è un altro buon esempio.

Un altro esempio è Postfix, che utilizza più demoni che comunicano tramite pipe, e solo uno o due di essi (che fanno ben poco se non accettare o emettere byte) vengono eseguiti come root e gli altri vengono eseguiti con privilegi inferiori.


Linux
  1. Perché non esiste un'API DirectX per Linux?

  2. C'è un modo per migliorare le prestazioni delle pipe Linux?

  3. Esiste un Flash Player autonomo per Linux?

  4. Servizi Linux:esiste una GUI per i servizi?

  5. C'è un modo per fare in modo che i filesystem ext utilizzino meno spazio per se stessi in Linux?

Come controllare le porte di ascolto in Linux (porte in uso)

Come prepararsi al maltempo su Linux

Esiste un client OneDrive per Linux?

40 esempi utili di comando PS Linux per aspiranti amministratori di sistema

Comandi per la gestione dei processi in Linux

Esiste un equivalente WinSCP per Linux?