2

ユーザーはSSH経由で***nixベースのマシンにリモートアクセスするため、現在使用しているユーザー名が/ etc/sudoersファイルでNOPASSWDアクセス権を持っているかどうかを確認する最速の方法を決定する必要があります。

可能なオプション:

  • / etc / sudoers内のユーザー名のgrepで、コマンドプロンプトの出力を解析して、NOPASSWDがあるかどうかを判断します。ない場合は、行を削除してから新しい権限を追加します。
  • 関係なく、ファイルにアクセス許可文字列を追加するだけです(悪い考えです)。
  • 保護されたファイルにsudoを実行して、パスワードの入力を求められるかどうかを確認してください。

もっと簡単なことを望んでいますが、私のgoogle-fuは答えを出していません。

4

2 に答える 2

4

sudo -v成功した場合、ユーザーは使用を許可されていますsudo。失敗した場合、ユーザーはの使用を許可されていませんsudo

#su user -c'setsid sudo -v </ dev / null'; エコー$?
[sudo]ユーザーのパスワード:
1
#su root -c'setsid sudo -v </ dev / null'; エコー$?
0

setsidがないと、sudostdin / stdout / stderrがすべてリダイレクトされた場合でも、対話形式でパスワードを要求しようとします。制御端末がない場合、これは必要ありませんが、 fork + setreuidsuなど、ユーザー権限を変更する以外の何かが必要になる可能性があります。

于 2009-07-15T20:01:04.900 に答える
1

本当に「最速の方法」が必要な場合は、多くの同時リクエストを処理するWebサーバーを構築していると思います。

これにより、別の問題が発生します。並行性の問題です。一般に、同じ重要なファイルの読み取りと書き込みの多くのプロセスは、大惨事のレシピです。

タスクを処理するための小さな独立したプロセスを構築します。/etc/sudoerクライアントからの要求とファイルの更新を受信する最小限のインターフェースが必要です。has_NOPASSWD_access()とのようなものset_NOPASSWD_access()。書き込む必要がある場合にのみファイルを読み取る必要があるため、リクエストの処理に必要なI/O時間を大幅に短縮できます。

長所-

  • 高速:ファイルは最初の読み取り以降にバッファに保存されるため、ファイルの読み取りにI/Oは必要ありません。
  • スレッドセーフ:1台のサーバーのみがsudoerファイルの書き込みと読み取りを行います
  • 単一選択の原則-このプロセスのみがsudoerファイルを処理します
  • エレガント(私は願っています):-)

短所---コメントにそれらをリストしてください、そして私は追加します。

于 2009-07-15T19:30:47.083 に答える