Apa perbedaan antara login sebagai pengguna dan mengubah pengguna menggunakan su melalui root?


17

Ketika Anda memiliki server, Anda dapat mengaksesnya, misalnya, ssh user1@ipdan Anda juga dapat melakukannya ssh root@ipuntuk pergi ke pengguna root Anda dengan su priveleges dan kemudian pergi ke su user1. Dalam pemikiran saya, kedua cara itu harus menuntun saya ke lingkungan pengguna yang sama (dalam hal ini, "user1"), tetapi dalam pengalaman saya yang sebenarnya tidak, karena ssh user1@ipada hal-hal yang diinstal yang su user1tidak ada.

Mengapa demikian?

Jawaban:


15

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 ~/.profiletidak akan berpengaruh. Mungkin juga terjadi bahwa:

  • bahkan jika Anda memulai shell login, perubahan berbeda dibuat di root ~/.profile, yang mungkin mencemari lingkungan pengguna.
    • /etc/profiledan /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/sshmemiliki:

    session    required     pam_env.so user_readenv=1 envfile=/etc/default/locale
    

    sedangkan /etc/pam.d/sumemiliki:

    session       required   pam_env.so readenv=1 envfile=/etc/default/locale
    

    Ini berarti SSH memuat ~/.pam_environment, tetapi sutidak. Ini adalah yang besar, karena ~/.pam_environmentmerupakan 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 ~/bintes 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 sudan sudo -smerupakan cara jelek untuk mendapatkan shell root. Kedua cara ini tercemar oleh lingkungan.


Terkait:


2
Sepertinya saya harus bangun sebelum mengambil pertanyaan :) jawaban Anda bagus dan saya ketinggalan untuk menargetkan jawaban yang tepat. Dilakukan dengan baik +1
Videonauth

-1

Pada umumnya itu terutama perbedaan strategis.

Jika Anda masuk sebagai pengguna super, Anda dapat mengubah apa saja sepanjang waktu ... yaitu - tidak ada perlindungan terhadap kesalahan bencana, Anda harus mengubah sementara waktu untuk beberapa pengguna lain agar aman.

Sedangkan: jika Anda masuk dengan hak istimewa terbatas, Anda terhindar dari risiko kesalahan besar, karena Anda harus dengan sengaja beralih ke su root untuk akses sementara ke kekuatan itu, tetapi sekarang Anda memiliki posisi cadangan default untuk pengguna yang aman. .

Karena itu perbedaannya sangat strategis, bukan teknis.


Pertanyaannya sebenarnya bukan perbedaan pengguna root dari pengguna lain. Itu adalah perbedaan antara mengakses pengguna server secara langsung melalui ssh dan mengaksesnya melalui su yang sudah ada di dalam pengguna root. Bagaimanapun, saya setuju dengan apa yang Anda katakan terlalu haha ​​terima kasih
Miguel Corti

Ah ok, maaf ... Saya sebenarnya bertanya-tanya mengapa semua orang membahas detail teknis, saya kira saya salah membaca niat Anda.
Mr.President
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.