มีวิธีที่จะทำให้ส่วนหนึ่งของสคริปต์ทำงานในฐานะผู้ใช้อื่น (ไม่ใช่รูท) หรือไม่? หากช่วยได้ส่วนที่จะเรียกใช้ในฐานะผู้ใช้อื่นจะเกิดขึ้นที่ส่วนท้ายของสคริปต์
แก้ไข:
ระบบปฏิบัติการ - & gt; Ubuntu 9.04
มีวิธีที่จะทำให้ส่วนหนึ่งของสคริปต์ทำงานในฐานะผู้ใช้อื่น (ไม่ใช่รูท) หรือไม่? หากช่วยได้ส่วนที่จะเรียกใช้ในฐานะผู้ใช้อื่นจะเกิดขึ้นที่ส่วนท้ายของสคริปต์
แก้ไข:
ระบบปฏิบัติการ - & gt; Ubuntu 9.04
คำตอบ:
ใช้คำสั่ง sudo ในสคริปต์
ในรูปแบบ:
sudo -u username command
คำสั่ง sudo รัน คำสั่ง ในฐานะผู้ใช้ ชื่อผู้ใช้ .
หากสคริปต์ทำงานเป็น root ฉันไม่คิดว่ามันจะถามรหัสผ่าน มิฉะนั้นบทความนี้กล่าวถึงวิธีการใช้ sudo ด้วยรหัสผ่านในบรรทัดคำสั่งเดียว? และบทความนี้กล่าวถึงวิธีการใช้ sudo ไม่มีรหัสผ่าน?
chmod +x script.sh
และจากนั้นเพียงแค่ sudo -u username script.sh
i
ตัวเลือกถ้าคุณต้องการได้รับสภาพแวดล้อมของผู้ใช้
คำตอบนี้ เป็นสิ่งที่ดี แต่คำแนะนำเซิร์ฟเวอร์ผิดพลาดเป็นอันตรายเล็กน้อย - จะอนุญาตให้ทุกคนทำงานอะไรก็ได้เหมือนรูท ดังนั้นฉันโพสต์ที่นี่เพราะฉันไม่สามารถจัดรูปแบบความคิดเห็น
ฉันขอแนะนำให้ใช้ visudo เพื่อให้สิทธิ์ที่คุณต้องการเท่าที่คุณจะทำได้ ชนิด visudo
และเพิ่มบรรทัดที่ชอบ:
username hostname = NOPASSWD: /full/path/to/command1, full/path/to/command2
หากคุณต้องการใช้สิ่งเดียวกันนี้ในโฮสต์หลายแห่งคุณสามารถเปิดมันด้วย:
username ALL = NOPASSWD: /full/path/to/command1, full/path/to/command2
แต่ฉันจะไม่ใช้เช่นกัน
username ALL=(ALL) NOPASSWD: ALL
หรือ ชื่อโฮสต์ชื่อผู้ใช้ = ALL
หน้าคน sudo มีรายละเอียดเต็มไปด้วยเลือดมากมาย
username
ด้วยชื่อผู้ใช้ที่ควรจะสามารถเรียกใช้คำสั่ง) หากปฏิบัติการที่คุณต้องการเรียกใช้นั้นสามารถเรียกใช้งานได้โดยผู้ใช้รายเดียวเท่านั้นนั่นก็ใช้ได้เช่นกัน - เพียงส่งชื่อผู้ใช้นั้นใน sudo -u username commandline
บรรทัดของสคริปต์
# I = like:
#test if running bash as a different user works
sudo -u nobody bash -c : && RUNAS="sudo -u nobody"
echo 1: $USER
#Runs bash with commands between '_' as nobody if possible
$RUNAS bash<<_
echo 2: \$USER
_
echo 3: $USER
# ./วิ่ง
1: root
2: nobody
3: root
สำหรับ sonarqube:
sudo -u sonar /usr/bin/sonar start
ที่ไหน sonar
เป็นชื่อของผู้ใช้ที่ใช้เรียกใช้คำสั่ง /usr/bin/sonar start
ไม่แน่ใจเกี่ยวกับเรื่องนี้ แต่ถ้าคุณต้องการให้เฉพาะจุดสิ้นสุดของสคริปต์นั้นจะทำงานเป็นผู้ใช้อื่นคุณสามารถเพิ่ม su someuser
ก่อนที่สคริปต์จะจบ
ฉันพลาดอะไรไปรึเปล่า?
หวังว่าจะช่วย
ความนับถือ
ด้วยวิธีนี้จุดสิ้นสุดของสคริปต์จะถูกเรียกใช้งานโดยผู้ใช้คนอื่น (รูท)
โปรดทราบว่า $[LINENO+2]
และ exit $?
โทร สิ่งเหล่านี้จะต้องทำให้จุดสิ้นสุดของสคริปต์ทำงานเพียงครั้งเดียว sudo
โทร.
#!/bin/bash
echo $USER
# pipe the rest of this script via a sudo call
tail -n +$[LINENO+2] $0 | exec sudo bash
exit $?
echo $USER
exit 1