Pembaruan: Masalah ini tidak akan dijawab secara meyakinkan; Saya telah pindah ke distro lain dan tidak melihat masalah ini sejak itu. Saya tidak pernah bisa memperbaikinya dengan jawaban mendalam yang tersedia saat itu, tetapi efisiensi bahan bakar Anda mungkin berbeda-beda (YMMV).
crontab -e
dan crontab -l
bekerja dengan baik:
$ crontab -l | grep -v '^#'
* * * * * /usr/bin/env
* * * * * echo 'Hello from crontab'
Namun, saya melihat dua pesan seperti ini setiap menit di /var/log/syslog
:
Mon DD hh:mm:01 username CRON[PID]: Permission denied
Jadi crontab sedang dibaca , tetapi entah bagaimana ia tidak dapat menjalankan apa pun (tentu saja saya memverifikasi perintah ketika login sebagai pengguna yang sama). Ada yang tahu kenapa?
/etc/cron.allow
dan /etc/cron.deny
tidak ada.
crontab disetel kelompok setuid:
$ stat --format '%A %U %G' /usr/bin/crontab
-rwxr-sr-x root crontab
Direktori crontab tampaknya memiliki izin yang tepat:
$ stat --format '%A %U %G' /var/spool/cron/crontabs
drwx-wx--T root crontab
Crontab itu sendiri milik saya (tidak mengherankan, karena saya dapat mengeditnya):
$ sudo stat --format '%A %U %G' /var/spool/cron/crontabs/$USER
-rw------- username crontab
Saya bukan anggota crontab
grup.
Baris-baris ini muncul di /var/log/auth.log
setiap menit (terima kasih @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
Mungkin PAM rusak? pam-auth-update
(terima kasih @coteyr) mencantumkan semua ini, dan semuanya diaktifkan:
- Otentikasi unix
- GNOME Keyring Daemon - Manajemen login keyring
- Manajemen Kunci / Mount eCryptfs
- Manajemen Sesi ConsoleKit
- Manajemen Kemampuan yang Dapat Diwarisi
Bisakah salah satu dari mereka dinonaktifkan dengan aman? Saya tidak menggunakan sistem file terenkripsi.
Berdasarkan entri bug Debian saya mencoba menjalankan debconf-show libpam-runtime
, dan saya mendapat pesan kesalahan berikut:
debconf: DbDriver "passwords" warning: could not open /var/cache/debconf/passwords.dat: Permission denied
Isi dari /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
File-file yang disebutkan ( /etc/environment
, pam_env.so
, /etc/default/locale
, pam_limits.so
, pam_succeed_if.so
) semua dibaca oleh pengguna saya.
Pada host lain dengan Ubuntu 13.04, dengan crontab pengguna yang sama, tidak /etc/cron.{allow,deny}
, izin yang sama seperti di atas, dan tidak menjadi anggota crontab
grup, itu berfungsi dengan baik (mencatat perintah tetapi bukan output masuk /var/log/syslog
).
Dengan mengubah baris crontab pertama:
* * * * * /usr/bin/env >/tmp/env.log 2>&1
dan memeriksa bahwa / tmp dapat ditulis dunia:
$ sudo -u nobody touch /tmp/test
$ ls /tmp/test
/tmp/test
$ ls -ld /tmp
drwxrwxrwt 15 root root 12288 May 27 10:18 /tmp
Saya telah memverifikasi bahwa perintah crontab tidak dijalankan sama sekali : Permission denied
Pesan masih muncul /var/log/syslog
, tetapi /tmp/env.log
belum dibuat.
Berdasarkan daftar /etc/pam.d
pengaturan acak, saya menemukan perbedaan berikut:
$ 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
Paket PAM diinstal:
$ 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
Saya mencoba menginstal ulang ini - tidak membantu:
$ sudo apt-get install --reinstall $(dpkg --get-selections | grep --invert-match deinstall | cut --fields 1 | grep pam)
Saya tidak dapat membersihkan dan menginstal ulang ini karena dependensi yang tidak terpenuhi.
/var/spool/cron/crontabs/username
?
/var/log/auth.log
dikatakan tentang CRON?
id cron
->id: cron: No such user