perintah sudo mencoba mencari nama host

15

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.

prathmesh.kallurkar
sumber
@ OliverSalzburg Saya telah mengulangi pertanyaan dengan benar. Mohon beri tahu saya jika ada sesuatu yang salah
prathmesh.kallurkar

Jawaban:

16

The /etc/sudoersfile 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:

%sudo    kaagini=(ALL) ALL

Agar sudo mengetahui apakah aturan ini harus diterapkan, perlu mencari host yang digunakannya. Ia menggunakan panggilan yang bergantung pada /etc/hostsyang benar, itulah sebabnya mengapa gagal jika tidak benar.

Mungkin diperdebatkan bahwa sudotidak perlu repot melakukan pencarian nama jika porsi host diatur ALL=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.

Paul
sumber
Terima kasih atas jawabannya. Bisakah Anda datang pada file sudoers terdistribusi lagi ?? Lihat, saya memiliki sistem operasi yang berjalan pada machineA. Jika file izin (/ etc / sudoers) untuk Sistem Operasi ini disimpan di komputer lain. Atau jawaban Anda berarti mengatakan bahwa perintah sudo dapat mengatakan sesuatu seperti pengguna John dapat sudo dari machineA tetapi tidak dari machineB ??
prathmesh.kallurkar
Ini benar-benar untuk kemudahan perawatan. 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.
Paul
satu pertanyaan lagi ... apakah administrator server harus scp file sudoers baru setiap kali ada perubahan pada file sudoers utama atau apakah sudo menyediakan cara untuk menjaga file sudoers melalui jaringan ??
prathmesh.kallurkar
@ prathmesh.kallurkar Tidak, tidak ada metode distribusi bawaan, tapi ini linux, jadi ini normal. Anda akan menggunakan rsync atau scp atau alat lain untuk menyelesaikan bagian ini.
Paul
1
Saya menganggap itu sebagai bug (jika hanya ada SEMUA aturan maka sudo tidak perlu tahu nama hostnya) dan karenanya telah mengajukan bugzilla.sudo.ws/show_bug.cgi?id=916
Matthias Urlichs
1

Berkat laporan bug terkait yang diajukan oleh Matthias Urlichs dalam komentar lain, perintah berikut memecahkan masalah bagi saya:

Defaults !fqdn

Tempatkan baris ini dalam /etc/sudoersfile

kjones
sumber
-3

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).

Felipe Alvarez
sumber
3
Bisakah Anda memperluas jawaban untuk menjelaskan apa itu boneka, di mana Anda menemukannya, dan bagaimana Anda menggunakannya untuk menyelesaikan masalah? Dari review queue
fixer1234
2
Silakan baca Bagaimana saya merekomendasikan perangkat lunak untuk beberapa tips tentang bagaimana Anda harus merekomendasikan perangkat lunak. Anda harus memberikan setidaknya tautan, beberapa informasi tambahan tentang perangkat lunak itu sendiri, dan bagaimana hal itu dapat digunakan untuk menyelesaikan masalah dalam pertanyaan.
DavidPostill