Come posso consentire a un utente di modificare un file di sistema specifico normalmente limitato a root?


8

Sto provando a scrivere /etc/network/interfacescon un utente che non ha i privilegi di root.

Il motivo per voler scrivere a questo sarebbe quello di consentire all'utente di impostare un IP statico poiché sto eseguendo un server solo da riga di comando. Di quale autorizzazione ho bisogno per concedere l'utente etc/sudoers?

Non desidero che l'utente disponga delle autorizzazioni di root complete. Solo la possibilità di modificare questo file.

Risposte:


25

Invece di usare sudo, basta impostare un ACL sul file:

$ ls -l /var/tmp/foo
-rw-rw---- 1 root root 4 Jul 31 15:26 /var/tmp/foo
$ sudo setfacl -m u:white:rw /var/tmp/foo
$ whoami
white
$ cat /var/tmp/foo
bar

Ora il file è di proprietà di 'root' ma l'utente 'white' può leggerlo e scriverlo. L'utente 'bianco' ora può usare il suo editor preferito per modificare il file.


Un po 'confuso. È /var/tmp/foo= /etc/network/interfaces? Non ho mai visto quello che stai cercando di dire lì, sono abbastanza nuovo su Linux.
Keith,

È solo un file. Puoi usare qualunque file tu voglia.
Jeff White,

1
Bello. Pensavo che gli ACL potessero essere usati solo per limitare le autorizzazioni e non per concederle - bello sapere che non è vero!
Rmano,

Non sembra essere supportato da WSL:setfacl: /etc/logrotate.conf: Operation not supported
mpen

8

Preparare uno script che esegua le modifiche desiderate, ad esempio uno script che scriva il file corretto con l'IP statico (cosa inserire in questo script non rientra nell'ambito di queste domande e risposte). Chiamiamo questo script /root/set_static_ip. (1)

Modifica /etc/sudoers(2) (con visudoè meglio, verifica la sanità mentale, è molto difficile ripristinare un sistema con un file sudoers non valido, anche impossibile da remoto (3)) e aggiungere

user_name_to_authorize ALL=NOPASSWD: /root/set_static_ip 

Ora quell'utente è in grado di utilizzare sudo /root/set_static_ip senza che sia richiesta la password e lo script verrà eseguito con tutti i privilegi; nessun altro comando sarà permesso.

Se vuoi che l'utente sostituisca semplicemente un file con quello che vuole, lo script potrebbe semplicemente essere (chiamalo /root/unsafe-overwrite-interface)

#! /bin/bash -e
#
cp /tmp/temp-iface.txt /etc/network/interfaces 
exit 0

... e dici all'utente di modificarlo /tmp/temp-iface.txte quindi eseguirlo sudo /root/unsafe-overwrite-interface--- abilitandolo nei sudoer come specificato sopra. In alternativa, puoi aggiungere l'utente a un elenco ACL e concedere loro l'autorizzazione di scrittura sul file specifico .

Tuttavia, se non si controlla il contenuto del file per sicurezza, si verificherà il caos , intenzionale o non intenzionale.


Note a piè di pagina :

(1) questo script deve essere il più sicuro possibile. Controlla gli input e così via. Sarà eseguito con le autorizzazioni complete.

(2) nella moderna installazione sudo, è possibile aggiungere un file alla /etc/sudoers.d/directory che è meglio --- sopravviverà agli aggiornamenti.

(3) Di solito tengo aperto un terminale con una sessione root ( sudo -i) quando modifico il meccanismo sudoers e un backup a portata di mano.


L'unico problema è che le impostazioni IP statiche devono essere modificate su richiesta. La mia comprensione dello script che raccomandi sostanzialmente riscriverebbe il /etc/network/interfacesfile a qualunque cosa /root/set_static_ipsia. A meno che tu non sia in grado di creare uno script che chieda all'utente di inserire indirizzo IP, gateway, ecc ... Questo non sono abbastanza buono da creare.
Keith,

Puoi scrivere uno script che accetta parametri ... ma sì, questo è il modo più sicuro. Se permetti all'utente di modificare il file alla cieca, cosa succede se commettono un errore? Puoi avere il tuo server fuori dalla portata ... quindi lo script non deve solo chiedere in qualche modo i parametri, ma verificare se sono sicuri.
Rmano,

3
Per quanto riguarda /etc/sudoers, non lo visudoè sudoedit.
saiarcot895,

Se qualcuno sta facendo questo tipo di domanda, è probabilmente al di là delle proprie capacità scrivere una sceneggiatura sicura. C'è un motivo per cui non puoi impostare root su uno script bash.
rox0r
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.