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.