Mengapa saya tidak bisa memberikan beberapa perintah? (mis. vim)

16

Saya memiliki akses sudo di server teman saya, menjalankan centos-6.3, tetapi ketika saya mencoba menjalankan beberapa perintah seperti sudo vim /var/www/html/index.htmlsaya mendapatkan kesalahan, sudo: vim: command not foundsaya bisa, menjalankan sudo sudan kemudian vim /var/www/html/index.htmldan berfungsi seperti yang diharapkan.

echo $PATHdan sudo echo $PATHkeduanya menghasilkan:

/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jared/bin

sudo which vim Namun hasil:

which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)

Saya sudah mencoba menambahkan

export PATH=$PATH:/usr/local/bin

untuk /root/.bashrcyang memperbaiki masalah saat menggunakan sudo sutetapi tidak adil sudo <command>.

Bagaimana saya mulai sudo <command>bekerja?

JaredMcAteer
sumber
Sudahkah Anda menambahkan pengguna itu ke sudoers di Centos OS?
AAlvz

Jawaban:

18

Saat berjalan sudo, banyak sistem dikonfigurasikan untuk menghapus lingkungan dari semua nilai yang tidak masuk daftar putih, dan untuk mereset variabel PATH ke nilai yang telah disanitasi.

Anda akan menemukan yang pertama sebagai Defaults env_resetdan beberapa Defaults env_keep += "SOME_VARIABLE_NAME"di /etc/sudoers. Override "secure" yang terakhir PATHditentukan sebagai Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin- hapus baris ini untuk menghapus perilaku ini saat sudoing.


Bagaimana variabel lingkungan mana yang ditangani dicetak saat Anda menjalankan  sudo -Vsebagai root.


Jika Anda tidak ingin menyingkirkan default ini, Anda selalu dapat menentukan program menggunakan path lengkap mereka ( sudo /usr/local/bin/vim).

Atau, Anda dapat mengizinkan akun Anda ke SETENVdalam sudoersfile, misalnya:

%wheel  ALL=(ALL)       SETENV: ALL

Ini memungkinkan Anda untuk menimpa default lingkungan seperti ini sudo PATH=$PATH which vim:, karena variabel diintepretasikan oleh shell Anda sebelum perintah dijalankan, menghasilkan sebuah warisan PATH(yang kemungkinan tidak akan menyertakan /sbindll.)

Daniel Beck
sumber
Terima kasih. Saya akan menggunakan pekerjaan Dennis sampai saya mendapatkan pemilik untuk mengagumi file sudoers.
JaredMcAteer
6
sudo echo $PATH

tidak melakukan apa yang Anda pikirkan. $PATHdigantikan oleh shell (Anda) sebelum menjalankan perintah.

Untuk mencapai perilaku yang diinginkan, Anda dapat menggunakan sudo -i.

Dari man sudo :

-i [perintah]

Opsi -i ( mensimulasikan login awal ) menjalankan shell yang ditentukan dalam entri passwd (5) dari pengguna target sebagai shell login. Ini berarti bahwa file sumber daya khusus masuk seperti .profileatau .loginakan dibaca oleh shell. Jika suatu perintah ditentukan, itu diteruskan ke shell untuk dieksekusi.

Dennis
sumber
1
Ini adalah solusi yang cocok sampai saya bisa membuat pemiliknya menyesuaikan file sudoers.
JaredMcAteer
1

Bagaimana saya mulai sudo <command>bekerja?

Sampai Anda menyelesaikan masalah dengan jalur gunakan nama path lengkap

  sudo /usr/local/bin/vim /var/www/html/index.html
RedGrittyBrick
sumber
5
Aku tidak akan downvote Anda, tapi aku tidak pernah menyukai hanya bekerja sekitar masalah daripada mendapatkan hak untuk titik mencari mereka dan memperbaiki mereka.
Nicole Hamilton