web-dev-qa-db-ja.com

ホスト名を検索しようとしているsudoコマンド

最近、/ etc/hostnameを介してsudoersファイルとホスト名を変更しました。このファイルを変更した後、私のSudoコマンドに時間がかかります。また、Sudoはホストkaagini(私のマシンのホスト名)を解決できないと表示されます。

なぜSudoは何かに許可を与えるためにホスト名を知らなければならないのですか?

私のsudoersファイルには「Defaultsenv_reset」というコマンドがあります。私はいくつかの同様の質問を見ましたが、コンテキストはここではリモートログインではありません。エラーはローカルホストに表示されています。

問題の最初のグーグルは、/ etc/hostsファイルが127.0.0.1の実際のホスト名を持っている必要があることを示しています。これで私の問題は修正されました。しかし、私の実際の質問は、なぜこれがSudoに必要なのかということです。ログイン場所に関係なく、Sudoが機能する必要があります。

15

/etc/sudoersファイルは、複数のサーバーに分散できるように設計されています。これを実現するために、ファイル内の各権限にはホスト部分があります。

これは通常ALL=に設定されます。これは、アクセス許可がすべてのサーバーに対して有効であることを意味しますが、特定のホストに設定することもできます。

%Sudo    kaagini=(ALL) ALL

Sudoがこのルールを適用する必要があるかどうかを知るには、Sudoが実行されているホストを検索する必要があります。 /etc/hostsが正しいことに依存する呼び出しを使用します。そのため、正しくない場合は失敗します。

ホスト部分がすべてのアクセス許可に対してALL=に設定されている場合、Sudoは名前の検索をわざわざ行う必要はないと主張されるかもしれませんが、そのようには機能しません。ルールを処理する前に、実行されている場所を特定します。

Sudoは/ etc/sudoersのみを読み取り、ユーザーが現在のマシンで何ができるかを確認するため、これは本当にメンテナンスを容易にするためです。ただし、100台のサーバーを持つ管理者として、これを維持するには100個の異なる/ etc/sudoersファイルが必要になる場合があります。 sudoersにはアクセス許可にホスト部分があるため、単一のsudoersファイルを維持してすべてのマシンに配布できますが、ユーザーが各マシンで実行できることを細かく設定できます。

15
Paul

別のコメントでMatthiasUrlichsによって提出された リンクされたバグレポート のおかげで、次のコマンドで問題が解決しました。

Defaults !fqdn

この行を/etc/sudoersファイルに配置します

1
kjones