Singkatnya : bagaimana membuat sudo agar tidak menyiram PATH setiap kali?
Saya memiliki beberapa situs web yang digunakan di server saya (pengujian Debian) yang ditulis dengan Ruby on Rails. Saya menggunakan Mongrel + Nginx untuk meng-host mereka, tetapi ada satu masalah yang muncul ketika saya harus me-restart Mongrel (misalnya setelah membuat beberapa perubahan).
Semua situs diperiksa dalam VCS (git, tetapi tidak penting) dan memiliki pemilik dan grup diatur untuk pengguna saya, sedangkan Mongrel berjalan di bawah, ya, pengguna mongrel yang sangat dibatasi hak-haknya. Jadi Mongrel harus dimulai di bawah root (secara otomatis dapat mengubah UID) atau mongrel.
Untuk mengelola mongrel saya menggunakan permata mongrel_cluster karena memungkinkan memulai atau menghentikan sejumlah server Mongrel dengan hanya satu perintah. Tetapi perlu direktori /var/lib/gems/1.8/bin berada di PATH: ini tidak cukup untuk memulainya dengan path absolut .
Memodifikasi PATH di root .bashrc tidak mengubah apa pun, men-tweak sudo env_reset dan env_keep juga tidak.
Jadi pertanyaannya: bagaimana cara menambahkan direktori ke PATH atau mempertahankan PATH pengguna di sudo?
Perbarui: beberapa contoh
$ env | grep PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/var/lib/gems/1.8/bin
$ sudo cat /etc/sudoers | egrep -v '^$|^#'
Defaults env_keep = "PATH"
root ALL=(ALL) ALL
%sudo ALL=NOPASSWD: ALL
$ sudo env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Saya juga dapat mengatakan bahwa cara kerjanya persis seperti ini di stabil Debian (lenny) juga.
Jawaban:
Berjuang dengan masalah yang sama selama beberapa jam. Di debian lenny, Anda dapat memperbaikinya dengan menambahkan
ke file sudoers.
Ini adalah satu-satunya cara untuk berkeliling opsi --secure-path terkompilasi, (sejauh yang saya tahu).
Khususnya, ini juga akan membebaskan pengguna dari perlu memasukkan kata sandi mereka ketika mereka sudo.
sumber
Jika sudah
secure_path
diatur/etc/sudoers
, Anda dapat bermain denganenv_reset
/env_keep
semua yang Anda suka dan itu tidak akan membuat perbedaan apa pun pada jalur. Jika Anda melihat sesuatu seperti ini, beri komentar.sumber
Saya akan mengatakan melihat opsi env_reset dan env_keep di man sudo . Tapi sepertinya Anda sudah melakukan itu (Anda salah memanggil env_keep "keepenv"). Jika Anda menonaktifkan pilihan env_reset (default diaktifkan), saya pikir itu tidak seharusnya menghapus setiap variabel env. Tapi ini kurang aman.
Ada juga opsi secure_path untuk sudo; Saya pikir ini diaktifkan secara default. Anda dapat mencoba menonaktifkannya.
Opsi-opsi sebelumnya diatur dalam file / etc / sudoers Anda. Ada juga
-i
opsi baris perintah untuk sudo. Itu akan menyebabkan sudo menjalankan /root/.profile atau /root/.login. Anda dapat mengatur jalur yang Anda inginkan di sana.sumber
Nah, Anda melakukan sesuatu yang salah. Juga, Anda tidak menentukan apa yang Anda lakukan dengan file / etc / sudoers Anda. Inilah yang harus Anda lakukan - ini adalah sistem CentOS, BTW:
Pertama, ini dengan pengaturan env_keep yang tepat (perhatikan PATH ada di sana):
Kelihatan bagus. Sekarang mari kita hapus pengaturan env_keep dan coba lagi:
PATH yang menyedihkan:
sumber