SSH เริ่มต้นเปลือกเข้าสู่ระบบ su
โดยค่าเริ่มต้นไม่ได้
โดยเฉพาะอย่างยิ่งซึ่งหมายความว่า~/.profile
(หรือไฟล์ที่คล้ายกัน) สำหรับผู้ใช้นั้นไม่ได้มีแหล่งที่มา ดังนั้นการเปลี่ยนแปลงที่ทำ~/.profile
จะไม่มีผล อาจเป็นกรณีที่:
- แม้ว่าคุณจะเริ่มเชลล์ล็อกอินการเปลี่ยนแปลงที่แตกต่างกันก็เกิดขึ้นในรู
~/.profile
ทซึ่งอาจส่งผลเสียต่อสภาพแวดล้อมของผู้ใช้
/etc/profile
และ/etc/profile.d/*
อาจใช้การตั้งค่าแตกต่างกันสำหรับผู้ใช้ที่แตกต่างกัน (ไม่ใช่โดยค่าเริ่มต้น)
- อาจมีการตั้งค่าที่แตกต่างกันสำหรับผู้ใช้ที่ต่างกันในการกำหนดค่า SSH
การกำหนดค่า PAM นั้นแตกต่างกัน ตัวอย่างเช่น/etc/pam.d/ssh
มี:
session required pam_env.so user_readenv=1 envfile=/etc/default/locale
ในขณะที่/etc/pam.d/su
มี:
session required pam_env.so readenv=1 envfile=/etc/default/locale
นี่หมายความว่าโหลด SSH ~/.pam_environment
แต่su
ไม่ได้ นี่เป็นเรื่องใหญ่เนื่องจาก~/.pam_environment
เป็นตำแหน่งที่ไม่ขึ้นกับเชลล์สำหรับตัวแปรสภาพแวดล้อมและจะถูกนำไปใช้หากคุณเข้าสู่ระบบจาก GUI, TTY หรือ SSH
ในการเริ่มต้นเชลล์ล็อกอินให้รันหนึ่งใน:
su - <username>
sudo -iu <username>
ตัวอย่าง:
# su muru -c 'sh -c "echo $HOME $PATH"'
/home/muru /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
# su - muru -c 'sh -c "echo $HOME $PATH"'
/home/muru /home/muru/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
# sudo -iu muru sh -c 'echo $HOME $PATH'
/home/muru /home/muru/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# sudo -u muru sh -c 'echo $HOME $PATH'
/root /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# ssh muru@localhost 'echo $HOME $PATH'
/home/muru /home/muru/devel/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
แม้ว่าจะมี SSH ถ้าคุณเรียกใช้คำสั่งแทนที่จะเริ่มเชลล์เชลล์ล็อกอินจะไม่สามารถรันได้ (โปรดสังเกตว่าไม่มี~/bin
การทดสอบ SSH ซึ่งมีอยู่ในsu -
และsudo -i
) เพื่อให้ได้ผลลัพธ์ที่แท้จริงฉันจะเรียกใช้เปลือกของฉันเป็นเปลือกเข้าสู่ระบบ:
# ssh muru@localhost '$SHELL -ilc "echo \$HOME \$PATH"'
/home/muru /home/muru/bin:/home/muru/devel/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
นี่เป็นสาเหตุsudo su
และsudo -s
เป็นวิธีเส็งเคร็งในการรับรูทเชลล์ ทั้งสองวิธีนี้มีมลภาวะต่อสิ่งแวดล้อม
ที่เกี่ยวข้อง: