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
जड़ खोल पाने के भद्दे तरीके हैं। इन दोनों तरीकों से पर्यावरण प्रदूषित होता है।
सम्बंधित: