Lingkungan apa yang saya dapatkan dengan sudo?

15

Ketika saya menjalankan sudo, apa yang sebenarnya terjadi pada lingkungan saya?

Ketika saya berlari sudo command, sepertinya tidak melihat lingkungan root atau saya. Misalnya, jalur saya untuk keduanya termasuk /usr/local/bin, tetapi jika saya mencoba menjalankan salah satu program tanpa jalur lengkap, gagal.

Saya pikir sudo berlari sebagai root, dan karenanya mendapat lingkungan root. Apakah ada cara berbeda yang dijalankan bash di bawah sudo daripada di root atau pengguna normal saya?

EDIT:

Saya telah menggunakan sudo -iakhir - akhir ini, tetapi baru-baru ini telah menyebabkan masalah karena direktori kerja saya saat ini diatur ke /root. Ini seperti yang diharapkan (agak), tapi saya masih tidak mengerti mengapa sudo tidak mengenali executable saya di /usr/local/bin.

EDIT:

Saya menjalankan Fedora 15.

hajar
sumber
OS apa yang Anda gunakan (jika Linux, distribusi apa)? Ada (terlalu) banyak cara untuk mengkonfigurasi PATH, dan kadang-kadang tidak mudah untuk menemukan siapa yang menimpanya lebih dulu. Ini bisa berupa pengaturan sistem (misalnya dalam PAM), sudo sendiri, atau skrip profil berikutnya.
Gilles 'SO- stop being evil'
@ Gilles- Poin bagus. Saya menambahkan OS saya. Saya hanya benar-benar memperhatikan ini di Fedora (saya dulu menggunakan Ubuntu), tapi saya pikir itu karena mereka tidak menambahkan banyak pengaturan kenyamanan.
beatgammit

Jawaban:

6

Saya tidak tahu tentang standar pada Fedora, tetapi pada sudostandar Debian untuk menggunakan secure_pathopsi dengan nilai default /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin.

Ini berarti jalur diubah ke nilai itu setiap kali Anda menggunakan sudo; tetapi ketika Anda menggunakan sudo -i, path diubah setelah itu oleh file RC pengguna root.

Arrowmaster
sumber
Saya tidak tahu tentang secure_pathopsi itu. Default tidak termasuk /usr/local/binpada instal saya. Terima kasih, ini sangat membantu membereskan!
beatgammit
3

Anda dapat memeriksa ini dengan sangat mudah dengan hal-hal seperti

Bandingkan keluaran dari

sudo env 
env

Dan hal-hal seperti

sudo whoami 
whoami

Dengan begitu Anda dapat mencoba mencari tahu apa yang tidak ada dalam pengaturan Anda.

Johan
sumber
Keren, tidak tahu tentang itu. Lagi pula, /usr/local/bintidak ada dalam sudo env saya, tetapi itu ada di root env saya dan user env. Kenapa ini?
beatgammit
sudo whoami kembali root, seperti yang diharapkan. Apa yang bisa menyebabkan sudo env saya berbeda dari root env?
beatgammit
Tidak tahu, tetapi harus ada beberapa pengaturan yang hilang di suatu tempat, / usr / local / bin biasanya disertakan. Mungkin Anda menghapus $ PATH env karena kesalahan di beberapa configfile?
Johan
Apakah sudo sumber /root/.bashrc? Di situlah saya menambahkan /usr/local/binke jalur root (sayangnya saya harus melakukan ini secara manual)?
beatgammit
Saya pikir Anda harus memodifikasi konfigurasi global shell Anda dan lihat apa yang terjadi. Jika Anda menjalankan bash, itu akan menjadi seperti /etc/bash.bashrc
Johan
2

The sudo -iperintah mensimulasikan login awal. Di sistem Debian saya, ini juga menyatakan bahwa:

Ini berarti bahwa file sumber daya khusus masuk seperti .profile atau .login akan dibaca oleh shell. Jika suatu perintah ditentukan, itu diteruskan ke shell untuk dieksekusi. Kalau tidak, shell interaktif dijalankan. sudo mencoba mengubah ke direktori home pengguna tersebut sebelum menjalankan shell. Ini juga menginisialisasi lingkungan, meninggalkan DISPLAY dan JANGKAUAN tidak berubah, mengatur HOME, MAIL, SHELL, USER, LOGNAME, dan PATH, serta konten / etc / environment pada sistem Linux dan AIX. Semua variabel lingkungan lainnya dihapus.

Nyonya
sumber
0

Anda dapat menyesuaikan sudo's env_keepparameter untuk memasukkan PATH, meskipun Anda harus diingat implikasi keamanan melakukan hal itu.

visudo

... akan meluncurkan $EDITOR, lalu Anda dapat membuat perubahan ke Defaults env_keep =... yang sesuai.

Anda juga dapat menambahkan / usr / local / bin ke jalur sistem dengan menambahkan file ke /etc/profile.d.

misalnya:

cat <<EOF > /etc/profile.d/tjameson.sh
export PATH=$PATH:/usr/local/bin
EOF
Brian Cain
sumber
sudomemiliki penanganan khusus PATHsehingga Anda tidak harus melakukan ini.
Arrowmaster