เรียกใช้งานสคริปต์จาก rc.local ในฐานะผู้ใช้แทนที่จะเป็นรูท


26

ฉันต้องการเรียกใช้สคริปต์ทุกครั้งที่เซิร์ฟเวอร์เริ่มทำงาน ปัญหาคือฉันต้องเป็นผู้ใช้บางคนในการดำเนินการสคริปต์ถ้าฉันพยายามที่จะเป็นรากมันไม่สามารถหาแพคเกจบางอย่าง (เช่นทับทิม)

ฉันพยายามเปลี่ยนเป็น xxx user01

sudo su user01
/etc/init.d/script start

อย่างไรก็ตามมันใช้งานไม่ได้


โพสต์สคริปต์ init ของคุณหรือไม่
ควอนตั้ม

คุณมีบันทึกบ้างไหม?
Dom

ทำไมคุณไม่ใช้เพียงแค่suในสคริปต์ rc?
Mat

คำตอบ:


30

การรันsudo su user01สคริปต์ไม่ได้หมายความว่าคำสั่งต่อไปนี้จะถูกส่งไปยังเชลล์ผลลัพธ์ ในความเป็นจริงมันอาจหมายถึงเชลล์ใหม่ถูกวางไข่เป็น user01 ซึ่งไม่เคยออก!

สองสิ่ง:

  • คุณสามารถรันคำสั่งเป็นผู้ใช้อื่นอย่างใดอย่างหนึ่งโดยผ่าน-c 'command...'อาร์กิวเมนต์ su su user01 -c '/etc/init.d/script start'เช่น
  • การเริ่มบริการที่ใช้ /etc/init.d จาก rc.local นั้นไม่ใช่สิ่งที่ถูกต้อง คุณต้องการที่จะใช้เปิดใช้งานบริการที่เริ่มต้นโดยใช้เครื่องมือการกระจายของคุณเหมือนหรือchkconfig update-rc.dนอกจากนี้คุณยังไม่ต้องการงานใน /etc/init.d rootที่ไม่ควรเริ่มต้นเป็น ตัวงานเองสามารถแยกไปยังบัญชีผู้ใช้อื่นได้ แต่ควรเรียกใช้โดยรูท


4

คุณสามารถรันคำสั่งผ่าน sudo ดังนี้:

sudo -H -u user01 /etc/init.d/script start

-H ตั้งค่าตัวแปรสภาพแวดล้อม HOME ให้เป็นของผู้ใช้

-u ระบุชื่อผู้ใช้เพื่อเรียกใช้เป็น


0

แน่นอนคุณไม่สามารถเรียกใช้สคริปต์ด้วย sudo ได้เนื่องจาก requiretty (บังคับให้ผู้ใช้ต้องเข้าสู่ระบบ) ใน sudoers คุณอาจต้องการปิดการใช้งานซึ่งค่อนข้างเสี่ยง

นอกจากนี้ยังมีเครื่องมือค่อนข้างเก่าที่เรียกว่า runsuid: http://freecode.com/projects/runsuid

HTH

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