วิธีรันงาน cron โดยใช้คำสั่ง sudo


118

เป็นไปได้ไหมที่จะรันงานcronที่ต้องการคำสั่งsudo ?

ชอบ:

 sudo rm somefile

ยินดีต้อนรับ Sayem สยามมีลักษณะที่ตอบคำถามนี้askubuntu.com/questions/2368/how-do-i-setup-cron-job อย่างที่ฉันคิดว่าคำถามของคุณถูกถามมาก่อนที่นี่ในออสเตรเลีย
stephenmyall

1
ฉันพยายามรัน sudo ซึ่งต้องการรหัสผ่าน แต่ฉันจะขอรหัสผ่าน giv จากไฟล์ cron ได้อย่างไร
sayem siam

3
@sayemsiam คุณไม่จำเป็นต้องใส่ sudo เพียงแก้ไข root crontab
Braiam

ดูคำตอบนี้
sampablokuper

คำตอบ:


240

ฉันจะไม่เข้าใจว่าความคิดนี้แย่แค่ไหน ใส่เพียงแค่ทำงานsudoใน crontab ต้องใช้รหัสผ่านของคุณจะถูกเก็บไว้ที่ไหนสักแห่งในธรรมดา

มันเป็นความคิดที่ไม่ดี


ต่อไปนี้เป็นวิธีที่ต้องการในการใช้งานการบริหารผ่าน cron เนื่องจากคุณไม่จำเป็นต้องเขียนsudoใน crontab ถ้าคุณกำลังแก้ไข crontab ของรูท

ใช้ crontab ของรูท

รันคำสั่งต่อไปนี้:

sudo crontab -e

นี่เป็นการเปิดrootcrontab ของ sudoไม่จำเป็นต้องเรียกใช้คำสั่งของคุณในบริบทนี้เนื่องจากมันจะถูกเรียกเช่นrootนั้น

ดังนั้นคุณเพียงแค่ผนวกสิ่งต่อไปนี้เข้ากับ crontab ของรูท

@hourly rm somefile

ตอนนี้ถ้าคุณอย่างต้องการที่จะไม่ปลอดภัยและจะรับความเสี่ยงด้วยรหัสผ่านของคุณต่อไปนี้จะเรียกใช้คำสั่งของคุณจาก crontab sudoของคุณเองและใส่รหัสผ่านของคุณโดยอัตโนมัติเมื่อได้รับแจ้งจาก

อีกครั้งนี้ไม่แนะนำ


ใน crontab ของคุณเองเขียนคำสั่งของคุณเช่น:

@hourly echo "password" | sudo -S rm somefile

ข้อเสียที่เห็นได้ชัดคือที่นี่หากใครก็ตามเข้าถึง crontab ของคุณรหัสผ่านของคุณจะสามารถอ่านได้ในแบบธรรมดา

คุณไม่ควรทำเช่นนี้


1
ดีใจที่มันใช้งานได้! แค่ระวังช่องโหว่ที่คุณทิ้งไว้ .. พวกมันอาจกลับมาหลอกหลอนคุณในภายหลัง
SirCharlo

1
@SirCharlo ทำไมrootผู้ใช้ crontab แทนการใช้ crontab ทั้งระบบ/etc/crontab?
Eliah Kagan

1
@Elijah ทำไมไม่?
SirCharlo

2
คำตอบนี้หายไปจากเครื่องหมายเพราะมันคัดสรรกว่ารายละเอียดย่อยที่มีอยู่ในsudoersไฟล์ของคุณเช่นกลุ่ม sudo โดยไม่ต้องใช้รหัสผ่าน
รนต์

จุดที่มีประโยชน์มากขอบคุณสำหรับความช่วยเหลือที่ดี
Nasser Mansouri

33

หากคุณกำลังวางสคริปต์จากหนึ่งในไดเรกทอรี cron ( /etc/cron.*) จากนั้นคุณไม่จำเป็นต้องใช้ sudo เหมือนที่ทำงานเป็นราก

หากคุณใช้ crontab คุณจะต้องใช้ crontab ของรูท สิ่งนี้จะเรียกใช้เป็น root และไม่จำเป็นต้องใช้ sudo

sudo crontab -e

1
ฉันจะวางคำสั่งไว้ใน /etc/cron.hourly/something นั่นคือสิ่งที่ไดเรกทอรีเหล่านี้มีไว้สำหรับ
John S Gruber

3
ไม่ได้คุณสามารถใส่ไว้ใน /etc/cron.SOMETHING/SCRIPT แต่ฉันจะไม่ทำทั้งสองอย่าง ทั้งสองจะให้ฟังก์ชั่นเดียวกันโดยประมาณแม้ว่าการใช้ crontab คุณจะมีอำนาจมากกว่าความถี่ / เมื่อสิ่งต่าง ๆ ทำงาน
tgm4883

1
ฉันควรจะชัดเจนว่าฉันหมายถึงว่าเป็นทางเลือก ขอบคุณ
John S Gruber

3

เรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัล

sudo visudo

เพิ่มบรรทัดต่อไปนี้ในตอนท้ายของไฟล์:

vidyadhar  ALL= NOPASSWD: /bin/rm

ในตัวอย่างข้างต้น vidyadhar เป็นชื่อผู้ใช้และจะไม่ถามรหัสผ่านหากคุณใช้คำสั่ง rm ผ่าน vidyadhar


17
อืม .. แล้วคำสั่งที่เป็นอันตรายเช่นsudo rm -rf 'slash'( อย่าเรียกใช้คำสั่งนั้น ) เรียกใช้จากผู้ใช้นั้นจะไม่ต้องการรหัสผ่าน .. ฉันไม่รู้มันรู้สึกไม่ปลอดภัยใช่ไหม?
SirCharlo

ใช่ฉันรู้แล้ว วิธีการของคุณดี แต่ฉันใช้วิธีการข้างต้นเพื่อให้สิทธิ์แก่ผู้ใช้รายอื่นในการหยุด / เริ่มบริการบางอย่าง
Vidyadhar

24
นี้เป็นอย่างมากความคิดที่ดี โปรดอย่าทำเช่นนี้
bkanuka

2
อาจvidyadhar ALL= NOPASSWD: /bin/rm somefileจะปลอดภัยกว่า
Wernfried Domscheit

นี่เป็นความคิดที่แย่มาก คุณให้สิทธิ์ sudo แบบครอบคลุมกับ rm ให้สิทธิ์ sudo แก่สคริปต์ของคุณรวมถึง rm หรืออื่น ๆ ในสคริปต์ทำให้สามารถใช้งานได้จากนั้นให้สิทธิ์ sudo แก่สคริปต์นั้น <username> ALL=(ALL) NOPASSWD: /home/<username>/bin/<script>ซึ่งจะปลอดภัยกว่ามาก
RJ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.