ฉันมีเรียกใช้สคริปต์จาก crontab sudo
ผู้ใช้ที่ไม่ได้รับสิทธิพิเศษที่จะเรียกใช้คำสั่งบางอย่าง ยกเว้นว่ามันจะไม่ สคริปต์ทำงานได้ดี แต่คำสั่ง sudo'ed ล้มเหลวอย่างเงียบ ๆ
สคริปต์ทำงานอย่างสมบูรณ์แบบจากเชลล์ในฐานะผู้ใช้ที่เป็นปัญหา
Sudo ไม่ต้องการรหัสผ่าน ผู้ใช้ในคำถามได้เข้าถึงที่ได้รับใน
(root) NOPASSWD: ALL
/etc/sudoers
Cron กำลังทำงานและเรียกใช้งานสคริปต์ การเพิ่ม
date > /tmp/log
ผลผลิตอย่างง่ายในเวลาที่เหมาะสมไม่ใช่ปัญหาสิทธิ์ สคริปต์จะถูกเรียกใช้งานอีกครั้งไม่ใช่คำสั่ง sudo'ed
มันไม่ใช่ปัญหาของเส้นทาง การรัน
env
จากภายในสคริปต์ที่กำลังรันแสดง$PATH
ตัวแปรที่ถูกต้องซึ่งรวมถึงพา ธ ไปยัง sudo การเรียกใช้โดยใช้เส้นทางแบบเต็มไม่ได้ช่วยอะไร คำสั่งที่กำลังดำเนินการจะได้รับชื่อพา ธ เต็มการพยายามดักจับเอาต์พุตของคำสั่ง sudo รวมถึง STDERR จะไม่แสดงสิ่งใดที่มีประโยชน์ การเพิ่ม
sudo echo test 2>&1 > /tmp/log
สคริปต์สร้างบันทึกเปล่าsudo binary เองนั้นทำงานได้ดีและรับรู้ว่ามันมีสิทธิ์แม้เมื่อเรียกใช้จาก cron ภายในสคริปต์ การเพิ่ม
sudo -l > /tmp/log
สคริปต์สร้างเอาต์พุต:ผู้ใช้ ec2 ผู้ใช้อาจเรียกใช้คำสั่งต่อไปนี้บนโฮสต์นี้:
(root) NOPASSWD: ALL
การตรวจสอบโค้ดทางออกของคำสั่งโดยใช้$?
แสดงว่ามันกำลังส่งคืนข้อผิดพลาด (รหัสทางออก:) 1
แต่ดูเหมือนว่าจะไม่มีข้อผิดพลาดเกิดขึ้น คำสั่งง่าย ๆ เหมือน/usr/bin/sudo /bin/echo test
คืนรหัสข้อผิดพลาดเดียวกัน
จะเกิดอะไรขึ้นอีก?
นี่เป็นเครื่องเสมือนที่เพิ่งสร้างขึ้นซึ่งใช้งาน Amazon Linux AMI ล่าสุด crontab เป็นของผู้ใช้ec2-user
และไฟล์ sudoers เป็นค่าเริ่มต้นการกระจาย
sudo
สิทธิ์แบบจำกัด/ เฉพาะ / สำหรับคำสั่งที่คุณต้องการในสคริปต์และปิดใช้งานความสามารถในการเข้าสู่ระบบของพวกเขาโดยสมบูรณ์
The user in question has (root) NOPASSWD: ALL access granted in /etc/sudoers
และสมองของฉันก็เริ่มกรีดร้องดังเกินไปที่จะอ่านต่อไป