ฉันสงสัยว่าจะเรียกใช้คำสั่งในฐานะผู้ใช้อื่นจากสคริปต์ได้อย่างไร
ฉันมีเจ้าของสคริปต์ตั้งค่าเป็นรูท ฉันยังมีคำสั่งต่อไปนี้ถูกเรียกใช้ภายในสคริปต์เพื่อเรียกใช้คำสั่งเป็นผู้ใช้ฮัดสัน:
su -c command hudson
นี่เป็นไวยากรณ์ที่ถูกต้องหรือไม่
ฉันสงสัยว่าจะเรียกใช้คำสั่งในฐานะผู้ใช้อื่นจากสคริปต์ได้อย่างไร
ฉันมีเจ้าของสคริปต์ตั้งค่าเป็นรูท ฉันยังมีคำสั่งต่อไปนี้ถูกเรียกใช้ภายในสคริปต์เพื่อเรียกใช้คำสั่งเป็นผู้ใช้ฮัดสัน:
su -c command hudson
นี่เป็นไวยากรณ์ที่ถูกต้องหรือไม่
คำตอบ:
ใช่. นี่คือ--help
:
$ su --help
Usage: su [options] [LOGIN]
Options:
-c, --command COMMAND pass COMMAND to the invoked shell
-h, --help display this help message and exit
-, -l, --login make the shell a login shell
-m, -p,
--preserve-environment do not reset environment variables, and
keep the same shell
-s, --shell SHELL use SHELL instead of the default in passwd
และการทดสอบบางอย่าง (ฉันใช้sudo
เพราะฉันไม่ทราบรหัสผ่านสำหรับnobody
บัญชี)
$ sudo su -c whoami nobody
[sudo] password for oli:
nobody
เมื่อคำสั่งของคุณใช้อาร์กิวเมนต์คุณต้องอ้างมัน หากคุณไม่ทำสิ่งแปลก ๆ จะเกิดขึ้น ฉันอยู่ที่นี่ - ในฐานะ root - พยายามสร้างไดเรกทอรีใน / home / oli (เหมือน oli) โดยไม่ต้องระบุคำสั่งทั้งหมด:
# su -c mkdir /home/oli/java oli
No passwd entry for user '/home/oli/java'
อ่านได้เพียงmkdir
ค่าของ-c
แฟล็กและพยายามใช้/home/oli/java
เป็นชื่อผู้ใช้ ถ้าเราพูดมันก็ใช้งานได้:
# su -c "mkdir /home/oli/java" oli
# stat /home/oli/java
File: ‘/home/oli/java’
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 811h/2065d Inode: 5817025 Links: 2
Access: (0775/drwxrwxr-x) Uid: ( 1000/ oli) Gid: ( 1000/ oli)
Access: 2016-02-16 10:49:15.467375905 +0000
Modify: 2016-02-16 10:49:15.467375905 +0000
Change: 2016-02-16 10:49:15.467375905 +0000
Birth: -
หมายเหตุ: "ฉันมีเจ้าของสคริปต์ตั้งค่าเป็นรูท" ไม่ได้ทำอะไรเลย แม้ว่าคุณจะมี setuid bit แต่ก็ยังใช้งานไม่ได้
สมมติว่าคุณกำลังเรียกใช้สคริปต์ในฐานะรูทอย่างไรก็ตามคุณสามารถใช้งานsudo
ได้ su
มีไว้สำหรับเปลี่ยนผู้ใช้เป็นหลักในขณะที่sudo
สำหรับการดำเนินการคำสั่งเป็นผู้ใช้อื่น การ-u
ตั้งค่าสถานะช่วยให้คุณระบุผู้ใช้ที่จะดำเนินการคำสั่งเป็น:
sudo -u hudson command
sudo
root is not in the sudoers file
ซึ่งทำให้su - <username> -c "command to run"
ตัวเลือกเท่านั้น
sudo -u kilgore mv this that
)
sudo cat /etc/passwd | grep user-abc
คุณสามารถเรียกใช้ หากคุณเห็นสิ่งนี้:user-abc:x:994:994::/home/user-abc:/bin/false
มันจะไม่ทำงาน นั่นเป็นเพราะส่วนสุดท้าย "/bin/false
" หมายความว่าไม่มีเปลือกสำหรับผู้ใช้รายนั้น