Os links simbólicos podem ser usados ​​em /etc/cron.d/?

25

Eu estou tentando implementar um mecanismo de configuração que permite que um determinado projeto implante através de svn uma configuração cron.

Imediatamente, acho que o que devo fazer é criar links simbólicos de /etc/cron.d/ para o arquivo cron do meu projeto (que por sua vez é controlado por um vcs), mas isso parece não estar funcionando.

Eu encontrei algumas mensagens antigas do fórum referindo que links simbólicos não eram suportados e outros dizendo que eles são. Qual e?

Existe algo mais ou alguma outra maneira boa de conseguir isso?

Luís Faceira
fonte

Respostas:

27

De acordo com man crond

RESSALVAS

Todos os arquivos crontab precisam ser arquivos regulares ou links simbólicos para arquivos regulares; eles não devem ser executáveis ​​ou graváveis ​​para mais ninguém, exceto o proprietário. Esse requisito pode ser substituído usando a opção -p na linha de comando crond. Se o suporte à inovação estiver em uso, as alterações nos crontabs com links simbólicos não serão percebidas automaticamente pelo daemon cron. O daemon cron deve receber um sinal SIGHUP para recarregar os crontabs. Essa é uma limitação da API inotify.

A saída do syslog será usada no lugar do email, quando o sendmail não estiver instalado.

Isso também me incomodou muito. Em suma, sim, você pode usar links simbólicos, no entanto, se não regular files or symlinks to a regular filefor, deve usar um -pswitch.

Quem sou eu
fonte
1
Você também descobrirá que o arquivo deve pertencer ao usuário que o cron está executando; por exemplo, se um link simbólico /etc/cron.d/bobsjobapontar para um arquivo pertencente ao usuário "bob" cron falhará com uma mensagem syslog WRONG FILE OWNER (/etc/cron.d/bobsjob).
Craig Ringer
@CraigRinger Eu tenho um usuário chamado "www-data" que possui o arquivo cron, atualmente estou recebendo o erro WRONG FILE OWNER no syslog. Como posso fazer o Cron executar usando o usuário "www-data". Não quero que o root seja o proprietário do arquivo.
precisa saber é o seguinte
@CMCDragonkai sudo -u www-data crontab -ee adicione-o ao crontab do usuário www-data. Ele será executado como usuário www-data. Lembre-se de remover a coluna explícita do usuário, pois ela não existe nas crontabs do usuário.
Craig Ringer
Isso colocará o arquivo dentro etc/cron.? Eu estava com a impressão de que a ferramenta crontab colocaria a tarefa em outro lugar.
precisa saber é o seguinte
@CMCDragonkai Você está correto, crontab -enão é o que você deseja neste caso. Estou procurando, mas não encontrei uma maneira de executar um crontab de usuário como um usuário não raiz.
ACK_stoverflow
14

Isso tem implicações de segurança. Os scripts em /etc/cron.d/ são executados por root com privilégios de root. É uma má idéia vincular scripts lá que sejam de propriedade e graváveis ​​para usuários não raiz, pois seu sistema pode ser comprometido dessa maneira

Florian Heinle
fonte
4

Eu verificaria a página do cron em sua versão do Ubuntu (suponho que estamos falando do Ubuntu neste fórum!):

Os arquivos neste diretório devem ser de propriedade do root, não precisam ser executáveis ​​(são arquivos de configuração, assim como / etc / crontab) e devem estar em conformidade com a mesma convenção de nomenclatura usada pelas run-parts (8): devem consistem apenas em letras maiúsculas e minúsculas, dígitos, sublinhados e hífens. Isso significa que eles não podem conter pontos.

Como aponta Florian, se esse arquivo for gravável por usuários não raiz, é uma falha de segurança porque os trabalhos serão executados por raiz (para quem for nomeado como proprietário do trabalho no arquivo). Observe também, portanto, que

Esse diretório pode conter qualquer tarefa de definição de arquivo, seguindo o formato usado em / etc / crontab, ou seja, diferentemente do cron do usuário, esses arquivos devem fornecer o nome de usuário para executar a tarefa, como na definição de tarefa.

ou seja, insira o nome de usuário antes do comando ser executado.

espuma
fonte
1
Isso significa que eles não podem conter pontos. preste atenção nisso. Eu tinha um ponto no nome do link. Foi o culpado por meus empregos não executados para mim. Plus: o próprio arquivo deve terminar com um CRLF
Dr. Gianluigi Zane Zanettini