Cara menambahkan secure_path dalam file sudoers secara terprogram

11

Saya mencoba membuat skrip data pengguna untuk instance EC2 yang membangun node dan npm dari github, dan kemudian memulai layanan. Untuk melumasi roda ini, saya perlu menambahkan:

:/usr/local/bin

ke akhir baris di / etc / sudoers yang dimulai:

Defaults        secure_path="

/superuser/927512/how-to-set-path-for-sudo-commands berbicara tentang menggunakan visudo untuk mencapai ini, tapi saya ingin melakukannya secara terprogram dalam data pengguna EC2.

/programming/16282789/adding-sudo-permissions-to-sudoers-for-user-via-shell-script berbicara tentang pengeditan file sudoers, tetapi tampaknya terlalu dipanggang karena apa yang saya coba untuk mencapai.

Saya pikir itu akan mudah untuk mengambil garis dan menggantinya, tapi saya bingung. Bukan hanya karena itu koma terbalik penutupan yang menjengkelkan!

setan
sumber

Jawaban:

6

Jika Anda dapat hidup dengan mengganti secure_pathnilai alih-alih menambahkannya, Anda dapat menggunakan solusi yang jauh lebih mudah. Biasanya sudo memiliki direktori config seperti /etc/sudoers.dtempat Anda dapat meletakkan file konfigurasi tambahan.

Cukup buat file di sana dengan secure_pathnilai lengkap Anda :

Defaults secure_path="<default value>:/usr/local/bin"

Ini menimpa nilai dari konfigurasi utama. Jika nilai jalurnya sama untuk semua mesin Anda, ini dapat dengan mudah digunakan dengan skrip atau paket.

Ini memiliki keuntungan tambahan bahwa Anda tidak perlu memeriksa dan mungkin menggabungkan file konfigurasi ketika paket sudo diperbarui di masa depan.

Gerald Schneider
sumber
2

dengan asumsi Anda tahu garis dengan secure_path ada, perintah sed sederhana untuk melakukan ini

sed -i -e '/secure_path/ s[=.*[&:/usr/local/bin[' /etc/sudoers

atau sedikit lebih canggih (lebih banyak sintaks memeriksa input):

sed -i -r -e '/^\s*Defaults\s+secure_path/ s[=(.*)[=\1:/usr/local/bin[' /etc/sudoers
tonioc
sumber