Tất cả các lệnh trong crontab của tôi đều thất bại với quyền Permi bị từ chối


10

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 -ecrontab -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.allow/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.


Bạn đã cố gắng đăng nhập như cron và thực hiện các lệnh?
NotFromBrooklyn

@ l0b0, còn các quyền của tệp crontab, bên trong thư mục crontabs thì /var/spool/cron/crontabs/usernamesao?
Alaa Ali

1
Hừm. Không /var/log/auth.lognói gì về CRON?
Alaa Ali

@NotFromBrooklyn id cron->id: cron: No such user
l0b0

1
@ssoto Làm sao để tìm hiểu? Tôi một địa phương sử dụng, nếu đó là những gì bạn có ý nghĩa.
l0b0

Câu trả lời:


2

PAM bad jump in stack là một đầu mối lớn.

Của bạn /etc/pam.d/cronkhác với phiên bản chứng khoán với việc thêm một dòng bổ sung ở cuối:

session [success=1 default=ignore] pam_succeed_if.so service in cron quiet use_uid

Các success=1bit có nghĩa là "nếu module này thành công, bỏ qua quy tắc tiếp theo". Chỉ không có quy tắc tiếp theo, vì đây là dòng cuối cùng trong cấu hình PAM của bạn.


Tôi đã có cùng một dòng (phải có nó từ một nơi nào đó trên các interwebs), nhận xét nó và mọi thứ bắt đầu hoạt động trở lại.
Mike

1

Cấu hình PAM của bạn không phù hợp. Điều này là phổ biến nếu bạn đã sử dụng các phương thức xác thực "bên ngoài" như máy quét vân tay, tài khoản LDAP, Khóa USB hoặc sắp xếp. Về cơ bản, cron không thể làm việc với máy quét dấu vân tay để nó không thể đăng nhập như bạn.

Bạn cần xóa cấu hình vi phạm khỏi /etc/pam.d/common-*mặc dù việc theo dõi nó có thể hơi khó khăn, đặc biệt nếu bạn không kích hoạt thủ công (ví dụ: nếu tập lệnh thiết lập máy quét vân tay bật thứ gì đó).

Tôi không thể giúp nhiều với việc cho bạn biết những gì nên có trong các tập tin đó. Rất nhiều thứ có thể khác nhau tùy thuộc vào thiết lập của bạn. Nhưng việc vô hiệu hóa các phương thức xác thực "bắt buộc" cho đến bên trái của bạn chỉ bằng "Xác thực Unix" có thể là bước đầu tiên tốt.

Bạn có thể làm điều này bằng cách chạy pam-auth-updatebằng root và bỏ chọn các hộp khác. Hãy rất cẩn thận vì điều này có thể khiến bạn mất một hệ thống mà bạn không thể đăng nhập nếu thực hiện không chính xác. Vô hiệu hóa chúng cùng một lúc, khởi động lại để đảm bảo an toàn và kiểm tra. KHÔNG BAO GIỜ TUYỆT VỜI "Xác thực Unix"


Tôi nên rõ ràng, một máy quét dấu vân tay thường là "tùy chọn" không "bắt buộc". Làm cho nó "bắt buộc" có nghĩa là những thứ không có dấu vân tay của bạn không thể "đăng nhập". Do một lỗi cấu hình như thế, bạn có thể gặp phải một vấn đề như thế này. Tuy nhiên, thông thường một máy quét dấu vân tay (hoặc USB hoặc LDAP hoặc SMB hoặc bất cứ thứ gì) sẽ không gây ra sự cố.
coteyr

Tôi chưa kết nối bất kỳ máy quét vân tay hoặc ổ USB. Bạn có thể biết ở đâu đó tôi có thể kiểm tra nội dung mặc định/etc/pam.d/common-* sẽ là gì không?
l0b0

sudo dpkg-reconfigure pamlà cách tốt nhất Tuy nhiên, bạn có thể sử dụng sudo dpkg -i --force-confmisssau khi xóa tệp (CAREFUL) và nó sẽ đặt lại một liên kết xem liên kết này: superuser.com/questions/69045/
Kẻ

/usr/sbin/dpkg-reconfigure: pam is not installed. Tôi cũng đã thử sudo dpkg-reconfigure libpam-runtime, nhưng điều đó không giúp được gì.
l0b0

1
Tôi không nghĩ đó là một gói bị thiếu. Tôi nghĩ rằng đó là một cấu hình sai lầm. Lỗi "PAM bad jump in stack" có nghĩa là, vì một số lý do, mô-đun pam bắt buộc không thể xác thực. Như tôi đã nói, điều này thường xảy ra do mọi người gây rối với các tập tin pam của họ một cách cố ý hoặc ngẫu nhiên và thêm một mô-đun cần thiết không hoạt động. Một số ví dụ sẽ là xác thực SMB, xác thực LDAP, xác thực dựa trên phần cứng, v.v ... Hãy nhớ rằng, một số gói có thể đã thêm một tệp gây ra sự cố. Pam đang làm việc, vì bạn có thể đăng nhập, nhưng nó cũng không hoạt động vì
croney

1

Chúng tôi đã cố gắng lên lịch cron từ người dùng LDAP (không phải người dùng máy) và nhận được điều tương tự permission deniedkhi thậm chí đưa echolệnh hoặc tập lệnh cơ bản vào crontab, trong khi nó hoạt động hoàn toàn với tệp từ người dùng máy (có mục trong / etc / passwd). Nhận trợ giúp từ các nhận xét khắc phục sự cố chi tiết được thêm bởi OP, chúng tôi đã kiểm tra tệp /var/log/auth.lognơi chúng tôi tìm thấy dòng này:

pam_sss(cron:account): Access denied for user my_username: 6 (Permission denied)

Một chút tìm kiếm của Google đã đưa tôi đến câu trả lời này có hiệu quả với chúng tôi. Thêm các chi tiết ở đây là tốt.

Trong /etc/sssd/sssd.conf, dưới tên miền của chúng tôi, chúng tôi đã thêm một mục (xem dòng cuối cùng) như thế này.

[domain/my.domain.com]
....
ad_gpo_map_interactive = +cron

Và sau đó chỉ cần làm sudo service sssd restartvà nó hoạt động như một nét duyên dáng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.