Por que o crond não consegue executar um crontab não-root no linux alpino?

2

Estou tendo um tempo ruim executando um arquivo crontab não-root no Alpine Linux.

Já passei por duas outras postagens relacionadas ao cron e não tenho uma resposta:

link

link

Aqui está a configuração.

Meu crontab tem esta aparência:

PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/ec2-user/bin
SHELL=/bin/bash

* * * * * /opt/monitor/monitor.sh >> /var/log/monitor.log 2>&1
0 3 * * * /opt/monitor/monitor-log-clean.sh >> /var/log/monitor.log 2>&1

Meu Dockerfile está um pouco confuso agora, mas só porque eu tenho tentado desesperadamente resolver isso. Parece algo como isto. Em suma, eu adiciono o SUID para o crontab -e para funcionar como outros usuários, crio meu usuário, importo meu arquivo crontab e, em seguida, forneço permissões para tudo o que posso imaginar.

FROM alpine:3.5

# DEPENDENCY TO ALLOW USERS TO RUN crontab -e
RUN apk add --update busybox-suid

# I LIKE BASH
RUN apk --no-cache add bash bash-doc
RUN apk --no-cache add util-linux pciutils usbutils coreutils binutils findutils grep

#... lots of custom stuff ...    

# CREATE USER
RUN adduser -S robuser && \
    mkdir -p /home/robuser

# ADD ENTRY POINT
ADD src/entrypoint.sh /home/robuser/entrypoint.sh

# GIVE MY USER ACCESS
RUN mkdir /etc/cron.d
RUN echo "robuser" > /etc/cron.allow
RUN echo "" >> /etc/cron.allow
RUN chmod -R 644 /etc/cron.d

# ADD MY CRONTAB
RUN mkdir -p /var/spool/cron/crontabs
ADD ./src/crontab.conf /tmp/cloudwatch/crontab.conf
RUN crontab -u robuser /tmp/cloudwatch/crontab.conf

# DEBUG... GIVE MY USER ACCESS TO EVERYTHING
RUN chown -R robuser /etc/cron.d
RUN chmod -R 755 /etc/cron.d
RUN chown -R robuser /var/spool/cron
RUN chmod -R 744 /var/spool/cron
RUN chown robuser /var/spool/cron/crontabs
RUN chmod 744 /var/spool/cron/crontabs
RUN chown -R robuser /etc/crontabs
RUN chmod -R 744 /etc/crontabs
RUN chown robuser /etc/crontabs/robuser
RUN chmod -R 744 /etc/crontabs/robuser
RUN chmod 600 /var/spool/cron/crontabs/robuser

# ADD MY MONITORING PROGRAM
RUN mkdir -p /opt/monitor
ADD src/monitor /opt/monitor
RUN mkdir -p /opt/monitor/.tmp && \
    chown -R robuser /opt/monitor && \
    chmod -R 700 /opt/monitor

RUN touch /var/log/entrypoint.log && \
    touch /var/log/monitor.log && \
    touch /var/log/cron.log && \
    touch /var/log/awslogs.log && \
    chown -R robuser /var/log

USER robuser

ENTRYPOINT /home/robuser/entrypoint.sh

enquanto isso, meu entrypoint.sh tem isso em algum lugar. Eu inicio o daemon do cron como um serviço de segundo plano e registro log cron na log verbosely. Eu também tentei especificar -d 0 para obter ainda mais depuração, mas o realmente não adicionou nada à saída.

#!/bin/bash

crond -b -l 0 -L /var/log/cron.log

#... lots of other startup stuff ...

Um ponto importante: se eu não mudar para robuser , tudo funciona bem como root .

Se eu verificar o cron.log , é bem vazio:

crond: crond (busybox 1.25.1) started, log level 0
crond: wakeup dt=45
crond: wakeup dt=60
crond: wakeup dt=60

Enquanto isso, o /var/log/monitor.log está completamente vazio (veja o crontab no começo do post).

Então o crond não está imprimindo nenhum erro.

Eu tentei tudo o que posso pensar para depurar isso. Não há mensagem de erro. Ele simplesmente corre e nunca imprime. Uma boa sugestão foi simplificar meu crontab, mas isso também não funcionou:

PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/ec2-user/bin
SHELL=/bin/bash

* * * * * touch /tmp/test.txt

Eu tentei pesquisar por outros contêineres alpinos que usam o cron não-root, mas a maioria das pessoas não se dá ao trabalho de fazer com que seus contêineres Alpine sejam executados não-raiz.

Alguém tem alguma sugestão adicional para ajudar a depurar isso?

    
por user3460784 05.07.2017 / 23:08

0 respostas