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 -e
và crontab -l
là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.allow
và /etc/cron.deny
khô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 crontab
nhóm.
Những dòng này xuất hiện trong /var/log/auth.log
mỗ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-runtime
và 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 crontab
nhó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 denied
thông báo vẫn hiển thị /var/log/syslog
nhưng /tmp/env.log
không được tạo.
Dựa trên danh sách /etc/pam.d
cà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/username
sao?
/var/log/auth.log
nói gì về CRON?
id cron
->id: cron: No such user