ฉันจะได้รับสภาพแวดล้อมแบบใดด้วย sudo


15

เมื่อฉันเรียกใช้ sudo จะเกิดอะไรขึ้นกับสภาพแวดล้อมของฉัน

เมื่อฉันวิ่งsudo commandมันดูเหมือนจะไม่เห็นสภาพแวดล้อมของฉันหรือรูท ตัวอย่างเช่นพา ธ ของฉันสำหรับทั้งสองรวมถึง/usr/local/binแต่ถ้าฉันพยายามเรียกใช้หนึ่งในโปรแกรมที่ไม่มีพา ธ เต็มเส้นทางจะล้มเหลว

ฉันคิดว่า sudo วิ่งตามรูทและด้วยเหตุนี้จึงมีสภาพแวดล้อมของรูท มีวิธีอื่นที่ทุบตีดำเนินการภายใต้ sudo กว่าภายใต้ root หรือผู้ใช้ปกติของฉันได้อย่างไร

แก้ไข:

ฉันได้ใช้sudo -iเร็ว ๆ นี้ แต่เมื่อเร็ว ๆ /rootนี้จะได้รับการก่อให้เกิดปัญหาเพราะไดเรกทอรีที่ทำงานปัจจุบันของฉันได้รับการตั้งค่าให้ นี้เป็นตามที่คาดไว้ (sorta) แต่ผมก็ยังไม่เข้าใจว่าทำไม sudo ไม่ได้ตระหนักถึง executables /usr/local/binของฉันใน

แก้ไข:

ฉันกำลังใช้งาน Fedora 15


คุณใช้ระบบปฏิบัติการใด (หาก Linux เป็นตัวกระจาย) มีหลายวิธีในการกำหนดค่าPATHและบางครั้งก็ไม่ใช่เรื่องง่ายที่จะพบว่าใครเป็นคนแทนที่มันเป็นครั้งสุดท้าย อาจเป็นการตั้งค่าระบบบางอย่าง (เช่นใน PAM), sudo เองหรือสคริปต์โปรไฟล์ที่ตามมา
Gilles 'หยุดความชั่วร้าย'

@ Gilles- จุดดี ฉันเพิ่มระบบปฏิบัติการของฉัน ฉันสังเกตเห็นเพียงสิ่งนี้ใน Fedora (ฉันเคยใช้ Ubuntu) แต่ฉันคิดว่าเป็นเพราะพวกเขาไม่ได้เพิ่มความสะดวกในการติดตั้ง
beatgammit

คำตอบ:


6

ผมไม่ทราบว่าเกี่ยวกับการเริ่มต้นเกี่ยวกับ Fedora แต่ใน Debian sudoค่าเริ่มต้นโดยใช้ตัวเลือกที่มีค่าเริ่มต้นของsecure_path/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

ซึ่งหมายความว่าเส้นทางที่มีการเปลี่ยนแปลงค่าที่ทุกเวลาที่คุณใช้sudo; แต่เมื่อคุณใช้sudo -iพา ธ จะถูกเปลี่ยนหลังจากนั้นโดยไฟล์ RC ของผู้ใช้รูท


ฉันไม่รู้เกี่ยวกับsecure_pathตัวเลือก ค่าเริ่มต้นไม่รวม/usr/local/binอยู่ในการติดตั้งของฉัน ขอบคุณสิ่งนี้ช่วยให้ชัดเจนขึ้นจริง ๆ !
beatgammit

4

คุณสามารถตรวจสอบสิ่งนี้ได้ง่ายๆด้วยสิ่งต่าง ๆ เช่น

เปรียบเทียบผลลัพธ์จาก

sudo env 
env

และสิ่งที่ชอบ

sudo whoami 
whoami

ด้วยวิธีนี้คุณสามารถลองค้นหาสิ่งที่ขาดหายไปในการตั้งค่าของคุณ


เจ๋งไม่รู้เรื่องเลย อย่างไรก็ตาม/usr/local/binมันไม่ได้อยู่ใน sudo env ของฉัน แต่มันอยู่ใน root env และ user env ของฉัน ทำไมนี้
beatgammit

sudo whoami กลับrootมาเหมือนที่คาดไว้ สิ่งที่อาจทำให้ sudo env ของฉันแตกต่างจาก env รากของฉัน
beatgammit

ไม่ทราบ แต่ต้องมีการตั้งค่าบางอย่างที่ขาดหายไปบางแห่งโดยปกติแล้ว / usr / local / bin จะรวมอยู่ด้วย บางทีคุณอาจล้าง $ PATH env โดยไม่ตั้งใจในการตั้งค่าบางอย่าง?
Johan

sudo source /root/.bashrc หรือไม่ นั่นคือสิ่งที่ฉันเพิ่ม/usr/local/binไปยังเส้นทางของ root (ฉันต้องทำด้วยตนเองโชคไม่ดี)?
beatgammit

ฉันคิดว่าคุณควรแก้ไข shell global ของคุณและดูว่าเกิดอะไรขึ้น หากคุณกำลังทุบตีมันคงจะเป็นอะไรที่เหมือน /etc/bash.bashrc
Johan

2

sudo -iคำสั่งจำลองเข้าสู่ระบบครั้งแรก ในระบบ Debian ของฉันมันก็ระบุว่า:

ซึ่งหมายความว่าไฟล์ทรัพยากรเฉพาะการเข้าสู่ระบบเช่น. profile หรือ .login จะอ่านโดยเชลล์ หากระบุคำสั่งคำสั่งจะถูกส่งไปยังเชลล์เพื่อดำเนินการ มิฉะนั้นเชลล์แบบโต้ตอบจะถูกดำเนินการ sudo พยายามเปลี่ยนเป็นโฮมไดเร็กทอรีของผู้ใช้นั้นก่อนรันเชลล์ นอกจากนี้ยังเริ่มต้นสภาพแวดล้อมโดยไม่เปลี่ยนแปลง DISPLAY และ TERM ตั้งค่า HOME, MAIL, SHELL, USER, LOGNAME และ PATH รวมถึงเนื้อหาของ / etc / environment บนระบบ Linux และ AIX ตัวแปรสภาพแวดล้อมอื่น ๆ ทั้งหมดจะถูกลบออก


0

คุณสามารถปรับsudo's env_keepพารามิเตอร์ที่จะรวมถึงPATHแม้ว่าคุณควรเก็บไว้ในใจผลกระทบความปลอดภัยของการทำว่า

visudo

... จะเปิดตัวของคุณ$EDITORจากนั้นคุณสามารถเปลี่ยนแปลงได้Defaults env_keep = ... ตามความเหมาะสม

นอกจากนี้คุณยังสามารถเพิ่ม / usr / local / bin ไปยังเส้นทางของระบบได้โดยการเพิ่มไฟล์เข้าไป /etc/profile.dไปยังเส้นทางของระบบโดยการเพิ่มไฟล์ไปยัง

เช่น:

cat <<EOF > /etc/profile.d/tjameson.sh
export PATH=$PATH:/usr/local/bin
EOF

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