Come eseguire un processo cron usando il comando sudo


118

È possibile eseguire un processo cron che richiede il comando sudo ?

Piace:

 sudo rm somefile

Benvenuto Sayem Siam, dai un'occhiata alle risposte a questa domanda askubuntu.com/questions/2368/how-do-i-setup-cron-job . poiché penso che la tua domanda sia stata posta qui qui in precedenza su AU
Stephen

1
Sto cercando di eseguire sudo che ha bisogno di password ma come posso dare la password dal file cron
sayem siam

3
@sayemsiam non devi mettere sudo, basta modificare il crontab di root.
Braiam,

Risposte:


240

Non capirò quanto questa sia una cattiva idea; in poche parole, l'esecuzione sudoin crontab richiede che la password sia memorizzata da qualche parte in testo normale.

È una cattiva idea.


Di seguito è riportato il metodo preferito per eseguire attività amministrative tramite cron. Dal momento che non hai davvero bisogno di scrivere sudonel crontab, se stai modificando il crontab di root.

Usa il crontab di root

Esegui il seguente comando:

sudo crontab -e

Questo apre il rootcrontab. sudonon è necessario eseguire il comando in questo contesto, poiché verrà invocato come rootcomunque.

Pertanto, dovresti semplicemente aggiungere quanto segue al crontab di root.

@hourly rm somefile

Ora, se vuoi assolutamente essere sicuro e correre rischi con la tua password, quanto segue eseguirà il tuo comando dal tuo crontab e inserirà automaticamente la tua password quando richiesto sudo.

Ancora una volta, questo non è raccomandato .


Nel tuo crontab, scrivi il tuo comando in questo modo:

@hourly echo "password" | sudo -S rm somefile

L'ovvio svantaggio qui è che, se qualcuno dovesse mai accedere al tuo crontab, la tua password sarà leggibile in chiaro.

Non dovresti farlo.


1
Sono contento che funzioni! Fai solo attenzione alle eventuali falle di sicurezza che ti lasci alle spalle. Potrebbero tornare più tardi per perseguitarti.
SirCharlo,

1
@SirCharlo Perché usare rootil crontab dell'utente invece del crontab a livello di sistema /etc/crontab?
Eliah Kagan,

1
@Elia perché no?
SirCharlo,

2
A questa risposta manca il segno perché sovrasta le sottigliezze disponibili nel sudoersfile, come i gruppi sudo senza necessità di password.
brent

punto molto molto utile, grazie per il grande aiuto.
Nasser Mansouri,

33

Se stai inserendo lo script da una delle directory cron ( /etc/cron.*), non è necessario utilizzare sudo poiché è in esecuzione come root.

Se stai usando crontab, allora vorrai usare crontab di root. Questo lo eseguirà come root e non avrà nemmeno bisogno di sudo.

sudo crontab -e

1
Vorrei anche inserire il comando in /etc/cron.hourly/something. Ecco a cosa servono queste directory.
John S Gruber,

3
No. Potresti metterlo in /etc/cron.SOMETHING/SCRIPT, ma non farei entrambi. Entrambi darebbero all'incirca la stessa funzione, sebbene usando crontab avresti un po 'più di potere su quanto spesso / quando le cose funzionano.
tgm4883,

1
Avrei dovuto chiarire che lo intendevo in alternativa. Grazie.
John S Gruber,

3

Eseguire il comando seguente nel terminale

sudo visudo

Aggiunta la seguente riga alla fine del file:

vidyadhar  ALL= NOPASSWD: /bin/rm

Nell'esempio sopra vidyadhar è il nome utente e non chiederà la password se si esegue il comando rm tramite vidyadhar.


17
Hmm .. Quindi qualsiasi comando dannoso, come sudo rm -rf 'slash'( non eseguire quel comando ), eseguito da quell'utente, non richiederebbe alcuna password .. Non lo so, sembra pericoloso, no?
SirCharlo,

Ya lo so. Il tuo approccio è buono. Ma sto usando l'approccio di cui sopra per dare diritti ad altri utenti di interrompere / avviare determinati servizi.
Vidyadhar,

24
Si tratta di una estremamente cattiva idea. Per favore, non farlo.
bkanuka,

2
Forse vidyadhar ALL= NOPASSWD: /bin/rm somefilesarebbe più sicuro.
Wernfried Domscheit,

Questa è un'idea terribile. Hai dato le autorizzazioni sudo coperte a rm. Invece, dai i permessi sudo a uno script del tuo comando, incluso rm o altri in quello script, rendilo eseguibile, quindi dai i permessi sudo a quello script. <username> ALL=(ALL) NOPASSWD: /home/<username>/bin/<script>, che sarebbe molto più sicuro.
RJ
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.