Como executar uma tarefa cron usando o comando sudo

118

É possível executar um trabalho cron que precise do comando sudo ?

Gostar:

 sudo rm somefile
sayem siam
fonte
Bem-vindo Sayem Siam, dê uma olhada nas respostas para esta pergunta askubuntu.com/questions/2368/how-do-i-setup-cron-job . como eu acho que sua pergunta foi feita antes aqui na AU
stephenmyall
1
Eu estou tentando executar sudo que precisa de senha, mas como eu posso GIV senha do arquivo cron
Sayem sião
3
@sayemsiam você não precisa colocar o sudo, basta editar a raiz crontab.
Braiam
Veja esta resposta .
precisa saber é o seguinte

Respostas:

240

Não vou entender o quanto isso é uma má idéia; Simplificando, a execução sudono crontab requer que sua senha seja armazenada em algum lugar em texto sem formatação.

É uma má idéia.


A seguir, é o método preferido para executar tarefas administrativas por meio do cron. Como você realmente não precisa escrever sudono crontab, se estiver modificando o crontab do root.

Use o crontab do root

Execute o seguinte comando:

sudo crontab -e

Isso abre o rootcrontab. sudonão é necessário executar seu comando nesse contexto, pois ele será invocado da mesma rootforma.

Portanto, você simplesmente anexaria o seguinte ao crontab do root.

@hourly rm somefile

Agora, se você absolutamente deseja ser inseguro e correr riscos com sua senha, o seguinte executará seu comando a partir do seu próprio crontab e inserirá sua senha automaticamente quando solicitado sudo.

Novamente, isso não é recomendado .


No seu próprio crontab, escreva seu comando da seguinte maneira:

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

A desvantagem óbvia aqui é que, se alguém acessar seu crontab, sua senha será legível em texto sem formatação.

Você não deveria fazer isso.

SirCharlo
fonte
1
Que bom que funciona! Apenas tenha cuidado com quaisquer falhas de segurança que você deixar para trás. Elas podem voltar mais tarde para assombrá-lo.
SirCharlo
1
@SirCharlo Por que usar rooto crontab do usuário em vez do crontab em todo o sistema /etc/crontab?
Eliah Kagan
1
@Elijah, por que não?
SirCharlo
2
Esta resposta perde a marca porque encobre as sutilezas disponíveis no seu sudoersarquivo, como grupos sudo sem necessidade de senha.
brent
ponto muito, muito útil, obrigado por grande ajuda.
Nasser Mansouri
33

Se você estiver colocando o script em um dos diretórios cron ( /etc/cron.*), não precisará usar o sudo, pois ele está sendo executado como root.

Se você estiver usando o crontab, precisará usar o crontab do root. Isso o executará como root e também não precisará do sudo.

sudo crontab -e
tgm4883
fonte
1
Eu também colocaria o comando em /etc/cron.hourly/something. É para isso que servem esses diretórios.
John S Gruber
3
Não. Você pode colocá-lo em /etc/cron.SOMETHING/SCRIPT, mas eu não faria os dois. Ambos dariam aproximadamente a mesma função, embora, usando o crontab, você tenha um pouco mais de poder com que frequência / quando as coisas acontecem.
precisa saber é o seguinte
1
Eu deveria ter deixado claro que eu quis dizer isso como uma alternativa. Obrigado.
John S Gruber
3

Execute o seguinte comando no terminal

sudo visudo

Adicionada a seguinte linha ao final do arquivo:

vidyadhar  ALL= NOPASSWD: /bin/rm

No exemplo acima, vidyadhar é o nome de usuário e não solicitará a senha se você estiver executando o comando rm através do vidyadhar.

Vidyadhar
fonte
17
Hmm .. Então, qualquer comando malicioso, como sudo rm -rf 'slash'( não execute esse comando ), executado a partir desse usuário, não exigiria senha. Não sei, parece inseguro, não?
SirCharlo
Ya eu sei disso. Sua abordagem é boa. Mas estou usando a abordagem acima para conceder direitos a outros usuários para interromper / iniciar determinados serviços.
Vidyadhar
24
Essa é uma ideia extremamente ruim. Por favor, não faça isso.
bkanuka
2
Talvez vidyadhar ALL= NOPASSWD: /bin/rm somefilefosse mais seguro.
Wernfried Domscheit
Esta é uma péssima ideia. Você deu permissões sudo gerais para a rm. Em vez disso, dê permissões sudo a um script que seu comando, incluindo rm ou outros nesse script, torne-o executável e, em seguida, dê permissões sudo para esse script. <username> ALL=(ALL) NOPASSWD: /home/<username>/bin/<script>, o que seria muito mais seguro.
RJ