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

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

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.


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

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.