Untuk meluncurkan shell root pada mesin di mana akun root dinonaktifkan, Anda dapat menjalankan salah satu dari:
sudo -i
: jalankan shell login interaktif (baca/root/.bashrc
dan/root/.profile
)sudo -s
: jalankan shell interaktif non-login (baca/root/.bashrc
)
Di dunia Ubuntu, saya sangat sering melihat sudo su
saran sebagai cara untuk mendapatkan shell root. Mengapa menjalankan dua perintah terpisah ketika seseorang akan melakukannya? Sejauh yang saya tahu, sudo -i
sama dengan sudo su -
dan sudo -s
sama dengan sudo su
.
Satu-satunya perbedaan tampaknya (membandingkan sudo -i
di sebelah kiri dan sudo su -
di kanan):
Dan membandingkan sudo -s
(kiri) dan sudo su
(kanan):
Perbedaan utama (mengabaikan SUDO_foo
variabel dan LS_COLORS
) tampaknya merupakan XDG_foo
variabel sistem dalam sudo su
versi.
Apakah ada kasus di mana perbedaan itu menjamin menggunakan yang agak tidak sopan sudo su
? Dapatkah saya memberi tahu orang (seperti yang sering saya lakukan) dengan aman bahwa tidak pernah ada gunanya berlari sudo su
atau saya kehilangan sesuatu?
sumber
ubuntu
yang mencegah pengguna dari standarsu -
. Mereka menciptakan masalah dan sekarang ada diskusi tanpa akhir tentang bagaimana menyelesaikannya.su -
? Tidakkah Anda berpikir hal itu menimbulkan lubang keamanan di lingkungan multi-pengguna, di mana lebih dari satu orang perlu memiliki akses root?su -
? Ya, seseorang harus mengatur kata sandi root, tapi itu sepele.Jawaban:
Seperti yang Anda nyatakan dalam pertanyaan Anda, perbedaan utama adalah lingkungan.
sudo su -
vs.sudo -i
Dalam kasus
sudo su -
itu adalah shell login, jadi/etc/profile
,.profile
dan.bashrc
dieksekusi dan Anda akan menemukan diri Anda di direktori home root dengan lingkungan root.sudo -i
hampir sama dengansudo su -
The-i
(mensimulasikan login awal) pilihan menjalankan shell yang ditentukan oleh masuknya database password dari target pengguna sebagai shell login. Ini berarti bahwa file sumber daya khusus masuk seperti.profile
,.bashrc
atau.login
akan dibaca dan dieksekusi oleh shell.sudo su
vs.sudo -s
sudo su
panggilansudo
dengan perintahsu
. Bash disebut sebagai shell non-login interaktif. Jadibash
hanya dieksekusi.bashrc
. Anda dapat melihat bahwa setelah beralih ke root, Anda masih berada di direktori yang sama:sudo -s
membaca$SHELL
variabel dan mengeksekusi konten. Jika$SHELL
berisi/bin/bash
itu memanggilsudo /bin/bash
, yang berarti/bin/bash
dimulai sebagai shell non-login, jadi semua file dot tidak dieksekusi, tetapibash
itu sendiri berbunyi.bashrc
dari pengguna panggilan. Lingkungan Anda tetap sama. Rumah Anda tidak akan menjadi rumah root. Jadi Anda root, tetapi di lingkungan pengguna panggilan.Kesimpulan
The
-i
bendera telah ditambahkan kesudo
dalam 2004 , untuk memberikan fungsi yang serupa dengansudo su -
, sehinggasudo su -
menjadi acuan bagisudo -i
dan dimaksudkan untuk bekerja seperti itu. Saya pikir tidak masalah yang Anda gunakan, kecuali jika lingkungan tidak penting.Tambahan
Poin dasar yang harus disebutkan di sini adalah yang
sudo
dirancang untuk menjalankan hanya satu perintah tunggal dengan hak istimewa lebih tinggi dan kemudian menjatuhkan hak istimewa tersebut ke yang asli. Itu tidak pernah dimaksudkan untuk benar-benar mengganti pengguna dan membiarkan shell root terbuka. Seiring waktu,sudo
diperluas dengan mekanisme seperti itu, karena orang-orang kesal mengapa harus menggunakansudo
di depan setiap perintah.Jadi makna
sudo
disalahgunakan.sudo
dimaksudkan untuk mendorong pengguna untuk meminimalkan penggunaan hak akses root.Apa yang kita miliki sekarang,
sudo
menjadi semakin populer. Ini terintegrasi di hampir setiap distribusi linux yang terkenal. Alat asli untuk beralih ke akun pengguna lain adalahsu
. Bagi seorang veteran sekolah tua, hal seperti itusudo
mungkin tampak tidak perlu. Ini menambah kompleksitas dan berperilaku lebih mungkin untuk mekanisme yang kita tahu dari keluarga Microsoft, dan dengan demikian bertentangan dengan filosofi kesederhanaan sistem * nix.Saya bukan benar-benar seorang veteran, tetapi juga menurut saya
sudo
selalu duri di sisi saya, sejak saat diperkenalkan dan saya selalu bekerja di sekitar penggunaansudo
, jika mungkin. Saya paling enggan untuk digunakansudo
. Di semua sistem saya, akun root diaktifkan. Tetapi hal-hal berubah, mungkin saatnya akan tiba, ketikasu
akan ditinggalkan dansudo
digantisu
sepenuhnya.Karena itu saya pikir, ini akan menjadi yang terbaik untuk menggunakan
sudo
mekanisme internal (-s
,-i
) daripada mengandalkan alat lama sepertisu
.sumber
sudo su
? Saat itu saya menggunakan distro tanpa sudo dan akun root aktif jadi saya tidak tahu. Itu mungkin menjelaskan prevalensi memo sudo di dunia Ubuntu.sudo -i
atausudo -s
sebelumnya - saya telah menjalankan berbagai jenis UNIX sejak 1991 dan bagi sayasudo su -
hanyalah kebiasaan yang sudah mendarah daging pada saat ini.sudo -s
sama dengansudo $SHELL
itu?sudo su -
adalah 1) itu berfungsi dan Anda tahu persis apa yang dilakukannya, dan 2) bahwa Anda tidak harus mengingat opsi lain untuksudo
(ketika Anda sudah tahusu -
) dan 3) Anda tidak perlu Anda tidak harus mengingat versisudo
apa yang sedang Anda kerjakan saat ini. Mengapa mengingat satu hal sepele lagi ketika apa yang sudah Anda miliki berfungsi dengan baik? Apakah ada sesuatu yangsu -i
lebih baik selain menghindari entri log? Saya tidaksudo su -
cukup menggunakan untuk mengkhawatirkan hal itu.sudo
dan sangat terbiasasu
. Kombinasi keduanya yang menggangguku.Untuk menjawab pertanyaan Anda secara langsung: tidak, tidak ada alasan bagus untuk melakukan ini. Juga, sudo su menghasilkan dua entri log ketika satu sudah cukup.
Saya telah melihat banyak orang melakukan ini, dan ketika saya bertanya mengapa mereka tidak lari saja
sudo -s
, jawabannya adalah mereka tidak tahu tentang-s
bendera ke sudo, dan umumnya mereka beralih setelah saya tunjukkan.Namun, ke daftar Anda
sudo -s
dansudo -i
, saya ingin menambahkan satu opsi lagisudo -sE
, yang merupakan jenis penggantisu -m
.sudo -sE
menjaga lingkungan Anda termasuk direktori home. Ini memiliki risiko jika direktori home Anda tidak aman (di NFS). Tetapi di lingkungan di mana banyak orang menggunakan root, ini menyelamatkan Anda dari keharusan menyetujui isi.bashrc
file root . My.bashrc
berisi banyak spesialisasi untuk root, jadi saya tidak mendapatkan lingkungan yang persis sama dengan root, tetapi setidaknya saya mendapatkan persis lingkungan yang saya inginkan.sumber
$HOME
, itu berarti semua file baru yang dibuat di bawah folder rumah dimiliki oleh root, bukan oleh Anda. Saya sudah mengalami ini menyebabkan banyak sulit untuk mendiagnosis kesalahan izin.sudo -sE
dan kemudianecho $HOME
berikan/root
pada CentOS 7, bash 4.2.-sE
tampaknya tidak menyimpan direktori home seperti yang Anda nyatakan.