Comportamento diferente ao executar o certbot do letsencrypt como uma tarefa cron

1

Eu instalei o letsencrypt no Ubuntu 14.03 seguindo este guia:

link

Também criei uma tarefa cron para a renovação do certificado, conforme descrito no guia, mas depois encontrei o seguinte problema:

  • certbot-auto renew (como usuário não raiz) e sudo certbot-auto renew funcionam quando testados a partir da linha de comando (certbot informa que os certificados ainda não devem ser renovados, como esperado)
  • No entanto, quando o mesmo comando é executado pelo cron (como root), o certbot tenta atualizar-se.

Alguma idéia de por que estou tendo esse comportamento diferente? Qual é a diferença entre executar o comando manualmente em um console shell e executá-lo pelo cron?

Atualização: adicionei --no-self-upgrade , mas não fez diferença. Em investigações posteriores, notei o seguinte:

  • sudo certbot-auto renew --dry-run funciona bem
  • sudo su; certbot-auto renew --dry-run tenta atualizar o certbot primeiro

Por alguma razão, o certbot parece achar que não está instalado corretamente quando executado no segundo formulário.

    
por Grodriguez 01.02.2017 / 09:56

2 respostas

3

Esse problema ocorre devido à maneira como certbot foi instalado.

Quando não estiver usando uma instalação de distribuição em pacote de certbot , não será possível garantir que todas as dependências sejam atendidas. Assim, para garantir que ela possa ser executada corretamente, ela criará um ambiente virtual em $HOME . Ao executar com sudo , esse ainda é seu próprio $HOME . No entanto, quando executado como root, isso se transforma em /root , onde o ambiente virtual não está presente e, portanto, certbot não pode ser executado sem criá-lo. Não está se atualizando tanto quanto instalando-se considerando o novo ambiente do qual é executado.

    
por 02.02.2017 / 00:28
0

EDITAR:

O problema aqui foi que o certbot-auto foi executado pela primeira vez (inicializado) usando sudo enquanto o cron o executava como usuário root. Este resultado no certbot-auto tentando instalar o dependenvies quando executado pelo cron / root.

A solução seria executar o certbot-auto como root, não usando o sudo.

Eu ainda quero mencionar --no-self-upgrade, pois isso manterá o certbot-auto de tentar atualizar-se. Útil quando executado por um cronjob como você pode / deve monitorar qualquer atualização executando-a manualmente de tempos em tempos.

Eu não vejo nenhuma diferença ao testar aqui no Debian Jessie usando o mais recente certbot-auto. Você pode adicionar '--no-self-upgrade' ao comando. Dessa forma, o certbot-auto não verifica novas versões.

Eu tenho isso em '/etc/cron.d/letsencrypt'

# Check if we need to renew any certificates

4 4 * * * /opt/letsencrypt/certbot-auto renew --quiet --no-self-upgrade --post-hook "service nginx restart" >/dev/null 2>&1

Isso será executado uma vez por dia e, em seguida, reiniciará o nginx se tiver que renovar os certificados, mas sem tentar atualizar o próprio certbot.

    
por 01.02.2017 / 11:27