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 के साथ भी, यदि आप एक शेल शुरू करने के बजाय एक कमांड चलाते हैं, तो एक लॉगिन शेल नहीं चलाया जाएगा ( ~/binSSH टेस्ट में अनुपस्थिति पर ध्यान दें , जो वर्तमान में है ) 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जड़ खोल पाने के भद्दे तरीके हैं। इन दोनों तरीकों से पर्यावरण प्रदूषित होता है।
सम्बंधित: