GNU/Linux >> Belajar Linux >  >> Linux

Apakah Pernah Ada Alasan Bagus Untuk Menjalankan Sudo Su?

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.

Terkait:Linux – netfilter/iptables:mengapa tidak menggunakan tabel mentah?

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 .


Linux
  1. Jalankan container di Linux tanpa Sudo di Podman

  2. Bagaimana Cara Menjalankan Wireshark Di Ubuntu 17.10?

  3. Bagaimana Menjalankan Terminal Sebagai Root?

  1. Bagaimana cara mengatur &menjalankan PhantomJS di Ubuntu?

  2. Bagaimana cara memeriksa apakah saya memiliki akses sudo?

  3. Jalankan perintah cd sebagai superuser di Linux

  1. Menggunakan Sudo untuk mendelegasikan izin di Linux

  2. Bagaimana Cara Membuat Skrip A Sebagai Root Secara Retroaktif?

  3. cara meneruskan variabel lingkungan ke sudo su