SSH memulai shell login. su
, secara default tidak.
Secara khusus, ini berarti bahwa ~/.profile
(atau file serupa) untuk pengguna itu tidak bersumber. Jadi perubahan yang dilakukan ~/.profile
tidak akan berpengaruh. Mungkin juga terjadi bahwa:
- bahkan jika Anda memulai shell login, perubahan berbeda dibuat di root
~/.profile
, yang mungkin mencemari lingkungan pengguna.
/etc/profile
dan /etc/profile.d/*
dapat menerapkan pengaturan secara berbeda untuk pengguna yang berbeda (meskipun tidak secara default)
- mungkin ada pengaturan yang berbeda untuk pengguna yang berbeda dalam konfigurasi SSH.
Konfigurasi PAM berbeda. Misalnya, /etc/pam.d/ssh
memiliki:
session required pam_env.so user_readenv=1 envfile=/etc/default/locale
sedangkan /etc/pam.d/su
memiliki:
session required pam_env.so readenv=1 envfile=/etc/default/locale
Ini berarti SSH memuat ~/.pam_environment
, tetapi su
tidak. Ini adalah yang besar, karena ~/.pam_environment
merupakan tempat yang tidak tergantung shell untuk variabel lingkungan, dan ini diterapkan jika Anda masuk dari GUI, TTY atau SSH.
Untuk memulai shell login, jalankan salah satu dari:
su - <username>
sudo -iu <username>
Contoh:
# 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
Bahkan dengan SSH, jika Anda menjalankan perintah alih-alih memulai shell, shell login tidak akan berjalan (perhatikan tidak adanya ~/bin
tes SSH, yang ada di su -
dan sudo -i
). Untuk mendapatkan hasil yang benar, saya akan menjalankan shell saya sebagai shell login:
# 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
Ini juga mengapa sudo su
dan sudo -s
merupakan cara jelek untuk mendapatkan shell root. Kedua cara ini tercemar oleh lingkungan.
Terkait: