รันส่วนหนึ่งของสคริปต์ทุบตีในฐานะผู้ใช้อื่น


31

มีวิธีที่จะทำให้ส่วนหนึ่งของสคริปต์ทำงานในฐานะผู้ใช้อื่น (ไม่ใช่รูท) หรือไม่? หากช่วยได้ส่วนที่จะเรียกใช้ในฐานะผู้ใช้อื่นจะเกิดขึ้นที่ส่วนท้ายของสคริปต์

แก้ไข:
ระบบปฏิบัติการ - & gt; Ubuntu 9.04


คำตอบ:


35

ใช้คำสั่ง sudo ในสคริปต์

ในรูปแบบ:

sudo -u username command

คำสั่ง sudo รัน คำสั่ง ในฐานะผู้ใช้ ชื่อผู้ใช้ .

หากสคริปต์ทำงานเป็น root ฉันไม่คิดว่ามันจะถามรหัสผ่าน มิฉะนั้นบทความนี้กล่าวถึงวิธีการใช้ sudo ด้วยรหัสผ่านในบรรทัดคำสั่งเดียว? และบทความนี้กล่าวถึงวิธีการใช้ sudo ไม่มีรหัสผ่าน?


3
นี่เป็นสิ่งที่ดีและง่าย แต่มีวิธีทำเช่นนี้สำหรับกลุ่มคำสั่งแทนที่จะทีละรายการหรือไม่
Andrew

เขียนสคริปต์ทุบตีทำให้ปฏิบัติการได้ chmod +x script.sh และจากนั้นเพียงแค่ sudo -u username script.sh
NiCU

@ แอนดรูว์ฉันสงสัยว่าตัวเองและต่อไปนี้ใช้ได้กับฉัน: sudo -u ic sh -c 'cmd1 & amp; & amp; CMD2'
Karussell

ยังรวมไปถึง i ตัวเลือกถ้าคุณต้องการได้รับสภาพแวดล้อมของผู้ใช้
neoDev

6

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

ฉันขอแนะนำให้ใช้ 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 มีรายละเอียดเต็มไปด้วยเลือดมากมาย


มันจะทำงานสำหรับคำสั่งให้ผู้ใช้เฉพาะเท่านั้น
Manish Mathai

คุณสามารถระบุได้ว่ามีผู้ใช้เฉพาะรายเท่านั้นที่สามารถเรียกใช้คำสั่ง (ในตัวอย่างด้านบนให้แทนที่ username ด้วยชื่อผู้ใช้ที่ควรจะสามารถเรียกใช้คำสั่ง) หากปฏิบัติการที่คุณต้องการเรียกใช้นั้นสามารถเรียกใช้งานได้โดยผู้ใช้รายเดียวเท่านั้นนั่นก็ใช้ได้เช่นกัน - เพียงส่งชื่อผู้ใช้นั้นใน sudo -u username commandline บรรทัดของสคริปต์
James Polley

@Manish ใช่. สิ่งที่ไฟล์ sudoers กล่าวคือ "อนุญาตให้ชื่อผู้ใช้นี้บนโฮสต์นี้เพื่อเรียกใช้ command1 โดยไม่ต้องให้รหัสผ่าน
DaveParillo

5

# 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

8
คุณสามารถเพิ่มข้อความอธิบายได้ไหม?
Kazark

4

สำหรับ sonarqube:

sudo -u sonar /usr/bin/sonar start

ที่ไหน sonar เป็นชื่อของผู้ใช้ที่ใช้เรียกใช้คำสั่ง /usr/bin/sonar start


2

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

ฉันพลาดอะไรไปรึเปล่า?

หวังว่าจะช่วย

ความนับถือ


1
ฉันคิดว่านี่เป็นคำตอบที่เหมาะสมที่สุดมีคำตอบอื่น ๆ ทั้งหมดแนะนำ sudo ซึ่งมักจะไม่ติดตั้งตามค่าเริ่มต้นในการติดตั้งลินุกซ์ขั้นต่ำ
Tim

1

ด้วยวิธีนี้จุดสิ้นสุดของสคริปต์จะถูกเรียกใช้งานโดยผู้ใช้คนอื่น (รูท) โปรดทราบว่า $[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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.