วิธีการเรียกใช้สคริปต์ในฐานะผู้ใช้อื่นโดยไม่ต้องใช้รหัสผ่าน?


145

ฉันมี script.sh ที่ต้องทำงานเป็น user2 อย่างไรก็ตามสคริปต์นี้สามารถเรียกใช้ภายใต้ user1 ในแอปพลิเคชันของฉัน

ฉันต้องการคำสั่งต่อไปนี้เพื่อเรียกใช้:

su user2 -C script.sh

แต่สามารถรันได้โดยไม่ต้องใช้รหัสผ่าน

ฉันต้องการให้สิ่งนี้มีข้อ จำกัด มากเนื่องจากใน user1 สามารถเรียกใช้งาน script.sh ภายใต้ user2 เท่านั้นและไม่มีอะไรอื่นอีก

ฉันได้ลองทำสิ่งนี้ด้วยไฟล์ sudoers และเพิ่งจะสับสนไม่รู้จบหลังจากพยายามหลายชั่วโมง

หากใครบางคนสามารถให้ตัวอย่างที่ชัดเจนของวิธีการนี้สามารถทำได้ (แทนที่จะเป็นสิ่งทั่วไปเช่นใช้ sudoers) ก็จะได้รับการชื่นชมอย่างมาก


15
ฉันไม่ได้ใกล้ชิดเป็นพิเศษ นี่เป็นคำถามเกี่ยวกับวิธีการตั้งโปรแกรมระบบในลักษณะเฉพาะ เช่นนี้เป็นเรื่องเกี่ยวกับการเขียนโปรแกรมเชลล์และอยู่ในขอบเขตของ SO ซึ่งเป็นคำถามเกี่ยวกับการเขียนโปรแกรม เป็นที่ชัดเจนว่าผู้คนจำนวนมากไม่เห็นว่าเป็นหัวข้อที่ควรลงคะแนน คำถามและคำตอบทั้งหมดมีจำนวนมากโหวต
Jonathan Leffler

คำตอบ:


121

โทรvisudoและเพิ่มสิ่งนี้:

user1 ALL=(user2) NOPASSWD: /home/user2/bin/test.sh

เส้นทางคำสั่งต้องแน่นอน ! จากนั้นเรียกsudo -u user2 /home/user2/bin/test.shจากuser1เปลือก เสร็จสิ้น


3
มีคำอธิบายที่ดีเกี่ยวกับรูปแบบsudoersในวิธีใช้ Ubuntu หน้า Man สำหรับ sudoers นั้นน่าเกลียด :(
Mifeet

ดังนั้นสเกลนี้จะให้ผู้ใช้ทุกคนทำงานเป็น user2 ได้อย่างไรแทนที่จะเป็นแค่ user1
jiggunjer

193

ลองเรียกใช้:

su -c "Your command right here" -s /bin/sh username

สิ่งนี้จะเรียกใช้คำสั่งเป็นชื่อผู้ใช้ที่ระบุว่าคุณมีสิทธิ์ในการ sudo เป็นผู้ใช้รายนั้น


17
มันทำงานเหมือนผู้ใช้ทั่วไปที่มีสิทธิ์แบบเต็มของ sudo เช่นนี้:sudo su -c "Your command right here" -s /bin/sh otheruser
rubo77

5
เพียงแค่ทราบสำหรับผู้ใช้ Mac ใด ๆ su username -c "command"ที่เห็นได้ชัดว่าไวยากรณ์เป็นบิตที่แตกต่าง:
NHDaly

1
หากคุณพยายามที่จะเริ่มต้นscreenในฐานะผู้ใช้รายอื่นนี่อาจเป็นประโยชน์ - linuxquestions.org/questions/linux-software-2/…
Mint

2
หากusername(หรือในคำถามuser2) มีรหัสผ่านตัวเองสิ่งนี้จะไม่อนุญาตให้ข้ามพรอมต์ของมัน คำตอบอื่น ๆ ทำ: ไม่จำเป็นต้องใช้รหัสผ่านทั้ง user1 และ user2
phil294

1
`su -c "Your command right here" -s /bin/sh username`

คำสั่งดังกล่าวถูกต้อง แต่บน Red Hat หาก selinux กำลังบังคับใช้จะไม่อนุญาตให้ cron รันสคริปต์ในฐานะผู้ใช้รายอื่น ตัวอย่าง; execl: couldn't exec /bin/sh execl: Permission denied

ฉันต้องติดตั้ง setroubleshoot และ setools และเรียกใช้สิ่งต่อไปนี้เพื่ออนุญาต:

yum install setroubleshoot setools
sealert -a /var/log/audit/audit.log
grep crond /var/log/audit/audit.log | audit2allow -M mypol
semodule -i mypol.p
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.