Menggunakan sudo 1.7.4p4 pada Solaris 5.10 dan sudo 1.6.7p5 pada RHEL4 u6 Saya tidak bisa melihat bagaimana cara melestarikan variabel lingkungan saya, misalnya $ PYTHONPATH. Saya telah menambahkan baris ini ke sudoers, tetapi tidak ada bedanya:
Defaults !env_reset
Apakah saya melakukan sesuatu yang salah, atau apakah instalasi sudo sama sekali tidak menghargai flag env_reset?
Sunting: Setidaknya pada Solaris, kami menemukan bahwa masalah ini tergantung pada shell! Shell root standar adalah Bourne, jika kita menjalankan bash di bawah sudo ( sudo bash
),! Env_preset akan melestarikan lingkungan (termasuk PATH dan LD_LIBRARY_PATH). Ini adalah perilaku yang agak membingungkan yang harus saya katakan.
Jawaban:
Gunakan dengan hati-hati, ada masalah keamanan dengan sudo dan variabel.
Dari
man sudoers
saya temukan bahwa Anda harus menggunakanDi Ubuntu,
sudo
mempertahankan beberapa variabel.sudo -i
lebih seperti masuk sebagai root dan kemudian menjalankan perintah. Keduanya mungkin tidak nyaman, yang pertama untuksudo nano myfile
meninggalkan file yang dimiliki root di dalam rumah Anda dan yang terakhir untuksudo -i nano myfile
akan mencoba untuk membuka / root / myfile.Lari
dan lihat apa yang memberi. Ini dia memberi
sebagai contoh. Sekarang jalankan
sudo visudo
dan tambahkan barismengganti dengan apa yang Anda temukan sebelumnya. Tambahkan jalur baru ke sana jika Anda perlu.
Tentang perpustakaan:
Distribusi Linux membutuhkan banyak perhatian
PATH
, dan Anda harus benar-benar berhati-hati sebelum menggunakannya. Berhati-hatilah untuk menambahkan jalur seperti ".
" atau/home/username
, itu tidak aman.Salah satu bahaya menambahkan jalur adalah membuka kemungkinan file pada jalur ini dieksekusi
root
, membuka jendela dalam keamanan sistem yang dapat dieksploitasi oleh perangkat lunak berbahaya. Mungkin ada bahaya lain. Pastikan Anda tahu apa yang Anda lakukan. Melewatisudo
langkah-langkah keamanan dapat membuat Solaris Anda seaman Windows XP.sumber
sudo
penulis berhati-hati mencegah Anda melakukannya. Anda tidak ingin perpustakaan jahat dimuat karena ditemukan di jalur yang digunakan oleh sudo. Jadi, itu sebabnya ini diatur ulang. Jika Anda mengkodekan hal-hal yang dimaksudkan untuk dijalankan oleh root, salin ke direktori sistem yang sesuai.Mengotak-atik
sudoers
harus dilakukan dengan hati-hati, seperti yang orang lain katakan.Pendekatan yang lebih sederhana untuk kasus yang lebih sederhana ketika ada variabel lingkungan tertentu yang ingin Anda pertahankan adalah dengan hanya melewati variabel lingkungan yang Anda inginkan secara langsung melalui sudo (ini ditampilkan seperti
[VAR=value]
dalam bantuan cmdline sudo).Lihat contoh kecil ini di mana saya juga mendemonstrasikannya untuk lebih dari satu variabel.
Untuk
PYTHONPATH
contoh asli dalam pertanyaan, gunakan saja yang berikut:Membuat alias untuk hal semacam ini sangat berguna. Seperti itu:
sumber
Defaults !env_reset
Penampilan Anda OK, dengan asumsi Anda tidak juga memanggil sudo dengan-E
opsi tersebut.Anda dapat mencoba menghapus entri itu sepenuhnya.
Sudahkah Anda memverifikasi bahwa Anda mengedit file sudoers yang benar? Saya menduga itu bisa
/etc/sudoers
atau/usr/local/etc/sudoers
tergantung pada bagaimana itu diinstal. Apakah Anda mengeditnya menggunakanvisudo
?Bagaimana Anda menjalankan sudo?
sudo python
,sudo su
,sudo su -
,sudo -s
, Sesuatu yang lain? Hanyasudo python
dansudo su
akan melestarikan lingkungan Anda.Apa yang
env | grep PYTHONPATH
dikatakan? Jika tidak ada, pastikan PYTHONPATH diekspor dengan menjalankanexport PYTHONPATH
dan mencoba lagi.Apa yang
sudo env | grep PYTHONPATH
dikatakan? Jika mencetak nilai yang diharapkan, maka yang lain menimpa nilai PYTHONPATH Anda. Mungkin root .bashrc atau .bash_profile atau file konfigurasi sistem.sumber
editor
ataupassprompt
untuk melihat apakah Anda memiliki file yang benar. Atau gunakan strace, dtrace, truss, atau sejenisnya dan lihat file apa yang dibuka.Menurut dokumentasi Ubuntu untuk LD_LIBRARY_PATH :
Kemudian:
Tambahkan
ld.so
file konfigurasi/etc/ld.so.conf.d/
dengan path file AndaLD_LIBRARY_PATH
Perbarui cache dengan:
sumber