Mise à jour: ce problème ne trouvera pas de réponse définitive; J'ai déménagé dans une autre distribution et n'ai pas observé ce problème depuis. Je n'ai jamais pu y remédier avec les réponses perspicaces disponibles à l'époque, mais votre consommation de carburant peut varier (YMMV).
crontab -e
et crontab -l
fonctionne très bien:
$ crontab -l | grep -v '^#'
* * * * * /usr/bin/env
* * * * * echo 'Hello from crontab'
Cependant, je vois deux messages comme celui-ci chaque minute dans /var/log/syslog
:
Mon DD hh:mm:01 username CRON[PID]: Permission denied
Donc, 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 étant connecté en tant que même utilisateur). Une idée pourquoi?
/etc/cron.allow
et /etc/cron.deny
n'existent pas.
crontab est un groupe set setuid:
$ stat --format '%A %U %G' /usr/bin/crontab
-rwxr-sr-x root crontab
Le répertoire crontabs semble avoir les bonnes autorisations:
$ stat --format '%A %U %G' /var/spool/cron/crontabs
drwx-wx--T root crontab
Le crontab lui-même appartient à moi (sans surprise, puisque je suis capable de le modifier):
$ sudo stat --format '%A %U %G' /var/spool/cron/crontabs/$USER
-rw------- username crontab
Je ne suis pas membre du crontab
groupe.
Ces lignes apparaissent à /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) répertorie tous ces éléments et tous sont activés:
- Authentification Unix
- Démon de porte-clés GNOME - Gestion des trousseaux de connexion
- Gestion des clés / montages eCryptfs
- Gestion de session ConsoleKit
- Gestion des capacités héritables
L'un d'eux peut-il être désactivé en toute sécurité? Je n'utilise aucun système de fichiers crypté.
Sur la base d'une entrée de bogue Debian, j'ai essayé de l'exécuter debconf-show libpam-runtime
et j'ai reçu 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 lisibles par mon utilisateur.
Sur un autre hôte avec Ubuntu 13.04, avec le même utilisateur crontab, non /etc/cron.{allow,deny}
, les mêmes autorisations que ci-dessus, et n'étant pas membre du crontab
groupe, cela fonctionne très bien (enregistre les commandes mais pas la sortie /var/log/syslog
).
En modifiant la première ligne 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 crontab ne sont pas exécutées du tout : les Permission denied
messages apparaissent toujours dans /var/log/syslog
, mais /tmp/env.log
ne sont pas créés.
Sur la base d'une liste aléatoire de /etc/pam.d
paramètres, j'ai trouvé les écarts suivants:
$ 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
Packages 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 - n'a pas aidé:
$ sudo apt-get install --reinstall $(dpkg --get-selections | grep --invert-match deinstall | cut --fields 1 | grep pam)
Je ne peux pas purger puis réinstaller ces derniers en raison de dépendances non satisfaites.
/var/spool/cron/crontabs/username
-à- dire ?
/var/log/auth.log
dit CRON?
id cron
->id: cron: No such user