ฉันมีเรียกใช้สคริปต์จาก crontab sudoผู้ใช้ที่ไม่ได้รับสิทธิพิเศษที่จะเรียกใช้คำสั่งบางอย่าง ยกเว้นว่ามันจะไม่ สคริปต์ทำงานได้ดี แต่คำสั่ง sudo'ed ล้มเหลวอย่างเงียบ ๆ
สคริปต์ทำงานอย่างสมบูรณ์แบบจากเชลล์ในฐานะผู้ใช้ที่เป็นปัญหา
Sudo ไม่ต้องการรหัสผ่าน ผู้ใช้ในคำถามได้เข้าถึงที่ได้รับใน
(root) NOPASSWD: ALL/etc/sudoersCron กำลังทำงานและเรียกใช้งานสคริปต์ การเพิ่ม
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และสมองของฉันก็เริ่มกรีดร้องดังเกินไปที่จะอ่านต่อไป