ユーザーが利用できるかどうかを確認したいのですがsudo
-いいえbashシェルスクリプト用のパスワードを作成する必要があります。私はいくつかの調査を行い、次の事実を見つけました。
sudoers
inで構成されていないため使用できないユーザーのsudo
場合sudo -n <command>
いつも端末にメッセージを印刷しますsudo: a password is required
。そしてユーザーが利用可能な場合sudo
-sudo
セッションで実行されていない、sudo
または停止する期限切れ -sudo: a password is required
メッセージが再印刷されます。
また、正しい解決策を使用してください(ただし他の場合)。
$(sudo -n uptime 2>&1 | grep "load" | wc -l)
sudo
承認されていないユーザーの場合いつも0を返します。ユーザーが利用できsudo
、sudo
停止するそれでも有効 - 1を返し、そうでない場合は0を返します。
質問:だからこの方法を使うのはいいえコマンドを使用すると、ユーザーが利用可能かどうかを実際に知ることができますsudo
。このソリューションは、次のことを知っている場合にのみ可能ですsudo
。停止するまだ有効ですか?
これまでのsudo -v
解決策はほぼ次のとおりです。
sudoers
コマンドで返された構成を持たないユーザーの場合
Sorry, user <username> may not run sudo on <hostname>.
ユーザーが利用できる場合はパスワードが必要ですsudo
。sudo -v
それが有効な場合、sudo
または停止するそれでも有効です。空。したがって、ここまでは明確な違いと解決策はありません。しかし、Bash Shell
仕事をしていて使うべきだからコマンドの置き換え
is_user_sudo=$(sudo -v) # if is empty sudo can be used otherwise not
質問パスワードプロンプト部分を避けたいです。これが解決策になります。
sudo -k
または、パスワードを要求しないなどの他のパラメータ(もちろん、他のタスクを実行する)や目的を達成するための別のコマンドがある場合。
ターゲット:唯一ルートではない利用可能なユーザーはsudo
いくつかのbashスクリプトを実行できます。したがって、スクリプト内でタイプを識別するコマンドが必要です。ルートではないユーザー - したがって、non-root
使用できないユーザーに通知してスクリプトの実行を停止するsudo
必要があります。
たとえば、
# an if statement about 'id -u' not equals a 0
can_use_sudo=$(<command> whoami) # so the non-root user
# is able to use sudo or not?
whoami
識別する他のコマンドに置き換えることができます。WHOスクリプト実行中
答え1
私はあなたがこれをしたい理由とスクリプトの冒頭sudo whoami
でユーザーにすぐにパスワードを尋ね、ユーザーが続行できないときに終了するために何かを実行または実行しない理由をよく理解していないことを認めます。いいですね。少なくともLinuxシステムでは動作します(sudo
まだ他の実装を確認していません)。
sudo_response=$(SUDO_ASKPASS=/bin/false sudo -A whoami 2>&1 | wc -l)
if [ $sudo_response = 2 ]; then
can_sudo=1
elif [ $sudo_response = 1 ]; then
can_sudo=0
else
echo "Unexpected sudo response: $sudo_response" >&2
exit 1
fi
askpass
ここでの秘密は、他のプログラムを使用してパスワードを確認するオプションを利用することです。sudo
これを設定すると、ユーザーがrootとしてコマンドを実行できるかどうかに応じて、2つの標準応答を取得/bin/false
できます。sudo
## A user with sudo rights
terdon@tpad $ SUDO_ASKPASS=/bin/false sudo -A whoami 2>&1
sudo: no password was provided
sudo: a password is required
## A user without sudo rights
bib@tpad $ SUDO_ASKPASS=/bin/false sudo -A whoami
bib is not in the sudoers file. This incident will be reported.
したがって、stderrをstdoutにリダイレクトした後の応答が2行の場合、ユーザーはsudo
コマンドを実行でき、1行の場合はコマンドを実行できません。
重要:私はこれを広くテストしていません。上記のように、2人のユーザーを持つ単一のArch Linuxシステムでのみ試しました。上記のコマンドの出力を変更できる場合は、他のシステムで期待どおりに機能しなくても驚くことはありません。
sudo
明らかな失敗の場合:ユーザーがパスワードなしでコマンドを実行するように構成されている場合、これは機能しません。
答え2
まだ明確な確認は見つかりませんでしたが、デザインによってこの操作は認証や権限なしで行うことはできません。
権限のないユーザーではないと思います。しなければならないユーザーとコマンドを選択し、そのユーザーにコマンドを実行する権限があることを確認する機能sudo
。これは、攻撃者がシステムを調査し、どのアカウントが最も価値があるかを理解するのに非常に役立ちますが、どのような利点をもたらすかは不明です。
/etc/sudoers
このファイルはデフォルトでロックされており、ルート以外では読み取れないことに注意する価値があります。
答え3
sudo
ユーザーがコマンドを使用できることを確認したいが、いいえパスワードを書く必要があります
groups user_name
ユーザーが属するすべてのグループが表示されます。ユーザーがsudo
このグループのメンバーである場合、ユーザーは可能使用することができるsudo
(@terdonが指摘したように、グループメンバーシップは権限を付与するものではありませんが、ユーザーsudo
が単に「一般ユーザー」または「管理者」として作成される一般的な場合、sudoグループメンバーシップは権限に関連していますsudo
)。
if [ -z "$(groups user_name | grep sudo)" ]; then
echo 'user is not in sudo group'
else
echo 'user is in sudo group'
fi
もちろん、これはsudoers
ファイルに存在する可能性があるより細かい権限を教えてくれません。これを読むにはルートが必要です。