Como usar o crontab para executar um script como ninguém

3

Isso está em uma máquina do CentOS. Eu estou tentando executar um script como usuário ninguém (ou como um usuário com permissões mínimas) em um determinado horário todos os dias. Aqui não tem ninguém:

[root@CentOS % ~] grep "^nobody" /etc/passwd  
nobody:x:99:99:Nobody:/:/sbin/nologin  

aqui está o que eu tentei no crontab do root:

definindo a variável de ambiente SUDO_USER = nobody
    15 17 * * * sudo -u nobody / bin / bash /usr/local/bin/bashscript.sh
    15 17 * * * su -c /usr/local/bin/bashscript.sh nobody

Eu gostaria de manter a entrada do crontab no crontab do root, se possível. Eu também prefiro não brincar com a conta de ninguém do usuário, já que não quero quebrar mais nada que possa depender dessas configurações. Eu não sou adverso para criar outra conta não privilegiada e dar-lhes uma concha real, se esse é o ponto de discórdia.

Eu também admito estar um pouco perplexo. Eu diria que isso seria uma questão cotidiana, exceto que minha faixa marrom no google-fu não está ajudando muito.

    
por fixer1234 21.01.2010 / 23:58

5 respostas

6

Suponho que você esteja postando o conteúdo de crontab -e ou crontab -l ?

Este é o arquivo crontab que pertence ao usuário "root", e esse arquivo não suporta a especificação de um usuário para executar o comando como (como geralmente é um arquivo usado para agendar tarefas pessoais ). br> Veja /etc/crontab , que é o crontab de todo o sistema e tem um campo adicional: o campo usuário . Tente adicionar uma linha como esta ao /etc/crontab :

15 17 * * * nobody /usr/local/bin/bashscript.sh
    
por 22.01.2010 / 01:02
2

su -shell = / bin / bash --session-command="/ caminho / para / comando -argument = algo" nome de usuário &

Funciona para mim e não exibe "Essa conta não está disponível no momento". erro mesmo quando o usuário não tem um shell de login válido

    
por 18.02.2011 / 04:46
1

Na verdade, clawspoon me leva à resposta, mas deixe-me criar minha própria resposta mais completa para que ela possa flutuar até o topo.

Eu não sei quão comum é, mas algumas documentações on-line do Ubuntu dizem que o / etc / crontab pode ser sobrescrito na atualização, e a solução preferida é criar um arquivo chamado /etc/cron.d/anything (onde qualquer coisa pode ser, bem, qualquer coisa. Qualquer nome de arquivo)

Eu criei um arquivo chamado /etc/cron.d/nobody e estou colocando os scripts para serem executados como um usuário não privilegiado. linhas de exemplo:

# run the following every day at 01:02 AM
02 01 *  *  *  nobody /usr/local/bin/script-to-run-as-nobody.sh

Eu coloquei um comentário no crontab do root para os outros seguirem, já que todos os trabalhos crontab do dia a dia estão atualmente sendo executados a partir daí. Não é exatamente a melhor prática.

Além disso, para fins de teste, preciso primeiro executar o trabalho por meio da linha de comando. desde que eu tenha sudo privlages, eu uso:

$ sudo -u root sudo -u nobody /usr/local/bin/script-to-run-as-nobody.sh

Se esse script precisar ser enviado para / dev / stderr ou / dev / stdout , faça o seguinte:

$ chmod o+w /dev/ttyp1

e faça um:

$ chmod o-w /dev/ttyp1 

quando terminar de testar para impedir que qualquer pessoa envie lixo para a tela do terminal. (o terminal que você está usando pode ser diferente de / dev / tty1 , então faça um $ ls -ltr / dev / tty * | grep nome de usuário para descobrir qual deles é Sua).

    
por 27.01.2010 / 17:40
0

Solução alternativa em vez de uma resposta real:

Você pode adicionar um comentário ao seu crontab

**#see crontab -u nobody -l for something that runs everyday at 1:15 AM**

e, em seguida, basta adicionar uma entrada para o usuário "nobody" crontab. Eu usei:

**15 1 *  *  *   /usr/local/bin/script.sh #comment**
    
por 22.01.2010 / 01:38
0

solução alternativa 2

você pode criar um usuário sem privilégios que tenha um shell de login em / etc / passwd

digamos, crie um usuário chamado "alguém", negue-o ao sudo, mas dê a ele um shell

Então, o seguinte deve funcionar no crontab do root:

15 1  *  *  *  su -c /usr/local/bin/bashscript.sh somebody

Eu gosto mais da resposta do / etc / crontab by clawspoon.

    
por 22.01.2010 / 01:57