Ini adalah PATH
variabel tanpa sudo:
$ echo 'echo $PATH' | sh
/opt/local/ruby/bin:/usr/bin:/bin
Ini adalah PATH
variabel dengan sudo:
$ echo 'echo $PATH' | sudo sh
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Sejauh yang saya tahu, sudo
seharusnya PATH
tidak tersentuh. Apa yang sedang terjadi? Bagaimana saya mengubahnya? (Ini di Ubuntu 8.04).
PEMBARUAN: sejauh yang saya bisa lihat, tidak ada satu pun skrip yang memulai perubahan root PATH
dengan cara apa pun.
Dari man sudo
:
Untuk mencegah spoofing perintah, sudo memeriksa ``. '' Dan `` '' (keduanya menunjukkan direktori saat ini) terakhir saat mencari perintah di PATH pengguna (jika salah satu atau keduanya berada di PATH). Perhatikan, bagaimanapun, bahwa variabel lingkungan PATH sebenarnya tidak dimodifikasi dan diteruskan tidak berubah ke program yang dijalankan sudo.
path
environment-variables
sudo
Michiel de Mare
sumber
sumber
Jawaban:
Ini adalah
fungsi yang mengganggufitur sudo pada banyak distribusi.Untuk mengatasi "masalah" ini di ubuntu saya melakukan hal berikut di ~ / .bashrc saya
Catatan di atas akan berfungsi untuk perintah yang tidak mengatur ulang $ PATH sendiri. Namun `su 'me-reset $ PATH jadi Anda harus menggunakan -p untuk tidak melakukannya. YAITU:
sumber
Jika ada orang lain yang menjalankan ini dan ingin menonaktifkan semua perubahan path variabel untuk semua pengguna.
Mengakses file yang sudoers dengan menggunakan perintah:
visudo
. Anda akan melihat baris berikut di suatu tempat:yang harus Anda tambahkan berikut pada baris berikutnya
secure_path diaktifkan secara default. Opsi ini menentukan apa yang membuat $ PATH saat sudoing. Tanda seru menonaktifkan fitur.
sumber
Defaults env_keep = "PATH"
PATH
adalah variabel lingkungan, dan karena itu secara default diatur ulang oleh sudo.Anda perlu izin khusus untuk diizinkan melakukan ini.
Dari
man sudo
Contoh penggunaan:
memperbarui
Jadi mungkin perlu memeriksa apakah ini dikompilasi.
Secara default di Gentoo
sumber
Sepertinya bug ini sudah ada cukup lama! Berikut adalah beberapa referensi bug yang mungkin bermanfaat bagi Anda (dan mungkin ingin berlangganan / memberikan suara, memberi petunjuk, memberi petunjuk ...):
Bug Debian # 85123 ("sudo: SECURE_PATH masih tidak dapat ditimpa") (mulai 2001!)
Mereka menyebutkan menempatkan sesuatu seperti ini di file sudoers Anda:
tetapi ketika saya melakukannya di Ubuntu 8.10 setidaknya, itu memberi saya kesalahan ini:
Bug Ubuntu # 50797 ("sudo dibangun dengan --with-secure-path bermasalah")
Bug Ubuntu # 192651 ("jalur sudo selalu disetel ulang")
Bug Ubuntu # 226595 ("mustahil untuk mempertahankan / menentukan PATH")
sumber
Ini sepertinya bekerja untuk saya
yang mengambil non-sudo
PATH
sumber
Saya pikir itu sebenarnya diinginkan untuk sudo me-reset PATH: jika tidak seorang penyerang mengkompromikan akun pengguna Anda bisa meletakkan versi backdoored semua jenis alat pada PATH pengguna Anda, dan mereka akan dieksekusi ketika menggunakan sudo.
(tentu saja setelah sudo reset PATH bukan solusi lengkap untuk masalah seperti ini, tetapi membantu)
Inilah yang sebenarnya terjadi ketika Anda menggunakan
di / etc / sudoers tanpa menggunakan
exempt_group
atauenv_keep
.Ini juga nyaman karena Anda dapat menambahkan direktori yang hanya berguna untuk root (seperti
/sbin
dan/usr/sbin
) ke jalur sudo tanpa menambahkannya ke jalur pengguna Anda. Untuk menentukan jalur yang akan digunakan oleh sudo:sumber
Bekerja sekarang menggunakan sudo dari repositori karma. Detail dari konfigurasi saya:
Luar biasa akhirnya bisa diselesaikan tanpa menggunakan retasan.
sumber
sumber
Cukup komentari "Defaults env_reset" di / etc / sudoers
sumber
Cukup edit
env_keep
di/etc/sudoers
Itu terlihat seperti ini:
Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASURE MENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL L ANGUAGE LINGUAS XDG_SESSION_COOKIE"
Cukup tambahkan PATH di bagian akhir, jadi setelah perubahan akan terlihat seperti ini:
Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASURE MENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL L ANGUAGE LINGUAS XDG_SESSION_COOKIE PATH"
Tutup terminal dan kemudian buka lagi.
sumber
Secure_path adalah teman Anda, tetapi jika Anda ingin membebaskan diri dari secure_path lakukan saja
Dan tambahkan
Jika Anda ingin membebaskan sekelompok pengguna membuat grup, tambahkan semua pengguna ke dalamnya, dan gunakan itu sebagai exempt_group Anda. man 5 sudoers untuk lebih.
sumber
solusi yang direkomendasikan dalam komentar di distro OpenSUSE menyarankan untuk berubah:
untuk:
dan mungkin mengomentari baris berikut yang tidak diperlukan:
sumber
komentar kedua "Default env_reset" dan "Default secure_path ..." di file / etc / sudores bekerja untuk saya
sumber
Anda juga dapat memindahkan file Anda di direktori sudoers bekas:
sumber
Eh, ini bukan ujian jika Anda tidak menambahkan sesuatu ke jalur Anda:
sumber
PATH akan diatur ulang saat menggunakan su atau sudo dengan definisi ENV_SUPATH, dan ENV_PATH didefinisikan dalam /etc/login.defs
sumber
$ PATH adalah variabel lingkungan dan itu berarti bahwa nilai $ PATH dapat berbeda untuk pengguna lain.
Ketika Anda melakukan login ke sistem Anda, maka pengaturan profil Anda menentukan nilai $ PATH .
Sekarang, mari kita lihat: -
Misalkan ini adalah nilai $ PATH untuk pengguna yang berbeda. Sekarang ketika Anda menjalankan perintah apa pun dengan sudo maka dalam arti sebenarnya pengguna root mengeksekusi perintah itu.
Anda dapat mengonfirmasi dengan menjalankan perintah-perintah ini pada terminal: -
Ini alasannya. Saya pikir itu jelas bagi Anda.
sumber