รับตัวแปรสภาพแวดล้อมของผู้ใช้รายอื่น [ปิด]


23

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

สำหรับผู้ใช้เองฉันใช้echo $PATHหรือset | grep PATH(หรือsetเมื่อฉันจำชื่อตัวแปรไม่ได้) คำแนะนำที่คล้ายกันสำหรับผู้ใช้รายอื่นคืออะไร

สำหรับสิ่งที่คุ้มค่าฉันอยู่ใน Ubuntu Server 13.04


4
ผู้ใช้ไม่มีตัวแปรสภาพแวดล้อมกระบวนการทำ เป็นเรื่องปกติสำหรับกระบวนการที่ดำเนินการโดยผู้ใช้รายหนึ่งซึ่งไม่ใช่ทุกคนที่มีสภาพแวดล้อมเดียวกัน คุณพยายามแก้ไขปัญหาอะไร
Gilles 'SO- หยุดความชั่วร้าย'

@Gilles เช่นฉันต้องการทราบว่าโฟลเดอร์ MAIL ที่ผู้ใช้มีอยู่ ฉันสามารถเข้าสู่ระบบในฐานะผู้ใช้รายนั้นได้echo $MAILแต่ฉันคิดว่าอาจมีทางลัด

3
ที่ยังไม่ได้กำหนดคำถามที่เป็นประโยชน์ (และตัวอย่างเช่นคำตอบที่คุณยอมรับอาจหรืออาจไม่ทำงานขึ้นอยู่กับปัจจัยหลายอย่าง) คุณกำลังมองหาตำแหน่งกล่องจดหมายเริ่มต้นหรือไม่ คุณกำลังมองหาตำแหน่งที่ผู้ใช้รับจดหมายท้องถิ่นของเขา (ซึ่งอาจแตกต่างกันและอาจไม่มีอยู่หากผู้ใช้มี.forward) ผู้ใช้มักจะตั้งค่าตัวแปรสองสามตัวใน.profileไฟล์การกำหนดค่าของพวกเขาหรืออื่น ๆ และไม่มีวิธีที่จะระบุตัวแปรทั้งหมดได้อย่างน่าเชื่อถือ คุณพยายามแก้ไขปัญหาอะไรอีก
Gilles 'หยุดความชั่วร้าย'

คำตอบ:


20

envอีกตัวเลือกหนึ่งคือการใช้งาน รันสิ่งนี้เป็นroot:

sudo -Hiu $user env | grep $var

ตัวอย่างเช่น

sudo -Hiu terdon env | grep HOME
HOME=/home/terdon

1
HOME=/rootเมื่อฉันเข้าสู่ระบบเป็นรากและดำเนินการคำสั่งนี้สำหรับชื่อผู้ใช้มาตรฐานของฉันฉันได้รับ นั่นเป็นไดเรกทอรีหลักของราก แต่ไม่ใช่ไดเรกทอรีบ้านมาตรฐานของฉัน หากคุณต้องการทราบสภาพแวดล้อมที่ผู้ใช้จะได้รับเมื่อเขาเข้าสู่ระบบคุณจะต้องเรียกใช้สคริปต์เริ่มต้นของล็อกอินเชลล์ของผู้ใช้นี้ (และจำไว้ว่าเชลล์ล็อกอินของเขาอาจแตกต่างจากล็อกอินเชลล์ของคุณ)
Uwe

@ เราใช้ระบบอะไร? มันใช้งานได้ดีสำหรับฉัน คุณหมายถึงคุณเข้าสู่ระบบในฐานะrootจากผู้จัดการเข้าสู่ระบบ? มันทำงานได้ดีถ้าผมลดลงไป TTY rootและเข้าสู่ระบบเป็น
terdon

ฉันอยู่ในเครื่องเดเบียน ฉันเข้าสู่ระบบเป็น Uwe, เปิด xterm วิ่งenv | grep HOMEและได้รับHOME=/home/uwe; ผมดำเนินการsuและจากนั้นอีกครั้งenv | grep HOMEและได้รับHOME=/rootแล้วผมทำงานและยังได้รับsudo -u uwe env | grep HOME HOME=/root
Uwe

@ เราแปลก ฉันยังอยู่ในเครื่อง Debian (LMDE) ฉันได้ทำกระบวนการแบบเดียวกันกับที่คุณอธิบาย (แม้จะใช้xtermแทนเทอร์มินัลปกติของฉัน) และรับผลลัพธ์ที่คาดหวัง
terdon

ตามคู่มือให้sudoตั้งค่าตัวแปร HOME เฉพาะเมื่อมี-Hตัวเลือกอยู่หรือหาก/etc/sudoersมีการตั้งค่ารายการที่สอดคล้องกันไว้ ดูเหมือนว่าไฟล์ sudoers ของเรานั้นแตกต่างกัน อย่างไรก็ตามมันเป็นความคิดที่ดีที่จะใช้-Hที่นี่และอาจเป็นไปได้เช่น-iกัน
Uwe

2

สำหรับผู้ใช้หนึ่งคนคุณสามารถทำสิ่งนี้ได้:

su - <username> -c '. ~/.profile; echo $PATH'

รายการ $ PATH ของผู้ใช้ทั้งหมด:

for user in $(cat /etc/passwd | awk -F: '{print $1}'); do
  su - $user -c '. ~/.profile; printf "%s\n" "$PATH"'
done

@Camil Staps

. ~/.profileจึงเป็นกลอุบายที่ฉันเรียนรู้จากบุคคลที่ฉันชอบ Peteris Krumins เขาอธิบายเคล็ดลับที่นี่ NON_INTERACTIVE_LOGIN_SHELLSบางทีรุ่นทุบตีต่อมาได้สร้างพร้อมกับตัวเลือก


ขอบคุณ! สำหรับ$PATHมันยังใช้งานได้โดยไม่มี. ~/.profile; ส่วน - มันมีไว้เพื่ออะไร?

@CamilStaps คุณหมายถึงอะไรโดย "ใช้งานได้" ใช่คุณได้รับความคุ้มค่า$PATHแม้จะไม่ได้รับการจัดหา~/.profileแต่ก็ไม่ใช่ค่าที่คุณต้องการ (= มูลค่าที่ผู้ใช้รายนี้จะเห็นเมื่อเข้าสู่ระบบ) แม้การจัดหาไม่น่าเชื่อถือได้อย่างเต็มที่เนื่องจากผู้ใช้อาจจะใช้เปลือกหอยที่มีแฟ้มเริ่มต้นจะแตกต่างจาก~/.profile ~/.profile
Uwe

@ เราได้ผลลัพธ์เดียวกันโดยไม่ต้องทำ แต่ฉันเดาว่ามันเป็นเรื่องบังเอิญ

คุณกำลังสมมติว่าผู้ใช้ไม่ได้ใช้ csh
เกล็นแจ็คแมน

@CamilStaps คำถามแรกคือผู้ใช้นั้นปรับเปลี่ยน PATH ในตัวเขา~/.profileได้หรือไม่ แต่ในกรณีใด ๆ พฤติกรรมของsudoสามารถกำหนดค่าค่อนข้างมากใน/etc/sudoers(ดูการสนทนาของฉันกับ terdon) ดังนั้นเมื่อระบบของเราทำงานแตกต่างกันอาจเกิดจากความแตกต่างในไฟล์การกำหนดค่า
Uwe

0

จาก root คุณสามารถsu -ใช้กับผู้ใช้แล้ว grep ตัวแปรสภาพแวดล้อมที่คุณต้องการดู:

su - <username> -c 'echo $PATH'


ด้วยเหตุผลบางอย่างสิ่งนี้ไม่ทำงานสำหรับฉันแม้ว่าคำสั่งจะถูกดำเนินการในฐานะผู้ใช้อื่น ฉันลงเอยด้วยการใช้ "env" ดังนั้น sth ก็runuser -l <username> -c "env | grep <var>" | cut -d '=' -f 2ใช้ได้ดีสำหรับฉัน sudoหากคุณไม่รากจำเป็นที่จะต้องสั่งคำนำหน้าด้วย
Andrei-Niculae Petre
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.