Baru-baru ini, saya telah mengubah file sudoers dan nama host melalui / etc / hostname. Setelah mengubah file ini, perintah sudo saya membutuhkan banyak waktu. Juga, dikatakan sudo tidak dapat menyelesaikan host kaagini (nama host mesin saya).
Mengapa sudo harus tahu nama host untuk memberikan izin pada sesuatu ??
File sudoers saya memiliki perintah "Defaults env_reset". Saya melihat beberapa pertanyaan serupa tetapi konteksnya bukan login jarak jauh di sini. Kesalahan ditampilkan di localhost.
Googling awal untuk masalah ini mengatakan bahwa file / etc / hosts harus memiliki nama host aktual untuk 127.0.0.1. Ini memperbaiki masalah saya. Tapi pertanyaan saya yang sebenarnya adalah: Mengapa kita memerlukan ini untuk sudo ?? Haruskah sudo berfungsi terlepas dari tempat login.
Jawaban:
The
/etc/sudoers
file dirancang untuk dapat didistribusikan di antara beberapa server. Untuk mencapai hal ini, setiap izin dalam file memiliki bagian host.Ini biasanya diatur ke
ALL=
yang berarti bahwa izin tersebut valid untuk server apa pun, namun dapat diatur untuk host tertentu:Agar sudo mengetahui apakah aturan ini harus diterapkan, perlu mencari host yang digunakannya. Ia menggunakan panggilan yang bergantung pada
/etc/hosts
yang benar, itulah sebabnya mengapa gagal jika tidak benar.Mungkin diperdebatkan bahwa
sudo
tidak perlu repot melakukan pencarian nama jika porsi host diaturALL=
untuk semua izin, tapi itu tidak berfungsi seperti itu - tampaknya berfungsi di mana ia berjalan sebelum memproses aturan .Ini benar-benar untuk kemudahan perawatan karena sudo hanya membaca / etc / sudoers untuk melihat apa yang dapat dilakukan pengguna pada mesin saat ini. Tetapi sebagai admin dengan 100 server, ini mungkin memerlukan 100 file / etc / sudoers berbeda untuk dipelihara. Karena sudoers memiliki porsi host dalam izin, Anda dapat memelihara satu file sudoers dan mendistribusikannya ke semua mesin, namun masih memiliki rincian tentang apa yang dapat dilakukan pengguna di setiap mesin.
sumber
Berkat laporan bug terkait yang diajukan oleh Matthias Urlichs dalam komentar lain, perintah berikut memecahkan masalah bagi saya:
Tempatkan baris ini dalam
/etc/sudoers
filesumber
Puppet adalah perangkat lunak manajemen konfigurasi yang mampu mengkonfigurasi armada server secara otomatis dengan membaca file Puppet Manifests. File seperti itu dapat menyertakan definisi file / etc / sudoers Anda, yang kemudian dapat didorong ke semua "agen" boneka Anda dari "master" boneka Anda. Kemudian semua host akan mendapatkan salinan yang sama dari file / etc / sudoers Anda, yang dapat (dan harus) menyertakan definisi HOST, sehingga Anda dapat memberikan beberapa pengguna beberapa perintah pada beberapa host (tetapi tidak pada yang lain).
sumber