Update: Dieses Problem wird nicht abschließend beantwortet. Ich bin in eine andere Distribution umgezogen und habe dieses Problem seitdem nicht mehr beobachtet. Ich konnte es mit den damals verfügbaren aufschlussreichen Antworten nie beheben, aber Ihre Kraftstoffeffizienz kann variieren (YMMV).
crontab -e
und gut crontab -l
funktionieren:
$ crontab -l | grep -v '^#'
* * * * * /usr/bin/env
* * * * * echo 'Hello from crontab'
Ich sehe jedoch jede Minute zwei solcher Nachrichten in /var/log/syslog
:
Mon DD hh:mm:01 username CRON[PID]: Permission denied
Die Crontab wird also gelesen , aber irgendwie kann sie überhaupt nichts ausführen (natürlich habe ich die Befehle überprüft, als ich als derselbe Benutzer angemeldet war). Irgendeine Idee warum?
/etc/cron.allow
und /etc/cron.deny
existieren nicht.
crontab ist set group setuid:
$ stat --format '%A %U %G' /usr/bin/crontab
-rwxr-sr-x root crontab
Das crontabs-Verzeichnis scheint die richtigen Berechtigungen zu haben:
$ stat --format '%A %U %G' /var/spool/cron/crontabs
drwx-wx--T root crontab
Die Crontab selbst gehört mir (nicht überraschend, da ich sie bearbeiten kann):
$ sudo stat --format '%A %U %G' /var/spool/cron/crontabs/$USER
-rw------- username crontab
Ich bin kein Mitglied der crontab
Gruppe.
Diese Zeilen erscheinen in /var/log/auth.log
jeder Minute (danke @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
Vielleicht ist PAM kaputt? pam-auth-update
(danke @coteyr) listet alle diese auf und alle sind aktiviert:
- Unix-Authentifizierung
- GNOME Keyring Daemon - Verwaltung der Anmeldeschlüsselringe
- eCryptfs Key / Mount Management
- ConsoleKit-Sitzungsverwaltung
- Inheritable Capabilities Management
Kann einer von ihnen sicher deaktiviert werden? Ich verwende keine verschlüsselten Dateisysteme.
Aufgrund eines Debian-debconf-show libpam-runtime
Fehlereintrags habe ich versucht, ihn auszuführen , und die folgende Fehlermeldung wurde angezeigt:
debconf: DbDriver "passwords" warning: could not open /var/cache/debconf/passwords.dat: Permission denied
Der Inhalt von /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
Die genannten Dateien ( /etc/environment
, pam_env.so
, /etc/default/locale
, pam_limits.so
, pam_succeed_if.so
) lesbar sind alle von meinem Benutzer.
Auf einem anderen Host mit Ubuntu 13.04, mit demselben Benutzer crontab, nein /etc/cron.{allow,deny}
, denselben Berechtigungen wie oben und ohne Mitglied der crontab
Gruppe, funktioniert es einwandfrei (protokolliert die Befehle, aber nicht die Ausgabe /var/log/syslog
).
Durch Ändern der ersten Crontab-Linie:
* * * * * /usr/bin/env >/tmp/env.log 2>&1
und zu überprüfen, ob / tmp weltweit beschreibbar ist:
$ sudo -u nobody touch /tmp/test
$ ls /tmp/test
/tmp/test
$ ls -ld /tmp
drwxrwxrwt 15 root root 12288 May 27 10:18 /tmp
Ich habe überprüft, dass die crontab-Befehle überhaupt nicht ausgeführt werden : Die Permission denied
Nachrichten werden weiterhin in angezeigt /var/log/syslog
, aber /tmp/env.log
nicht erstellt.
Basierend auf einer zufälligen Liste von /etc/pam.d
Einstellungen habe ich die folgenden Abweichungen festgestellt:
$ 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
PAM-Pakete installiert:
$ 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
Ich habe versucht, diese neu zu installieren - hat nicht geholfen:
$ sudo apt-get install --reinstall $(dpkg --get-selections | grep --invert-match deinstall | cut --fields 1 | grep pam)
Ich kann diese aufgrund nicht erfüllter Abhängigkeiten nicht löschen und dann neu installieren.
/var/spool/cron/crontabs/username
?
/var/log/auth.log
man über CRON?
id cron
->id: cron: No such user