Untuk meluncurkan shell root pada mesin di mana akun root dinonaktifkan, Anda dapat menjalankan salah satu dari:
sudo -i
:menjalankan shell login interaktif (membaca/root/.bashrc
dan/root/.profile
)sudo -s
:jalankan shell interaktif non-login (baca/root/.bashrc
)
Di dunia Ubuntu, saya sangat sering melihat sudo su
disarankan sebagai cara untuk mendapatkan shell root. Mengapa menjalankan dua perintah terpisah ketika satu akan melakukannya? Sejauh yang saya tahu, sudo -i
setara dengan sudo su -
dan sudo -s
sama dengan sudo su
.
Satu-satunya perbedaan tampaknya (membandingkan sudo -i
di sebelah kiri dan sudo su -
di sebelah kanan):
Dan membandingkan sudo -s
(kiri) dan sudo su
(kanan):
Perbedaan utama (mengabaikan SUDO_foo
variabel dan LS_COLORS
) tampaknya adalah XDG_foo
variabel sistem di sudo su
versi.
Apakah ada kasus di mana perbedaan itu memerlukan penggunaan sudo su
. yang agak tidak elegan? ? Bisakah saya memberi tahu orang-orang (seperti yang sering saya lakukan) dengan aman bahwa tidak ada gunanya menjalankan sudo su
atau saya melewatkan sesuatu?
Jawaban yang Diterima:
Seperti yang Anda nyatakan dalam pertanyaan Anda, perbedaan utama adalah lingkungan.
sudo su -
vs. sudo -i
Dalam kasus sudo su -
ini adalah shell login, jadi /etc/profile
, .profile
dan .bashrc
dijalankan dan Anda akan menemukan diri Anda di direktori home root dengan lingkungan root.
sudo -i
hampir sama dengan sudo su -
-i
(simulasikan login awal) opsi menjalankan shell yang ditentukan oleh entri basis data kata sandi pengguna target sebagai shell login. Ini berarti bahwa file sumber daya khusus login seperti .profile
, .bashrc
atau .login
akan dibaca dan dieksekusi oleh shell.
sudo su
vs. sudo -s
sudo su
memanggil sudo
dengan perintah su
. Bash disebut sebagai shell non-login interaktif. Jadi bash
hanya mengeksekusi .bashrc
. Anda dapat melihat bahwa setelah beralih ke root Anda masih berada di direktori yang sama:
[email protected]:~$ sudo su
[email protected]:/home/user#
sudo -s
membaca $SHELL
variabel dan mengeksekusi konten. Jika $SHELL
berisi /bin/bash
itu memanggil sudo /bin/bash
, yang artinya /bin/bash
dimulai sebagai shell non-login, jadi semua file titik tidak dieksekusi, tetapi bash
itu sendiri membaca .bashrc
dari pengguna yang menelepon. Lingkungan Anda tetap sama. Rumah Anda tidak akan menjadi rumah root. Jadi Anda adalah root, tetapi dalam lingkungan pengguna yang memanggil.
Kesimpulan
-i
bendera telah ditambahkan ke sudo
pada tahun 2004, untuk menyediakan fungsi yang mirip dengan sudo su -
, jadi sudo su -
adalah template untuk sudo -i
dan dimaksudkan untuk bekerja seperti itu. Saya pikir tidak masalah yang Anda gunakan, kecuali lingkungan tidak penting.
Penambahan
Poin dasar yang harus disebutkan di sini adalah sudo
dirancang untuk menjalankan hanya satu perintah dengan hak istimewa yang lebih tinggi dan kemudian jatuhkan hak istimewa itu ke yang asli. Itu tidak pernah dimaksudkan untuk benar-benar beralih pengguna dan biarkan shell root terbuka. Seiring waktu, sudo
diperluas dengan mekanisme seperti itu, karena orang kesal tentang mengapa menggunakan sudo
di depan setiap perintah.
Jadi arti dari sudo
disalahgunakan. sudo
dimaksudkan untuk mendorong pengguna meminimalkan penggunaan hak akses root.
Apa yang kita miliki sekarang, adalah sudo
menjadi lebih dan lebih populer. Ini terintegrasi di hampir setiap distribusi linux yang terkenal. Alat asli untuk beralih ke akun pengguna lain adalah su
. Untuk seorang veteran *nix sekolah tua seperti sudo
mungkin tampak tidak perlu. Ini menambah kompleksitas dan berperilaku lebih mungkin untuk mekanisme yang kita ketahui dari keluarga os Microsoft, dan dengan demikian bertentangan dengan filosofi kesederhanaan sistem *nix.
Saya bukan seorang veteran, tetapi menurut saya sudo
selalu menjadi duri di sisi saya, sejak diperkenalkan dan saya selalu bekerja di sekitar penggunaan sudo
, jika itu mungkin. Saya paling enggan menggunakan sudo
. Di semua sistem saya, akun root diaktifkan. Tapi segalanya berubah, mungkin akan tiba saatnya, ketika su
akan ditinggalkan dan sudo
menggantikan su
sepenuhnya.
Oleh karena itu saya pikir, yang terbaik adalah menggunakan sudo
mekanisme internal (-s
, -i
) daripada mengandalkan alat lama seperti su
.