Mengatur PATH sehingga berlaku untuk semua pengguna, termasuk root / sudo

41

Instruksi di Bagaimana cara mengatur variabel PATH untuk semua pengguna di server? berfungsi untuk mengatur PATH untuk semua pengguna 'normal'. Namun, jika saya lakukan sudo -sdan kemudian printenv PATHjalur yang diperbarui tidak ditampilkan. Saya telah melihat contohnya, Menetapkan TeX Live path untuk root , tetapi ini sepertinya tidak masuk akal bagi saya, mungkin karena saya dari latar belakang Windows. Apakah ada cara untuk mengatur jalur sistem yang benar-benar luas, sehingga entri diwarisi oleh setiap proses yang berjalan pada sistem?

Joseph Wright
sumber

Jawaban:

43

Memperbarui:

Mengatur variabel lingkungan global harus tetap dilakukan /etc/environment, tetapi seperti yang Anda tunjukkan, penggunaan sudo -smemiliki pengaruh variabel-variabel ini "menghilang".

Alasannya adalah sudomemiliki kebijakan mengatur ulang Lingkungan dan menetapkan jalur yang aman . Ini diaktifkan secara default:

/etc/sudoers:

Defaults  env_reset
Defaults  secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

Jadi apa pun yang diatur dalam /etc/environmentuntuk jalan ditimpa oleh sudo.

Halaman manual untuk sudoersstatus:

   env_reset       If set, sudo will reset the environment to only contain
                   the LOGNAME, MAIL, SHELL, USER, USERNAME and the SUDO_*
                   variables.  Any variables in the caller's environment
                   that match the env_keep and env_check lists are then
                   added.  The default contents of the env_keep and
                   env_check lists are displayed when sudo is run by root
                   with the -V option.  If the secure_path option is set,
                   its value will be used for the PATH environment
                   variable.  This flag is on by default.

Sebagai solusinya, Anda bisa menggunakan sudo sushell yang akan memberikan hak akses root tetapi mengandung PATH yang tepat.


Jawaban Asli

Anda harus mengaturnya /etc/environment.

Coba sudo YOUR_TEXT_EDITOR /etc/environment(pastikan untuk membuat cadangan terlebih dahulu).

Untuk informasi lebih lanjut: Variabel Environment

Variabel lingkungan sistem-lebar

Pengaturan variabel lingkungan yang memengaruhi sistem secara keseluruhan (alih-alih hanya pengguna tertentu) tidak boleh ditempatkan di salah satu dari banyak skrip level sistem yang dijalankan ketika sistem atau sesi desktop dimuat, tetapi ke dalam

/etc/environment- File ini secara khusus dimaksudkan untuk pengaturan variabel lingkungan sistem-lebar. Ini bukan file skrip, melainkan terdiri dari ekspresi penugasan, satu per baris. Secara khusus, file ini menyimpan pengaturan lokal dan jalur sistem.

Tidak direkomendasikan:

/etc/profile- File ini dijalankan setiap kali shell login bash dimasukkan (mis. Ketika masuk dari konsol atau lebih dari ssh), serta oleh DisplayManager ketika sesi desktop dimuat. Ini mungkin file yang akan Anda rujuk ketika menanyakan administrator sistem UNIX veteran tentang variabel lingkungan. Di Ubuntu, bagaimanapun, file ini tidak lebih dari memanggil file /etc/bash.bashrc.

/etc/bash.bashrc- Ini adalah versi seluruh sistem dari file ~ / .bashrc. Ubuntu secara default dikonfigurasi untuk mengeksekusi file ini setiap kali pengguna memasukkan shell atau lingkungan desktop.

lgarzo
sumber
Ah well: bagi saya ini semua salah jalan (semua orang harus mewarisi jalan yang sama, titik), tapi saya kira itu memang begitu.
Joseph Wright
Anda dapat menggunakan visudo(perlu izin root) untuk mengedit pengaturan jalur aman. ini bukan praktik yang disarankan. Itu hanya di sini untuk pendidikan.
Elliot Labs LLC
2

sudo -iakan mensimulasikan login (dengan cara yang mirip dengan sudo su -) dan dengan demikian memberi Anda variabel lingkungan ini.

ℝaphink
sumber
1
Itu tidak bekerja seperti itu. Setidaknya PATH akan direset pada Ubuntu Trusty test-vm saya.
Martijn Heemels