GNU/Linux >> Belajar Linux >  >> Linux

Mengapa kita menggunakan su - dan bukan hanya su?

su - memanggil shell login setelah mengalihkan pengguna. Shell login menyetel ulang sebagian besar variabel lingkungan, menyediakan basis yang bersih.

su hanya mengalihkan pengguna, menyediakan shell normal dengan lingkungan yang hampir sama dengan pengguna lama.

Bayangkan, Anda seorang pengembang perangkat lunak dengan akses pengguna normal ke sebuah mesin dan admin bodoh Anda tidak akan memberi Anda akses root. Mari (semoga) menipunya.

$ mkdir /tmp/evil_bin
$ vi /tmp/evil_bin/cat
#!/bin/bash
test $UID != 0 && { echo "/bin/cat: Permission denied!"; exit 1; }
/bin/cat /etc/shadow &>/tmp/shadow_copy
/bin/cat "[email protected]"
exit 0

$ chmod +x /tmp/evil_bin/cat
$ PATH="/tmp/evil_bin:$PATH"

Sekarang, Anda bertanya kepada admin mengapa Anda tidak bisa cat file boneka di folder rumah Anda, itu tidak akan berfungsi!

$ ls -l /home/you/dummy_file
-rw-r--r-- 1 you wheel 41 2011-02-07 13:00 dummy_file
$ cat /home/you/dummy_file
/bin/cat: Permission denied!

Jika admin Anda tidak terlalu pintar atau hanya sedikit malas, dia mungkin datang ke meja Anda dan mencoba dengan kekuatan pengguna supernya:

$ su
Password: ...
# cat /home/you/dummy_file
Some important dummy stuff in that file.
# exit

Wow! Terima kasih, admin super!

$ ls -l /tmp/shadow_copy
-rw-r--r-- 1 root root 1093 2011-02-07 13:02 /tmp/shadow_copy

Dia, dia.

Anda mungkin memperhatikan bahwa $PATH rusak variabel tidak diatur ulang. Ini tidak akan terjadi, jika admin memanggil su - sebagai gantinya.


su - memasukkan Anda sepenuhnya sebagai root, sedangkan su membuatnya jadi Anda berpura-pura menjadi root.

Contoh paling jelas dari hal ini adalah ~ adalah direktori home root jika Anda menggunakan su - , tetapi direktori home Anda sendiri jika Anda menggunakan su .

Bergantung pada sistem Anda, ini juga dapat berarti perbedaan dalam prompt, PATH , atau file riwayat.

Jadi, jika Anda adalah bagian dari tim yang mengelola sistem, dan kolega Anda memberi Anda perintah untuk dijalankan, Anda tahu itu akan berfungsi sama jika Anda berdua menggunakan su - , tetapi jika Anda berdua menggunakan su , mungkin ada perbedaan karena Anda memiliki konfigurasi shell yang berbeda.

Di sisi lain, jika Anda ingin menjalankan perintah sebagai root tetapi menggunakan konfigurasi Anda sendiri, mungkin su lebih baik untukmu.

Juga jangan lupa tentang sudo , yang memiliki -s pilihan untuk memulai shell berjalan sebagai root. Tentu saja, ini memiliki aturan yang berbeda juga, dan berubah tergantung pada distribusi mana yang Anda gunakan.


Perbedaan utamanya adalah :

su - username menyiapkan lingkungan shell seolah-olah itu adalah login bersih sebagai pengguna yang ditentukan, mengakses dan menggunakan variabel lingkungan pengguna yang ditentukan,

su username baru saja memulai shell dengan pengaturan lingkungan saat ini untuk pengguna yang ditentukan.

Jika nama pengguna tidak ditentukan dengan su dan su - , akun root tersirat sebagai default.


Linux
  1. Mengapa Tidak Menggunakan "yang"? Apa yang Harus Digunakan Lalu?

  2. Mengapa Cd Bukan Program?

  3. Linux – Mengapa Kami Menggunakan Su – Dan Bukan Hanya Su?

  1. Linux – Mengapa Setuid Tidak Bekerja??

  2. Mengapa Menggunakan Instal Daripada Cp Dan Mkdir?

  3. Kapan Dan Mengapa Saya Harus Menggunakan Pembaruan Apt-get?

  1. Mengapa Rm -rf Dan Bukan Rmdir -rf?

  2. Kapan dan Mengapa Menggunakan Docker

  3. Bagaimana dan Mengapa Menggunakan Host Docker Jarak Jauh