Apa perbedaan antara perintah berikut:
su
sudo -s
sudo -i
sudo bash
Saya tahu su
saya perlu tahu kata sandi root, dan karena sudo
saya harus ada di sudoers
file, tetapi sekali dieksekusi apa bedanya?
Saya tahu ada perbedaan antara su
dan sudo -s
karena direktori home saya adalah /root
setelah saya jalankan su
, tetapi direktori home saya tetap /home/myname
setelah sudo -s
. Tapi saya curiga ini hanyalah gejala dari perbedaan mendasar yang saya lewatkan.
sudo su -
cara ini Anda tidak perlu kata sandi root, dan-
memastikan direktori home diatur dengan benar.Jawaban:
Dengan
su
, Anda menjadi pengguna lain - root secara default, tetapi berpotensi menjadi pengguna lain. Jika Anda berkatasu -
, lingkungan Anda akan diganti dengan lingkungan login pengguna itu juga, sehingga apa yang Anda lihat tidak dapat dibedakan dengan masuk sebagai pengguna itu. Tidak ada cara sistem dapat mengatakan apa yang Anda lakukan sementarasu
ke pengguna lain dari tindakan oleh pengguna itu ketika mereka login.Hal-hal yang sangat berbeda dengan
sudo
:Perintah yang Anda jalankan
sudo
dijalankan sebagai target pengguna - root secara default, tetapi dapat diubah dengan-u
- tetapi mencatat perintah yang Anda jalankan melaluinya, menandai mereka dengan nama pengguna Anda sehingga kesalahan dapat diberikan sesudahnya. :)sudo
sangat fleksibel. Anda dapat membatasi perintah yang diberikan pengguna atau grup pengguna untuk dijalankan, misalnya. Dengansu
, semuanya atau tidak sama sekali.Fitur ini biasanya digunakan untuk mendefinisikan peran. Misalnya, Anda dapat mendefinisikan grup "cadangan" yang diizinkan untuk dijalankan
dump
dantar
, masing-masing memerlukan akses root untuk mencadangkan disk sistem dengan benar.Saya menyebutkan ini di sini karena itu berarti Anda dapat memberi seseorang
sudo
hak istimewa tanpa memberi merekasudo -s
atausudo bash
kemampuan. Mereka hanya memiliki izin yang mereka butuhkan untuk melakukan pekerjaan mereka, sedangkan dengansu
mereka telah menjalankan seluruh sistem. Anda harus berhati-hati dengan ini: jika Anda memberi seseorang kemampuan untuk mengatakansudo vi
, misalnya, mereka dapat keluarvi
dan secara efektif memiliki kekuatan yang sama dengansudo -s
.Karena mengambil kata sandi sudoer dan bukannya kata sandi root,
sudo
mengisolasi izin antara banyak sudoer.Ini menyelesaikan masalah administrasi dengan
su
, yaitu ketika kata sandi root berubah, semua orang yang harus mengetahuinyasu
harus diberitahu.sudo
memungkinkan kata sandi sudoers berubah secara mandiri. Faktanya, adalah umum untuk mengunci kata sandi akun pengguna root pada suatu sistem dengansudo
memaksa semua tugas sysadmin dilakukansudo
. Dalam sebuah organisasi besar dengan banyak sudoer tepercaya, ini berarti ketika salah satu sysadmin pergi, Anda tidak perlu mengubah kata sandi root dan mendistribusikannya ke admin yang masih ada.Perbedaan utama antara
sudo bash
dansudo -s
adalah-s
lebih pendek dan memungkinkan Anda memberikan perintah untuk dieksekusi di shell default pengguna Anda dalam beberapa cara:Anda bisa mengatakan
sudo -s some-command
yang berjalan disome-command
bawah shell Anda. Ini pada dasarnya singkatansudo $SHELL -c some-command
.Sebagai gantinya, Anda dapat meneruskan perintah ke input standar shell
sudo -s < my-shell-script
. Anda bisa menggunakan ini dengan heredoc untuk mengirim beberapa perintah ke satusudo
panggilan, menghindari keharusan mengetiksudo
berulang kali.Kedua perilaku tersebut bersifat opsional. Jauh lebih umum, Anda memberi
-s
sendiri, jadi itu hanya menjalankan shell pengguna Anda secara interaktif. Dalam mode itu, ini berbeda darisudo bash
yang mungkin menjalankan shell yang berbeda daribash
, karena terlihat pertama diSHELL
variabel lingkungan, dan kemudian jika itu tidak disetel, pada pengaturan shell login pengguna Anda, biasanya di/etc/passwd
.Shell dijalankan dengan
sudo -s
mewarisi lingkungan pengguna Anda saat ini. Jika yang Anda inginkan sebenarnya adalah lingkungan yang bersih, seperti yang Anda dapatkan setelah masuk, yang Anda inginkan adalahsudo -i
penambahan yang relatif barusudo
. Secara kasar,sudo -i
adalah untuksudo -s
sebagaisu -
adalah untuksu
: itu me-reset semua tetapi variabel lingkungan kunci dan menyuruhmu kembali ke direktori home pengguna Anda. Jika Anda juga tidak memberikan perintah untuk dijalankan di bawah shell itu melalui input standar atausudo -i some-command
, itu akan menjalankan shell itu sebagai shell login interaktif, sehingga skrip startup shell pengguna Anda (mis..bash_profile
) Dijalankan kembali.Semua ini membuat
sudo -i
jauh lebih aman daripadasudo -s
. Mengapa? Karena jika seseorang dapat memodifikasi lingkungan Anda sebelumnyasudo -s
, itu dapat menyebabkan perintah yang tidak diinginkan dijalankan. Kasus yang paling jelas adalah modifikasiSHELL
, tetapi juga bisa terjadi secara kurang langsung, seperti melaluiPAGER
jika Anda mengatakannya diman foo
bawahsudo -s
.Anda mungkin berkata, "Jika mereka dapat memodifikasi
PAGER
, mereka dapat memodifikasiPATH
, dan kemudian mereka bisa menggantisudo
program jahat ," tetapi seseorang yang cukup paranoid dapat mengatakan/usr/bin/sudo /bin/bash
untuk menghindari jebakan itu. Anda mungkin tidak begitu paranoid sehingga Anda juga menghindari jebakan dalam semua variabel lingkungan rentan lainnya . Apakah Anda juga ingat untuk memeriksaEDITOR
, misalnya, sebelum menjalankan perintah VCS ? Demikianlahsudo -i
.Karena
sudo -i
juga mengubah direktori kerja Anda menjadi direktori home pengguna Anda, Anda mungkin masih ingin menggunakannyasudo -s
untuk situasi-situasi di mana Anda tahu Anda ingin tetap berada di direktori yang sama dengancd
ketika Anda berlarisudo
. Ini masih aman untuksudo -i
dancd
kembali ke tempat Anda, meskipun.sumber
vi
, ketik:sh
dan tekan Enter. Sekarang Anda berada di sub-shell, dengan semua hak istimewa darivi
proses yang menelurkan shell itu. Jikavi
berjalan dengan hak akses root, begitu juga shell. Atau, Anda dapat menjalankan sesuatu selain dari shell via:!cmd
, membaca output dari perintah ke dalam edit buffer via:r !cmd
, dll. Jika semua itu dikunci,Makefile
target adalah skrip shell, dan Vim memiliki:make
perintah, yang secara efektif memungkinkan Anda menjalankan shell sewenang-wenang skrip dari dalam editor. Kemungkinan untuk kerusakan terlalu besar untuk ditangguhkan oleh kotak komentar ini./usr/bin/sudo
PATH
itu bukan satu-satunya masalah.Dari pos ubuntuforums yang saya buat beberapa waktu lalu:
Pertimbangkan eksperimen berikut:
Inilah perbedaan yang saya temukan:
Dengan
sudo -s
:Dengan
sudo su
:Perhatikan perbedaannya
$HOME
. Menjadi root dan$HOME
mengatur ke rumah pengguna biasa dapat menyebabkan masalah. Misalnya, jika Anda menjalankan aplikasi grafis, pengguna normal~/.Xauthority
dapat ditimpa oleh root. Ini menyebabkan masalah pengguna normal di kemudian hari seperti tidak dapat menjalankan aplikasi grafis tertentu melalui cron.Untuk meringkas:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
mungkin ditetapkan oleh/etc/environment
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Intinya adalah
sudo -i
perintah yang tepat untuk dijalankan ketika Anda menginginkan shell root yang tidak ternodai oleh lingkungan pengguna.sumber
sudo
(dalam/etc/sudoers
dan file terkait) juga. Pengaturan konfigurasi sepertialways_set_home
,env_reset
,env_keep
,env_check
danenv_reset
, dan ini dapat bervariasi tergantung pada pengguna dan perintah. Lihat bagian 'Lingkungan perintah' dan PILIHAN SUDOERS dari halaman sudoers (5) .sudo -Hs
ketika saya ingin lingkungan yang tidak ternoda oleh pengaturan saya, karena saya menggunakan zsh dan semua akun aplikasi yang mungkin saya ubah untuk menggunakan bash. Ini membiarkan sejumlah variabel lingkungan lewat tanpa gangguan, tetapi saya biasanya menemukan variabel yang penting ditimpa oleh /etc/profile.d/*.su
( s witch u ser atau s ubstitute u ser) memungkinkan Anda beralih pengguna.su
pada dasarnya memulai contoh shell lain dengan hak istimewa dari pengguna yang dituju. Secara default itu mengalihkan Anda keroot
pengguna, jika kami ingin beralih pengguna tertentu kami harus melewati pengguna sebagai berikut:su -
berarti variabel lingkungan akan diatur ulang ke root dansu
berarti variabel lingkungan sebagai pengguna lama.misalnya: direktori home root jika Anda menggunakan
su -
atau direktori home pengguna lama jika Anda menggunakannyasu
.sudo ( s uper u ser jangan ) adalah utilitas baris perintah yang memungkinkan pengguna untuk menjalankan program dengan hak keamanan pengguna lain, secara default adalah superuser yaitu
root
. Ini menggunakan file config/etc/sudoers
yang mencantumkan pengguna mana yang memiliki hak untuk tindakan tertentusudo harus dibaca sebagai / ˈsuːduː / . sintaks
sudo command
yaitu s penyihir u ser dan melakukan perintah ini.su
setara dengansudo -i
dan mensimulasikan login ke akun root. Direktori kerja Anda akan/root
, dan itu akan membaca root.profile
dll. Prompt akan berubah dari $ ke #, menunjukkan Anda memiliki akses root.sudo -s
meluncurkan shell sebagai root, tetapi tidak mengubah direktori kerja Anda.sudo bash
di manabash
perintah untuk dijalankansudo
. Perintah ini berjalanbash
sebagai pengguna super.sudo
dapat mencatat semua yang dilakukan seseorang.sudo
mencegah pengguna harus mengetahui kata sandi root.sudo
kita dapat membatasi perintah yang diizinkan untuk dijalankan.sumber