Cập nhật: Vấn đề này sẽ không được trả lời một cách thuyết phục; Tôi đã chuyển sang một bản phân phối khác và đã không quan sát vấn đề này kể từ đó. Tôi không bao giờ có thể sửa nó bằng những câu trả lời sâu sắc có sẵn tại thời điểm đó, nhưng hiệu quả nhiên liệu của bạn có thể thay đổi (YMMV).
crontab -evà crontab -llàm việc tốt
$ crontab -l | grep -v '^#'
* * * * * /usr/bin/env
* * * * * echo 'Hello from crontab'
Tuy nhiên, tôi thấy hai tin nhắn như thế này mỗi phút trong /var/log/syslog:
Mon DD hh:mm:01 username CRON[PID]: Permission denied
Vì vậy, crontab đang được đọc , nhưng bằng cách nào đó nó không thể thực thi bất cứ điều gì cả (tất nhiên tôi đã xác minh các lệnh khi đăng nhập với cùng một người dùng). Bất cứ ý tưởng tại sao?
/etc/cron.allowvà /etc/cron.denykhông tồn tại.
crontab được thiết lập nhóm setuid:
$ stat --format '%A %U %G' /usr/bin/crontab
-rwxr-sr-x root crontab
Thư mục crontabs dường như có quyền:
$ stat --format '%A %U %G' /var/spool/cron/crontabs
drwx-wx--T root crontab
Bản thân crontab thuộc sở hữu của tôi (không ngạc nhiên, vì tôi có thể chỉnh sửa nó):
$ sudo stat --format '%A %U %G' /var/spool/cron/crontabs/$USER
-rw------- username crontab
Tôi không phải là thành viên của crontabnhóm.
Những dòng này xuất hiện trong /var/log/auth.logmỗi phút (cảm ơn @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
Có lẽ PAM bị hỏng? pam-auth-update(cảm ơn @coteyr) liệt kê tất cả những điều này và tất cả chúng đều được bật:
- Xác thực Unix
- Gnome key Daemon - Quản lý khóa đăng nhập
- Quản lý khóa / gắn eCryptfs
- Quản lý phiên ConsoleKit
- Quản lý năng lực kế thừa
Bất kỳ ai trong số họ có thể được vô hiệu hóa một cách an toàn? Tôi không sử dụng bất kỳ hệ thống tập tin được mã hóa.
Dựa trên mục nhập lỗi Debian tôi đã thử chạy debconf-show libpam-runtimevà tôi nhận được thông báo lỗi sau:
debconf: DbDriver "passwords" warning: could not open /var/cache/debconf/passwords.dat: Permission denied
Nội dung của /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
Các tập tin đề cập ( /etc/environment, pam_env.so, /etc/default/locale, pam_limits.so, pam_succeed_if.so) đều có thể đọc được bởi người dùng của tôi.
Trên một máy chủ khác có Ubuntu 13.04, với cùng một crontab người dùng, không, có /etc/cron.{allow,deny}cùng quyền như trên và không phải là thành viên của crontabnhóm, nó hoạt động tốt (ghi lại các lệnh nhưng không xuất ra trong /var/log/syslog).
Bằng cách thay đổi dòng crontab đầu tiên:
* * * * * /usr/bin/env >/tmp/env.log 2>&1
và kiểm tra xem / tmp có thể ghi được trên thế giới không:
$ sudo -u nobody touch /tmp/test
$ ls /tmp/test
/tmp/test
$ ls -ld /tmp
drwxrwxrwt 15 root root 12288 May 27 10:18 /tmp
Tôi đã xác minh rằng các lệnh crontab hoàn toàn không chạy : Các Permission deniedthông báo vẫn hiển thị /var/log/syslognhưng /tmp/env.logkhông được tạo.
Dựa trên danh sách /etc/pam.dcài đặt ngẫu nhiên, tôi đã tìm thấy những khác biệt sau:
$ 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
Các gói PAM được cài đặt:
$ 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
Tôi đã thử cài đặt lại những thứ này - không giúp được gì:
$ sudo apt-get install --reinstall $(dpkg --get-selections | grep --invert-match deinstall | cut --fields 1 | grep pam)
Tôi không thể thanh lọc và sau đó cài đặt lại những thứ này vì sự phụ thuộc chưa được đáp ứng.
/var/spool/cron/crontabs/usernamesao?
/var/log/auth.lognói gì về CRON?
id cron->id: cron: No such user