一般化する
root以外のユーザーアカウントからroot以外のユーザーアカウントにパスワードのないsudoを許可するようにsudoが正しく設定されていることを確認する非対話型(無人、ncursesベースの制御端末を必要としない)方法はありますか?
なぜ
他のユーザーアカウントでいくつかの処理を実行する必要がありますが、使用可能な制御端末(バックグラウンドプロセスなど)がないため、ユーザーの介入なしに実行する必要があるシナリオがあります。
詳細
これはLinux(具体的にはRHEL 5、RHEL 6、またはほぼ同等のCentOSシステム)で実行されます。この問題に関連する他のオペレーティングシステムやLinuxのバリエーションはありません。
説明のために、userAとuserBという2つのユーザーアカウントが関連付けられているとします。
userBアカウントでuserAからuserBにパスワードのないsudoを実行できることを確認する方法が必要です。
そのsudo呼び出し内でuserBアカウントで実行されるコマンドは、ユーザースペースプログラムの実行などの操作に使用されます(たとえば、システム管理コマンドを実行しないなどfdisk
)。
ここで重要な制限は、制御端末なしでバックグラウンドプロセスでuserAアカウントではなくuserBアカウントでメソッドを完了できることです。
このアプローチは、sed / awk / etcを使用するBashスクリプトで可能でなければなりません。ファイルを確認するコマンドです。
システム管理者はこの方法に参加する必要はありません(たとえば、setuidスクリプトは必要ありません)。
それは可能ですか?それでは、どうすればいいですか?
研究
sudoersファイルは解析するのが難しいかもしれません。同様の質問を見るとパスワードを要求せずにルートで特定のプログラムをどのように実行できますか?visudo
オプションではなくncursesを有効にする必要がある端末など、いくつかの対話型メカニズムを使用せずに、非ルートスクリプトがsudoersファイルの内容を調べることができる方法はわかりません。
返品https://unix.stackexchange.com/a/260739/21372userAからuserBへのパスワードなしのsudoを表す正しい構文ですが、ここでの質問は、ncurses制限されたアプリケーション(例:)を実行せずにその構成を表示する方法で要約することができますが、それほど単純ではないかどうかvisudo
わかりません。
答え1
sudo 構成は root でのみ読み取れるため、sudo 構成ファイルを解析してこれを行うことはできません。 sudo設定を読み取ることができますが、安定して解析するのは難しく(特にLDAPデータベースなどのローカル以外の情報を処理するとき)、内容全体を知らせません(たとえば、次のように権限を付与できます)。いくつかの群れ)。
唯一の実際のチェックはsudo
userAで実行されます。ユーザーBで実行されるスクリプトでこのチェックを実行する必要があるため、ユーザーBがユーザーAでスキャンを実行する方法が必要です。または小さなプログラムを書いてください(スクリプトではありませんつまり、setuid AまたはユーザーBに、sudoを介してユーザーAにチェックを実行する権限を付与します。
ユーザーBがAでスキャンを実行できるようにするsudoルールを設定するために管理者を介入できない場合、setuidプログラムは唯一のソリューションです。このプログラムは、AがユーザーBとして実行できるsudo -u userB -b true
ことを確認するために呼び出されます。true
以下はプログラムのCソースコードです(警告:テストされていません!)。
#include <unistd.h>
int main(void) {
execl("/usr/bin/sudo", "sudo", "-u", "userB", "-b", "/bin/true", (char*)NULL);
return 126;
}
これをコンパイルし、結果の実行可能ファイルsetuidをAにします(実行する前にAに属する必要がありますchmod 4755 /path/to/executable
)。
このソリューションは完全ではありません。 A がユーザー A であるため、B でコマンドを実行できる場合にのみ機能し、A がグループに属しているため、この権限がある場合にのみ機能します。働くグループメンバーシップを確認する必要がある場合は、sg
ユーザーAとして実行してこのグループメンバーシップを取得して実行する必要がありますsudo
。
答え2
この質問には2つの異なる質問がありました。
userAに対するsudo権限を許可/確認する方法
協会Sudoプロジェクトのホームページに行くsudo設定をuserB(ルートではない)として表示する方法
#1これは、/ etc / sudoersドキュメントと関連するsudoファイルとコマンドを詳細に調べることによって行うことができます。私は、あるユーザーのコマンドをroot以外のユーザーに制限した経験がないので、それが可能であることを知らない限り、実際には話すことはできません。
#2これは、/etc/sudoers /etc/sudo.conf /etc/sudoers.d/*などのsudo設定権限の問題です。私のシステムでは、これらのファイルはスキーマであり、-r--r-----. root root
userBは次のものがないとそのファイルを読み取ることができません。
- ルートグループのメンバーになる
- これらの権限を変更するには、システム管理者に連絡してください。
とても簡単です。これらのいずれかが発生しないと、userBはファイルを読み取ったり解析したりできません。