รันเชลล์สคริปต์ในฐานะผู้ใช้อื่นที่ไม่มีรหัสผ่าน


245

ฉันต้องการเรียกใช้สคริปต์จากเชลล์ ubuntu หลักในฐานะผู้ใช้อื่นที่ไม่มีรหัสผ่าน

ฉันมีสิทธิ์แบบเต็ม sudo ดังนั้นฉันจึงลองทำสิ่งนี้:

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

จากนั้นฉันต้องป้อนรหัสผ่านของฉัน แต่ฉันไม่แน่ใจว่าสคริปต์นั้นทำงานภายใต้ผู้ใช้รายนั้นหรือไม่

ฉันจะยืนยันได้อย่างไรว่าสคริปต์กำลังทำงานภายใต้ผู้ใช้รายนั้นในตอนนี้?

คำตอบ:


354

คุณสามารถทำได้ด้วยsuหรือsudoไม่จำเป็นต้องใช้ทั้งสองอย่าง

sudo -H -u otheruser bash -c 'echo "I am $USER, with uid $UID"' 

ส่วนที่เกี่ยวข้องของman sudo:

-H   The -H (HOME) option requests that the security policy set
     the HOME environment variable to the home directory of the
     target user (root by default) as specified by the password
     database.  Depending on the policy, this may be the default
     behavior.
-u user     The -u (user) option causes sudo to run the specified
      command as a user other than root.  To specify a uid
      instead of a user name, use #uid.  When running commands as
      a uid, many shells require that the '#' be escaped with a
      backslash ('\').  Security policies may restrict uids to
      those listed in the password database.  The sudoers policy
      allows uids that are not in the password database as long
      as the targetpw option is not set.  Other security policies
      may not support this.

suสามารถสลับผู้ใช้ได้โดยไม่ต้องระบุรหัสผ่านหากคุณเป็นรูท ดูคำตอบของ Caleb

คุณสามารถแก้ไข/etc/pam.d/suไฟล์เพื่ออนุญาตsuโดยไม่ต้องใช้รหัสผ่าน ดูคำตอบนี้

หากคุณปรับเปลี่ยนไฟล์รับรองความถูกต้องของคุณต่อไปนี้ผู้ใช้ใด ๆ ที่เป็นส่วนหนึ่งของกลุ่มsomegroupสามารถsuทำได้ในotheruserโดยไม่ต้องใช้รหัสผ่าน

auth       sufficient pam_rootok.so
auth       [success=ignore default=1] pam_succeed_if.so user = otheruser
auth       sufficient   pam_succeed_if.so use_uid user ingroup somegroup

จากนั้นทดสอบจากเทอร์มินัล

rubo77@local$ su otheruser -c 'echo "hello from $USER"'
hello from otheruser

4
คุณช่วยเพิ่มวิธีการด้วยsuด้วยได้ไหม
rubo77

2
สิ่งนี้ถามรหัสผ่าน :-(
IanVaughan

1
@IanVaughan ด้วยการกำหนดค่าเริ่มต้น (ของ sudo) คุณจะได้รับรหัสผ่านเว้นแต่คุณจะเรียกใช้เป็นรูท คุณสามารถกำหนดค่า sudo เป็น "อนุญาตให้ผู้ใช้ A เรียกใช้ cmd C ในฐานะผู้ใช้ B โดยไม่ต้องใช้รหัสผ่าน" ดูhelp.ubuntu.com/community/Sudoers
geirha

1
ฉันได้รับพร้อมท์ให้ใส่รหัสผ่านเมื่อใช้งานเป็นรูท ข้อเสนอแนะใด ๆ
เนท

1
@NamGVU โปรดจำไว้ว่าคำสั่งซื้อมีความสำคัญ หาก sudoers ของคุณมีกฏเพิ่มเติมที่กำหนดสิทธิ์อื่น ๆ สำหรับผู้ใช้ของคุณหรือกลุ่มที่คุณเป็นสมาชิกอยู่นั่นจะแทนที่กฎ NOPASSWD ของคุณ
geirha

100

หากคุณต้องการใช้ su แทน sudo ฉันเชื่อว่าคุณสามารถใช้สิ่งนี้:

su - <username> -c "<commands>"
  • - จะจำลองการเข้าสู่ระบบของผู้ใช้ที่ระบุ
  • -c บอกว่าคุณต้องการรันคำสั่ง

PS น่าเสียดายที่ฉันไม่สามารถติดตั้งทับทิมโดยใช้ rvm ด้วยวิธีนี้ได้ แต่อาจไม่เกี่ยวข้องกัน


5
ฉันต้องการเพิ่มsudoไปยังจุดเริ่มต้นไม่เช่นนั้นจะขอรหัสผ่านของฉัน
IanVaughan

2
sudoนี้แน่นอนไม่ทำงานโดยไม่ต้อง ด้วย sudo ก็ใช้งานได้ตัวอย่างเช่นsudo su - www-data -c "touch /tmp/test"สร้างไฟล์เป็น www-data สำเร็จแล้ว
rubo77

ในการใช้ "su" คุณต้องใช้รหัสผ่านรูทจุด "sudo" คือการหลีกเลี่ยง หากคุณมีรหัสผ่านรูทโดยใช้ "su" ดังที่กล่าวไว้ข้างต้นควรใช้งานได้
ซามูเอลÅslund

6

คำตอบข้างต้นมีประโยชน์กับฉันจริงๆ แต่เพื่อตอบคำถามจริง ...

ฉันจะยืนยันได้อย่างไรว่าสคริปต์กำลังทำงานภายใต้ผู้ใช้นั้นในตอนนี้? -

ใช้:

ps -ef | grep <command-name>

ผลลัพธ์ควรมีสคริปต์ของคุณและผู้ใช้จริงดำเนินการ ผู้คนในระบบที่คล้าย BSD เช่น MAC สามารถค้นหาข้อมูลที่คล้ายกันได้ด้วย:

ps aux | grep <command-name>

ผู้ใช้ Linux สามารถใช้ ps aux
Dean Howell

@DeanHowell; จริง แต่ผู้ใช้ MAC ไม่สามารถใช้ "ps -ef" และ "ps aux" เป็นตัวเลือก BSD ใช้ได้เฉพาะเป็นคุณสมบัติที่เข้ากันได้ในขณะที่ "ps -ef" เป็นตัวเลือก Unix / POSIX มาตรฐาน
ซามูเอลÅslund

2

ฉันมีปัญหาเดียวกัน. เพียงพิมพ์คำสั่งscreen -dmS testscreenนี้จะสร้างหน้าจอเดี่ยวในบัญชีผู้ใช้ที่ไม่ใช่ sudo ของคุณและจากนั้นคุณสามารถเข้าสู่ระบบและตรวจสอบว่ามีหน้าจอนี้screen -lsหรือไม่

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