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
Jawaban:
PAM bad jump in stack
adalah petunjuk besar.Anda
/etc/pam.d/cron
berbeda dari versi stok dengan penambahan satu baris tambahan di akhir:The
success=1
bit berarti "jika modul ini berhasil, melewatkan aturan berikutnya". Hanya tidak ada aturan selanjutnya, karena ini adalah baris terakhir dalam konfigurasi PAM Anda.sumber
Konfigurasi PAM Anda tidak lengkap. Ini umum jika Anda telah menggunakan metode otentikasi "eksternal" seperti pemindai sidik jari, akun LDAP, Kunci USB atau semacamnya. Pada dasarnya cron tidak dapat bekerja dengan pemindai sidik jari sehingga tidak bisa masuk seperti Anda.
Anda perlu menghapus konfigurasi yang menyinggung dari
/etc/pam.d/common-*
meskipun melacaknya bisa agak sulit, khususnya jika Anda tidak mengaktifkan sesuatu secara manual (misalnya jika skrip pengaturan pemindai pemindai sidik jari menghidupkan sesuatu).Saya tidak bisa membantu banyak dengan memberi tahu Anda apa yang seharusnya ada di file-file itu. Banyak hal bisa berbeda tergantung pada pengaturan Anda. Tetapi menonaktifkan metode auth "wajib" sampai Anda kehabisan hanya dengan "Unix Authentication" mungkin merupakan langkah pertama yang baik.
Anda dapat melakukan ini dengan menjalankan
pam-auth-update
sebagai root dan menghapus centang pada kotak lainnya. Berhati-hatilah karena ini dapat meninggalkan Anda dengan sistem yang tidak dapat Anda masuki jika dilakukan dengan tidak benar. Nonaktifkan mereka satu per satu, reboot untuk keamanan, dan uji. TIDAK PERNAH MENONAKTIFKAN "Unix Authentication"sumber
/etc/pam.d/common-*
?sudo dpkg-reconfigure pam
adalah cara terbaik . Namun, Anda dapat menggunakansudo dpkg -i --force-confmiss
setelah menghapus file (HATI-HATI) dan itu akan mengembalikan satu link ini: superuser.com/questions/69045/…/usr/sbin/dpkg-reconfigure: pam is not installed
. Saya juga mencobasudo dpkg-reconfigure libpam-runtime
, tetapi itu tidak membantu.Kami mencoba menjadwalkan cron dari pengguna LDAP (bukan pengguna mesin) dan mendapatkan yang sama
permission denied
bahkan untuk memasukkanecho
perintah atau skrip dasarcrontab
, sementara itu berfungsi sepenuhnya file dari pengguna mesin (yang memiliki entri di / etc / passwd). Mengambil bantuan dari komentar pemecahan masalah terinci yang ditambahkan oleh OP, kami memeriksa file/var/log/auth.log
tempat kami menemukan baris ini:Sedikit pencarian Google membawa saya ke jawaban ini yang berhasil bagi kami. Menambahkan detail di sini juga.
Di
/etc/sssd/sssd.conf
, di bawah domain kami, kami menambahkan entri (lihat baris terakhir) seperti ini.Dan baru saja melakukannya
sudo service sssd restart
dan itu bekerja seperti pesona.sumber