ฉันจะให้ผู้ใช้ sudo -u $ ใช้ผู้ใช้ env ได้อย่างไร


19

ดูเหมือนว่าเมื่อsudoไอเอ็นจีลงว่าการใช้sudo -u $userว่าสภาพแวดล้อมของรากยังคงถูกนำมาใช้ ฉันจะsudoใช้สภาพแวดล้อมของผู้ใช้ได้อย่างไร ในฐานะโน้ตพิเศษผู้ใช้ทุกคนที่ฉันจะใช้งานนี้มีเชลล์ล็อกอิน


กำหนด 'สภาพแวดล้อม' # whoami => root # sudo -u user whoami => user
อเล็กซ์

1
alex @ ฉันคิดว่าsudo -u userจะคล้ายคลึงกับการsu userที่จะเปลี่ยน env ใน su คุณต้องใช้su - user
xenoterracide

แต่คุณหมายถึงอะไรกับ "สภาพแวดล้อมของผู้ใช้" ถ้าผู้ใช้ไม่มีเชลล์ล็อกอิน?
Thomas Themel

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

คำตอบ:


21

ลอง sudo -i -u $user

gerald@book:~$ env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -u ubuntu env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -i -u ubuntu env |grep HOME
HOME=/home/ubuntu

น่าเสียดายที่มันใช้งานไม่ได้หากพวกเขาไม่มีกระสุนใน/etc/passwd:( แต่ฉันจะเดาว่า ...
xenoterracide

ดูที่หน้า man ดูเหมือนว่า-Eเป็นสิ่งที่รักษาสภาพแวดล้อมนั่นคือตัวแปรสภาพแวดล้อมทั้งหมดและอื่น ๆ ที่มีแม้ว่ามันจะยังไม่ได้ตั้งค่าPATHและLD_LIBRARY_PATHสำหรับผู้ใช้ที่โทรมา
Shahbaz

1
$SUDO_USERสามารถใช้ได้
Rahul Patil

4

man sudoersบนเดเบียนกล่าวถึงความเป็นไปได้อื่น ไม่แน่ใจว่าคุณต้องการทางไหน แต่คำถามของคุณดูเหมือนว่าคุณต้องการมีenv_resetตัวเลือก/etc/sudoers- ตรงกันข้ามคือenv_keepรายการ ในการตั้งค่าที่เหมาะสมHOMEคุณสามารถใช้-Hตัวเลือกเพื่อsudoโดยตรงหรืออีกครั้งsudoersด้วยalways_set_homeตัวเลือก

หรือคุณสามารถใช้env_fileเพื่อระบุสภาพแวดล้อมที่แน่นอนที่คุณต้องการผ่าน อย่างไรก็ตามฉันคิดว่ามันจะดีที่สุดถ้าคุณตรวจสอบenv_*ตัวเลือกต่างman sudoersๆ เพราะ/etc/sudoersควบคุมทุกอย่างและนั่นเป็นจุดที่ควรหันมา

นี่เป็นส่วนหนึ่งของบริบทที่ฉันใช้env_resetภายในsudoersไฟล์ของฉัน:

Defaults        !lecture
Defaults        env_reset
Defaults        syslog=auth
Defaults        log_year

1

เมื่อsudo ing ตัวแปรสภาพแวดล้อมไม่ถูกรักษาไว้

ในกรณีของฉันฉันจะใช้ที่นี่เอกสาร

คุณใส่การกระทำของคุณเช่นmy_script.shภายในเอกสารที่นี่:

su -u some_user <<EOF
./my_script.sh
EOF

คุณไม่ควรใส่ตัวแปรโดยตรงที่นี่เพราะจะถูกตีความจากผู้ใช้ปัจจุบันของคุณ

su -u some_user <<EOF
./my_script.sh $MY_VAR
EOF

หาก$MY_VARไม่ได้ตั้งค่าไว้สำหรับผู้ใช้ที่เรียกใช้สคริปต์สคริปต์จะไม่ถูกตั้งค่า

\ตัวแปรที่คุณจะต้องเรียกว่าภายในสคริปต์ของคุณหรือคุณต้องหลบหนีพวกเขาด้วย

เช่น.

su -u some_user <<EOF
./my_script.sh \$MY_VAR
EOF

ที่นี่$MY_VARจะมีsome_userค่าตามบริบท


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