Come aggiungere programmaticamente secure_path nel file sudoers


11

Sto cercando di creare uno script di dati utente per un'istanza EC2 che crea nodo e npm da github e quindi avvia un servizio. Per ingrassare queste ruote, devo aggiungere:

:/usr/local/bin

alla fine della riga in / etc / sudoers che inizia:

Defaults        secure_path="

/superuser/927512/how-to-set-path-for-sudo-commands parla dell'utilizzo di visudo per raggiungere questo obiettivo, ma voglio farlo programmaticamente all'interno dei dati utente di EC2.

/programming/16282789/adding-sudo-permissions-to-sudoers-for-user-via-shell-script parla della modifica del file sudoers, ma sembra terribilmente sfornato per quello che sto provando realizzare.

Ho pensato che sarebbe stato facile strappare la linea e sostituirla, ma sono sconcertato. Non solo per quella fastidiosa virgola invertita di chiusura!

Risposte:


6

Se riesci a convivere sostituendo il secure_pathvalore invece di aggiungerlo, puoi usare una soluzione molto più semplice. Di solito sudo ha una directory di configurazione come /etc/sudoers.ddove è possibile rilasciare file di configurazione aggiuntivi.

Basta creare un file lì con il tuo secure_pathvalore completo :

Defaults secure_path="<default value>:/usr/local/bin"

Questo sovrascrive il valore dalla configurazione principale. Se il valore del percorso è lo stesso per tutte le macchine, questo può essere facilmente distribuito con script o un pacchetto.

Questo ha l'ulteriore vantaggio di non dover controllare e possibilmente unire i file di configurazione quando il pacchetto sudo verrà aggiornato in futuro.


2

supponendo che tu sappia che esiste la linea con secure_path, un semplice comando sed per farlo

sed -i -e '/secure_path/ s[=.*[&:/usr/local/bin[' /etc/sudoers

o un po 'più sofisticato (più controllo della sintassi sull'input):

sed -i -r -e '/^\s*Defaults\s+secure_path/ s[=(.*)[=\1:/usr/local/bin[' /etc/sudoers
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.