私のマシンの非rootユーザーに非sudoアクセスを付与したいのですが、ユーザーdns-managerがあり、彼の唯一の役割はすべてのBINDコマンド(rndc、dnssec-keygen)などを実行することです。
今度はコマンドを実行する必要があるたびに、
Sudo rndc reload
このSudoを取り除く方法はありますか?ただし、特定のコマンドセット(およびdns-managerのみ)でのみですか?
私があなたのコメントを正しく理解している場合、ここでの問題は、Sudoがデフォルトで要求するパスワードを入力する機能を持たない接続を介してコマンドが発行されることです。また、多くのOSディストリビューションでは、SudoはデフォルトでTTYを要求しますが、このプログラムにはありません。
ただし、Sudoは非常にきめ細かなアクセス許可構造を持つことができるため、1人以上のユーザーがパスワードとTTYなしで1つの特定のコマンドを発行できるようにすることができます。以下に、ニーズに合わせてこれを構成する3つの方法を示します。どちらを選択しても、ユーザーはパスワードを入力しなくてもSudo rndc reload
コマンドを発行できるようになります。
(また、これは不要な場合もありますが... お願い編集する前にsudoersファイルのバックアップコピーを作成し、元に戻す必要がある場合に備えて、シェルを開いたままにしておきます。バックアップに追加し、Sudo vi /etc/sudoers
の代わりにvisudo
を使用して編集します。うまくいけば、これらの予防策は不要になりますが、...それらを用意し、逆の場合よりも必要ない方がいいです!)
TTY要件(存在する場合)を取り除く最も簡単な方法は、/etc/sudoers
のDefaults
で始まる行にWord requiretty
が含まれていないことを確認することです。代わりに、 !requiretty
を含める必要があります。ただし、これを行うと、noSudoコマンドにはttyが必要になります!
また、行を追加する必要があります
rndcuser ALL = (root) NOPASSWD: /path/to/rndc reload, /path/to/dnssec-keygen, /path/to/other/program
これは、次のように、この1人のユーザーのデフォルトを設定することで実行できます。
Defaults:rndcuser !requiretty
rndcuser ALL = (root) NOPASSWD: /path/to/rndc reload, /path/to/dnssec-keygen, /path/to/other/program
Sudoersファイルの構文のため、これは少し複雑です。次のように、コマンドのコマンドエイリアスを作成し、そのコマンドエイリアスのデフォルトを設定する必要があります。
Cmnd_Alias RNDC_CMD = /path/to/rndc reload, /path/to/dnssec-keygen, /path/to/other/program
Defaults!RNDC_CMD !requiretty
rndcuser ALL = (root) NOPASSWD: RNDC_CMD
はい。 Sudoは非常に柔軟に構成できます。そうであっても、私は言及しなければなりません:これらのタイプのソリューションは非常に安全であると見なされるべきではなく、他のコントロールが配置されている協調環境でのみ使用されるべきです(したがって、これらの拡張された特権を忠実な部下に与えることができますが、ネットからしかわからない顧客に対してはそうすべきではありません)。
Sudo設定は、ほとんどのシステムで/etc/sudoers
にあります。その構文は、グーグルまたはman Sudo
コマンドで確認できます。
このファイルを直接編集しないでください。これを行うと、セキュリティの競合状態が発生する可能性があります。代わりに、visudo
コマンド($EDITOR
環境変数のラッパー)を使用してください。
Sudoを構成した後、これを表示されるコマンドに簡単にラップできます。それは非常に簡単です:
/usr/local/dnsadmin/bin
)Sudoなしで使用できるようにするコマンドのラッパースクリプトを作成します。これは非常に単純なコマンドです。たとえば、/usr/local/dnsadmin/bin/rndc
は次のようになります。
#!/bin/bash exec /usr/bin/Sudo /usr/sbin/rndc "$@"
このディレクトリをPATH
環境変数に取得します(たとえば、システム全体またはローカルの.profile
によって)。
これは、rndc
の特定のケースでは一般的な解決策ではありませんが、Sudo
はまったく必要ありません。
rndc
は、ローカルソケットまたはリモートポートを介してnamed
プロセスと通信でき、秘密鍵を使用して自身を認証します。デフォルトでは(または少なくとも、私が使用しているディストリビューションであるdebianの場合)、このファイルは/etc/bind/rndc.key
にあり、通常はユーザーbind
およびグループbind
だけが読み取ることができます。
そのキーファイル(またはその同じコピー)への読み取りアクセス権を持つユーザーはrndc
を使用してBINDサーバーを制御できるため、この特定のケースで最も簡単な解決策は、ユーザーをbind
group。
驚くほど多くの一般的なデーモンが似たような設定になっています(私はまだ個人的にpowerdnの可能性を考えていますが、今のところ有望です)。 Sudo
したくない場合は、ケースバイケースで達成したいことが可能かどうかを確認する必要があります。