GNU/Linux >> Belajar Linux >  >> Linux

Sudo vs root; ada perbedaan nyata?

Ini sangat tergantung pada bagaimana Anda memanggil program Anda dengan sudo atau su .
Misalnya. pada sistem tempat saya berada saat ini:

                  .bashrc                        
    COMMAND        $HOME   $USER  Env.  $PATH
 1. sudo -i        (root)   root  root  [1]
 2. sudo -s        (USER)   root  USER  /home/${USER}/bin:[1]
 3. sudo /bin/bash (USER)   root  USER  /home/${USER}/bin:[1]  
 4. sudo su        (root)   root  USER  [1]:/usr/games:/usr/local/games  
 5. sudo su -      (root)   root  root  [1] 

Dimana [1]=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Env=Variabel lingkungan disetel ulang untuk 1 dan 5, diambil dari $USER di 2,3,4.

Jadi skrip, atau program yang diluncurkan dengan opsi berbeda dapat melihat $PATH yang berbeda , $HOME , cangkangnya dapat membaca .bashrc yang berbeda ,.profile dan variabel Lingkungan. Itu membaca file yang terkait dengan $HOME . Setiap pengguna dapat memodifikasi lingkungannya dengan cara yang berbeda (variabel, $PATH , .bashrc, .profile, .bash_profile, alias...). Secara khusus, pengguna dapat memiliki urutan direktori yang berbeda di $PATH miliknya dan, sebagai konsekuensinya, skrip dapat menjalankan perintah, mis. di /home/$USER/bin alih-alih yang ada di jalur yang diharapkan dari root.

Anda dapat menjalankan program di bawah sudo -i saat Anda login sebagai root dengan su - , tetapi Anda dapat memiliki perilaku yang berbeda jika Anda menjalankannya dengan sudo MyCommand atau dengan su -c MyCommand .

Dari man su :

Di bagian deskripsi:
Lingkungan saat ini diteruskan ke shell baru . Nilai $PATH disetel ulang ke /bin:/usr/bin untuk pengguna normal, atau/sbin:/bin:/usr/sbin:/usr/bin untuk pengguna super
...
Di bagian opsi:
- , -l, --login
Sediakan lingkungan yang mirip dengan apa yang diharapkan pengguna jika pengguna masuk secara langsung .

Dari man sudo

-i , --Gabung
Jalankan shell yang ditentukan oleh entri basis data kata sandi pengguna target sebagai shell login. Ini berarti file sumber daya khusus login seperti .profile atau .login akan dibaca oleh shell. Jika sebuah perintah ditentukan, itu diteruskan ke shell untuk dieksekusi melalui opsi -c shell. Jika tidak ada perintah yang ditentukan, shell interaktif dijalankan. sudo mencoba mengubah ke direktori home pengguna tersebut sebelum menjalankan shell. Perintah dijalankan dengan lingkungan yang mirip dengan yang akan diterima pengguna saat masuk . Bagian Lingkungan Perintah dalam manual sudoers(5) mendokumentasikan bagaimana opsi -i memengaruhi lingkungan tempat perintah dijalankan saat kebijakan sudoers digunakan.


Jika Anda memiliki sudo penuh akses, Anda bisa menjadi root menggunakan sudo su - , jadi titik keamanannya bisa diperdebatkan.

Memang, ada cara untuk melihat perbedaan antara program yang dijalankan sebagai root dan sebuah program berjalan di bawah sudo - menggunakan getuid vs geteuid - tapi ini adalah trik yang dibuat-buat. Mengapa sistem tambalan melakukan itu?


Ada beberapa perbedaan jika Anda mendapatkan shell root, seperti yang ditunjukkan oleh @Hastur.

Jika Anda tidak mendapatkan shell root, maka ada lebih banyak perbedaan. Anggota dukungan mungkin memiliki pengalaman mencoba melakukan hal-hal seperti sudo patch -p0 < /root/patch.file di mana patch dijalankan sebagai root, tetapi < (piping dari file) tidak.


Linux
  1. Seberapa aman NOPASSWD dalam mode sudo tanpa kata sandi?

  2. Setelah sudo su melakukan root, apakah ada perintah untuk melihat nama pengguna saya?

  3. Mengubah kata sandi root tidak mengubah kata sandi sudo

  1. Perbedaan Antara Pengguna Sudo Dan Pengguna Root?

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

  3. Apakah sudo su - dianggap sebagai praktik yang buruk?

  1. Ubah Kata Sandi Root Dengan Sudo, Tanpa Su?

  2. Bagaimana Menjalankan Terminal Sebagai Root?

  3. Simpan file sebagai root setelah diedit sebagai non-root