คำสั่งทั้งหมดใน crontab ของฉันล้มเหลวด้วย“ ปฏิเสธสิทธิ์”


10

อัปเดต: ปัญหานี้จะไม่ได้รับคำตอบอย่างแน่นอน; ฉันย้ายไปที่ distro อื่นและไม่ได้สังเกตปัญหานี้ตั้งแต่ ฉันไม่สามารถแก้ไขได้ด้วยคำตอบที่ลึกซึ้งในขณะนั้น แต่ประสิทธิภาพการใช้เชื้อเพลิงของคุณอาจแตกต่างกันไป (YMMV)


crontab -eและcrontab -lทำงานได้ดี:

$ crontab -l | grep -v '^#'
* * * * * /usr/bin/env
* * * * * echo 'Hello from crontab'

อย่างไรก็ตามฉันเห็นข้อความสองข้อความเช่นนี้ทุกนาทีใน/var/log/syslog:

Mon DD hh:mm:01 username CRON[PID]: Permission denied

ดังนั้นcrontab กำลังอ่านอยู่แต่อย่างใดมันก็ไม่สามารถทำงานอะไรเลย (แน่นอนว่าฉันตรวจสอบคำสั่งเมื่อลงชื่อเข้าใช้ในฐานะผู้ใช้เดียวกัน) มีความคิดอะไรบ้าง

/etc/cron.allowและ/etc/cron.denyไม่มีอยู่จริง

crontab ตั้งกลุ่ม setuid:

$ stat --format '%A %U %G' /usr/bin/crontab
-rwxr-sr-x root crontab

ดูเหมือนว่าไดเรกทอรี crontabs จะมีสิทธิ์ที่ถูกต้อง:

$ stat --format '%A %U %G' /var/spool/cron/crontabs
drwx-wx--T root crontab

ฉันเป็นเจ้าของ crontab (ไม่น่าแปลกใจเพราะฉันสามารถแก้ไขได้):

$ sudo stat --format '%A %U %G' /var/spool/cron/crontabs/$USER
-rw------- username crontab

ฉันไม่ได้เป็นสมาชิกของcrontabกลุ่ม

บรรทัดเหล่านี้ปรากฏขึ้น/var/log/auth.logทุกนาที (ขอบคุณ @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

บางที PAM เสียหรือไม่ pam-auth-update(ขอบคุณ @coteyr) แสดงรายการทั้งหมดเหล่านี้และเปิดใช้งานทั้งหมด:

  • การพิสูจน์ตัวตน Unix
  • ภูตพวงกุญแจ GNOME - การจัดการพวงกุญแจเข้าสู่ระบบ
  • การจัดการคีย์ eCryptfs / Mount
  • การจัดการเซสชัน ConsoleKit
  • การจัดการความสามารถที่สืบทอดได้

สามารถปิดใช้งานใด ๆ ของพวกเขาอย่างปลอดภัย? ฉันไม่ได้ใช้ระบบไฟล์ที่เข้ารหัสใด ๆ

จากรายการข้อบกพร่องของเดเบียนฉันพยายามเรียกใช้debconf-show libpam-runtimeและฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:

debconf: DbDriver "passwords" warning: could not open /var/cache/debconf/passwords.dat: Permission denied

เนื้อหาของ/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

ไฟล์ดังกล่าว ( /etc/environment, pam_env.so, /etc/default/locale, pam_limits.so, pam_succeed_if.so) ทั้งหมดที่สามารถอ่านได้โดยผู้ใช้ของฉัน

บนโฮสต์อื่นที่มี Ubuntu 13.04 ที่มีผู้ใช้ crontab เดียวกันไม่มี/etc/cron.{allow,deny}สิทธิ์เหมือนข้างต้นและไม่ได้เป็นสมาชิกของcrontabกลุ่มมันใช้งานได้ดี (บันทึกคำสั่ง แต่ไม่ใช่เอาต์พุต/var/log/syslog)


โดยการเปลี่ยนบรรทัด crontab แรก:

* * * * * /usr/bin/env >/tmp/env.log 2>&1

และตรวจสอบว่า / tmp สามารถเขียนได้ทั่วโลก:

$ sudo -u nobody touch /tmp/test
$ ls /tmp/test
/tmp/test
$ ls -ld /tmp
drwxrwxrwt 15 root root 12288 May 27 10:18 /tmp

ฉันได้ตรวจสอบแล้วว่าคำสั่ง crontab ไม่ทำงานเลย : Permission deniedข้อความยังคงปรากฏขึ้น/var/log/syslogแต่/tmp/env.logไม่ได้สร้างขึ้น


จากรายการ/etc/pam.dการตั้งค่าแบบสุ่มฉันพบความแตกต่างดังต่อไปนี้:

$ 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

ติดตั้งแพคเกจ PAM:

$ 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

ฉันพยายามติดตั้งใหม่ - ไม่ได้ช่วย:

$ sudo apt-get install --reinstall $(dpkg --get-selections | grep --invert-match deinstall | cut --fields 1 | grep pam)

ฉันไม่สามารถล้างข้อมูลแล้วติดตั้งใหม่ได้เนื่องจากการพึ่งพาแบบไม่แน่นอน


คุณพยายามเข้าสู่ระบบเป็น cron และดำเนินการตามคำสั่งหรือไม่?
NotFromBrooklyn

@ l0b0 สิ่งที่เกี่ยวกับสิทธิ์ของไฟล์ crontab ภายในโฟลเดอร์ crontabs คือ/var/spool/cron/crontabs/usernameอะไร?
Alaa Ali

1
อืมมม สิ่งที่ไม่/var/log/auth.logพูดเกี่ยวกับ CRON?
Alaa Ali

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

1
@ssoto ฉันจะหาได้อย่างไร ฉันam ท้องถิ่นผู้ใช้ถ้านั่นคือสิ่งที่คุณหมายถึง
l0b0

คำตอบ:


2

PAM bad jump in stack เป็นเบาะแสที่ยิ่งใหญ่

คุณ/etc/pam.d/cronแตกต่างจากเวอร์ชันสต็อกด้วยการเพิ่มหนึ่งบรรทัดเพิ่มเติมในตอนท้าย:

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

success=1บิตหมายความว่า "ถ้าโมดูลนี้ประสบความสำเร็จข้ามกฎต่อไป" ไม่มีกฎต่อไปเท่านั้นเนื่องจากนี่เป็นบรรทัดสุดท้ายในการกำหนดค่า PAM ของคุณ


ฉันมีบรรทัดเดียวกัน (ต้องได้มาจากที่ไหนสักแห่งใน interwebs) แสดงความคิดเห็นและทุกอย่างก็เริ่มทำงานอีกครั้ง
Mike

1

การกำหนดค่า PAM ของคุณไม่สมบูรณ์ นี่เป็นเรื่องปกติถ้าคุณใช้วิธีการพิสูจน์ตัวตนแบบ "ภายนอก" เช่นเครื่องสแกนลายนิ้วมือบัญชี LDAP คีย์ USB หรือการเรียงลำดับ โดยทั่วไป cron ไม่สามารถใช้เครื่องสแกนลายนิ้วมือได้ดังนั้นจึงไม่สามารถเข้าสู่ระบบในขณะที่คุณ

คุณต้องนำการกำหนดค่าที่ละเมิดออก/etc/pam.d/common-*แม้ว่าการติดตามลงอาจเป็นเรื่องยากโดยเฉพาะอย่างยิ่งหากคุณไม่ได้เปิดใช้งานด้วยตนเอง (ตัวอย่างเช่นหากสคริปต์การตั้งค่าสแกนเนอร์พิมพ์ลายนิ้วมือเปิดอยู่)

ฉันอดไม่ได้ที่จะบอกคุณว่าควรจะมีอะไรในไฟล์เหล่านั้น มีหลายสิ่งที่อาจแตกต่างกันไปขึ้นอยู่กับการตั้งค่าของคุณ แต่การปิดใช้งานวิธีการรับรองความถูกต้อง "จำเป็น" จนกว่าคุณจะเหลือเพียงแค่ "Unix Authentication" อาจเป็นขั้นตอนแรกที่ดี

คุณสามารถทำได้โดยเรียกใช้pam-auth-updateเป็นรูทและยกเลิกการทำเครื่องหมายในช่องอื่น ๆ ระวังให้มากเพราะนี่จะทำให้คุณมีระบบที่คุณไม่สามารถเข้าสู่ระบบหากทำไม่ถูกต้อง ปิดใช้งานพวกเขาทีละครั้งรีบูตเพื่อความปลอดภัยและการทดสอบ ไม่เคยปิดใช้งาน "การพิสูจน์ตัวจริงของ Unix"


ฉันควรมีความชัดเจนโดยทั่วไปแล้วเครื่องสแกนลายนิ้วมือควรจะเป็น "ตัวเลือก" ไม่จำเป็นต้องใช้ " การทำให้เป็น "จำเป็น" หมายความว่าสิ่งต่าง ๆ ที่ไม่มีลายนิ้วมือของคุณไม่สามารถ "เข้าสู่ระบบ" ได้ เนื่องจากมีข้อผิดพลาดในการกำหนดค่าเช่นนี้คุณจึงอาจมีปัญหาเช่นนี้ อย่างไรก็ตามโดยปกติแล้วเครื่องสแกนลายนิ้วมือ (หรือ USB หรือ LDAP หรือ SMB หรืออะไรก็ตาม) จะไม่ทำให้เกิดปัญหา
coteyr

ฉันไม่ได้เชื่อมต่อเครื่องสแกนลายนิ้วมือหรือไดรฟ์ USB บางทีคุณรู้บ้างไหมว่าฉันสามารถตรวจสอบเนื้อหาเริ่มต้นของ/etc/pam.d/common-*อะไรได้บ้าง
l0b0

sudo dpkg-reconfigure pamเป็นวิธีที่ดีที่สุด อย่างไรก็ตามคุณสามารถใช้งานได้sudo dpkg -i --force-confmissหลังจากลบไฟล์ (ระวัง) และมันจะใส่กลับเข้าไปดูลิงค์นี้: superuser.com/questions/69045/…
coteyr

/usr/sbin/dpkg-reconfigure: pam is not installed. ฉันลองsudo dpkg-reconfigure libpam-runtimeแล้ว แต่นั่นก็ไม่ได้ช่วยอะไร
l0b0

1
ฉันไม่คิดว่ามันเป็นแพ็คเกจที่ขาดหายไป ฉันคิดว่ามันเป็น config ที่ยุ่งเหยิง ข้อผิดพลาด "PAM bad jump in stack" หมายความว่าด้วยเหตุผลบางประการโมดูล pam ที่ต้องการไม่สามารถตรวจสอบความถูกต้องได้ อย่างที่ฉันบอกว่านี่เป็นเรื่องปกติที่เกิดจากคนที่ยุ่งกับไฟล์แพมไม่ว่าจะรู้เท่าทันหรือบังเอิญและเพิ่มโมดูลที่จำเป็นซึ่งไม่ทำงาน ตัวอย่างบางส่วนอาจเป็นการรับรองความถูกต้องของ SMB การตรวจสอบความถูกต้อง LDAP การรับรองความถูกต้องโดยใช้ฮาร์ดแวร์ ฯลฯ โปรดทราบว่าบางแพคเกจอาจเพิ่มไฟล์ที่ทำให้เกิดปัญหา Pam ทำงานอยู่ทำให้คุณสามารถเข้าสู่ระบบได้ แต่มันก็ไม่ทำงานเพราะ cron ไม่สามารถทำได้
coteyr

1

เรากำลังพยายามกำหนดเวลา cron จากผู้ใช้ LDAP (ไม่ใช่ผู้ใช้เครื่อง) และรับเหมือนกันpermission deniedแม้กระทั่งการวางechoคำสั่งหรือสคริปต์พื้นฐานในcrontabขณะที่มันกำลังทำงานอย่างสมบูรณ์ไฟล์จากผู้ใช้เครื่อง (ผู้ที่มีรายการใน / etc / passwd) การช่วยเหลือจากความคิดเห็นการแก้ไขปัญหาโดยละเอียดที่เพิ่มโดย OP เราตรวจสอบไฟล์/var/log/auth.logที่เราพบบรรทัดนี้:

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

บิตของการค้นหาของ Google เอาฉันไปนี้คำตอบที่ทำงานสำหรับเรา การเพิ่มรายละเอียดที่นี่เช่นกัน

ใน/etc/sssd/sssd.confโดเมนของเราเราได้เพิ่มข้อความ (ดูบรรทัดสุดท้าย) เช่นนี้

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

และจากนั้นก็ทำsudo service sssd restartและมันก็ใช้งานได้เหมือนมีเสน่ห์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.