Atualização: Este problema não será respondido conclusivamente; Mudei para outra distribuição e não observei esse problema desde então. Eu nunca fui capaz de corrigi-lo com as respostas perspicazes disponíveis no momento, mas sua eficiência de combustível pode variar (YMMV).
crontab -e
e crontab -l
funciona muito bem:
$ crontab -l | grep -v '^#'
* * * * * /usr/bin/env
* * * * * echo 'Hello from crontab'
No entanto, vejo duas mensagens como essa a cada minuto /var/log/syslog
:
Mon DD hh:mm:01 username CRON[PID]: Permission denied
Portanto, o crontab está sendo lido , mas de alguma forma ele não pode executar nada (é claro que eu verifiquei os comandos quando logado como o mesmo usuário). Alguma idéia do porquê?
/etc/cron.allow
e /etc/cron.deny
não existe.
O crontab está definido como setuid de grupo:
$ stat --format '%A %U %G' /usr/bin/crontab
-rwxr-sr-x root crontab
O diretório crontabs parece ter as permissões corretas:
$ stat --format '%A %U %G' /var/spool/cron/crontabs
drwx-wx--T root crontab
O crontab em si é de minha propriedade (não é de surpreender, pois consigo editá-lo):
$ sudo stat --format '%A %U %G' /var/spool/cron/crontabs/$USER
-rw------- username crontab
Eu não sou um membro do crontab
grupo.
Estas linhas aparecem a /var/log/auth.log
cada minuto (obrigado @Alaa):
Mon DD hh:mm:01 username CRON[1752]: pam_unix(cron:session): session opened for user username by (uid=0)
Mon DD hh:mm:01 username CRON[1752]: PAM bad jump in stack
Talvez o PAM esteja quebrado? pam-auth-update
(thanks @coteyr) lista todos estes e todos estão ativados:
- Autenticação Unix
- Daemon de chave do GNOME - Gerenciamento de chave de login
- Gerenciamento de chaves / montagem eCryptfs
- Gerenciamento de sessão do ConsoleKit
- Gerenciamento de Recursos Herdáveis
Algum deles pode ser desativado com segurança? Não estou usando nenhum sistema de arquivos criptografado.
Com base em uma entrada de bug do Debian, tentei executar debconf-show libpam-runtime
e recebi a seguinte mensagem de erro:
debconf: DbDriver "passwords" warning: could not open /var/cache/debconf/passwords.dat: Permission denied
O conteúdo de /etc/pam.d/cron
:
# The PAM configuration file for the cron daemon
@include common-auth
# Read environment variables from pam_env's default files, /etc/environment
# and /etc/security/pam_env.conf.
session required pam_env.so
# In addition, read system locale information
session required pam_env.so envfile=/etc/default/locale
@include common-account
@include common-session-noninteractive
# Sets up user limits, please define limits for cron tasks
# through /etc/security/limits.conf
session required pam_limits.so
session [success=1 default=ignore] pam_succeed_if.so service in cron quiet use_uid
Os arquivos mencionados ( /etc/environment
, pam_env.so
, /etc/default/locale
, pam_limits.so
, pam_succeed_if.so
) são lidos por meu usuário.
Em outro host com o Ubuntu 13.04, com o mesmo usuário crontab, não /etc/cron.{allow,deny}
, com as mesmas permissões acima e não sendo membro do crontab
grupo, ele funciona muito bem (registra os comandos, mas não a saída /var/log/syslog
).
Alterando a primeira linha do crontab:
* * * * * /usr/bin/env >/tmp/env.log 2>&1
e verificando se / tmp é gravável mundialmente:
$ sudo -u nobody touch /tmp/test
$ ls /tmp/test
/tmp/test
$ ls -ld /tmp
drwxrwxrwt 15 root root 12288 May 27 10:18 /tmp
Eu verifiquei que os comandos crontab não são executados : as Permission denied
mensagens ainda aparecem /var/log/syslog
, mas /tmp/env.log
não são criadas.
Com base em uma lista aleatória de /etc/pam.d
configurações , encontrei as seguintes discrepâncias:
$ grep '^[^#]' /etc/pam.d/sshd
@include common-auth
account required pam_nologin.so
@include common-account
@include common-session
session optional pam_motd.so # [1]
session optional pam_mail.so standard noenv # [1]
session required pam_limits.so
session required pam_env.so # [1]
session required pam_env.so user_readenv=1 envfile=/etc/default/locale
@include common-password
$ grep '^[^#]' /etc/pam.d/common-session
session [default=1] pam_permit.so
session requisite pam_deny.so
session required pam_permit.so
session optional pam_umask.so
session required pam_unix.so
session optional pam_ecryptfs.so unwrap
session optional pam_ck_connector.so nox11
$ grep '^[^#]' /etc/pam.d/common-account
account [success=1 new_authtok_reqd=done default=ignore] pam_unix.so
account requisite pam_deny.so
account required pam_permit.so
$ grep '^[^#]' /etc/pam.d/common-session-noninteractive
session [default=1] pam_permit.so
session requisite pam_deny.so
session required pam_permit.so
session optional pam_umask.so
session required pam_unix.so
session optional pam_ecryptfs.so unwrap
Pacotes PAM instalados:
$ dpkg --get-selections | grep --invert-match deinstall | cut --fields 1 | grep pam
libpam-cap
libpam-ck-connector
libpam-gnome-keyring
libpam-modules
libpam-modules-bin
libpam-runtime
libpam0g
python-pam
Eu tentei reinstalar estes - não ajudou:
$ sudo apt-get install --reinstall $(dpkg --get-selections | grep --invert-match deinstall | cut --fields 1 | grep pam)
Não consigo limpar e reinstalá-los devido a dependências não atendidas.
/var/spool/cron/crontabs/username
?
/var/log/auth.log
diz sobre o CRON?
id cron
->id: cron: No such user