Mise à jour : Cette question ne sera pas résolue de manière concluante ; j'ai changé de distro et je n'ai pas observé ce problème depuis. Je n'ai jamais été capable de le résoudre avec les réponses perspicaces disponibles à l'époque, mais votre rendement énergétique peut varier (YMMV).
crontab -e
y crontab -l
fonctionnent très bien :
$ crontab -l | grep -v '^#'
* * * * * /usr/bin/env
* * * * * echo 'Hello from crontab'
Cependant, je vois deux messages comme celui-ci toutes les minutes en /var/log/syslog
:
Mon DD hh:mm:01 username CRON[PID]: Permission denied
Ainsi, le crontab est en cours de lecture mais d'une manière ou d'une autre, il ne peut rien exécuter du tout (bien sûr, j'ai vérifié les commandes en me connectant avec le même utilisateur). Une idée de la raison ?
/etc/cron.allow
y /etc/cron.deny
n'existent pas.
crontab est défini groupe setuid :
$ stat --format '%A %U %G' /usr/bin/crontab
-rwxr-sr-x root crontab
Le répertoire crontabs semble avoir les bonnes permissions :
$ stat --format '%A %U %G' /var/spool/cron/crontabs
drwx-wx--T root crontab
La crontab elle-même m'appartient (ce qui n'est pas surprenant, puisque je suis capable de la modifier) :
$ sudo stat --format '%A %U %G' /var/spool/cron/crontabs/$USER
-rw------- username crontab
Je suis no un membre de la crontab
groupe.
Ces lignes apparaissent dans /var/log/auth.log
chaque minute (merci @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
Peut-être que PAM est cassé ? pam-auth-update
(merci @coteyr) liste tous ces éléments, et tous sont activés :
- Authentification Unix
- GNOME Keyring Daemon - Gestion du trousseau de clés de connexion
- Gestion des clés/montages eCryptfs
- Gestion des sessions ConsoleKit
- Gestion des capacités héréditaires
L'un d'entre eux peut-il être désactivé en toute sécurité ? Je n'utilise pas de systèmes de fichiers cryptés.
Sur la base d'un Entrée d'un bogue dans Debian J'ai essayé d'exécuter debconf-show libpam-runtime
et j'ai obtenu le message d'erreur suivant :
debconf: DbDriver "passwords" warning: could not open /var/cache/debconf/passwords.dat: Permission denied
Le contenu 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
Les fichiers mentionnés ( /etc/environment
, pam_env.so
, /etc/default/locale
, pam_limits.so
, pam_succeed_if.so
) sont tous lisibles par mon utilisateur.
Sur un autre hôte avec Ubuntu 13.04, avec le même utilisateur crontab, aucune /etc/cron.{allow,deny}
les mêmes permissions que ci-dessus, et ne pas être membre de la Commission européenne. crontab
il fonctionne très bien (il enregistre les commandes, mais pas la sortie en /var/log/syslog
).
En modifiant la première ligne de crontab :
* * * * * /usr/bin/env >/tmp/env.log 2>&1
et vérifier que /tmp est accessible en écriture dans le monde :
$ sudo -u nobody touch /tmp/test
$ ls /tmp/test
/tmp/test
$ ls -ld /tmp
drwxrwxrwt 15 root root 12288 May 27 10:18 /tmp
J'ai vérifié que les commandes de la crontab ne sont pas exécutées du tout : Le site Permission denied
Les messages apparaissent toujours dans /var/log/syslog
mais /tmp/env.log
n'est pas créé.
Sur la base d'un liste aléatoire de /etc/pam.d
paramètres J'ai trouvé les divergences suivantes :
$ 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
Paquets PAM installés :
$ 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
J'ai essayé de les réinstaller - ça n'a rien donné :
$ sudo apt-get install --reinstall $(dpkg --get-selections | grep --invert-match deinstall | cut --fields 1 | grep pam)
Je ne peux pas les purger puis les réinstaller à cause de dépendances non satisfaites.