sudoerがなければ、Linuxシステムはどのように機能しますか? sudoを使用しようとすると、次のことが発生します。
server:/tmp>$ sudo cal
[sudo] password for user:
Sorry, try again.
私はパスワードを知らないからですか、それとも私がsudoerではないという意味ですか? (他のコンピュータでは、システムは私がsudoerではないと印刷し、イベントを報告します。)
答え1
特定のユーザーがsudoアクセス権を持っていることを確認するには、-l
オプション-U
を一緒に使用できます。
例えば、
ユーザーがsudoアクセス権を持っている場合、その特定のユーザーのsudoアクセスレベルが印刷されます。
$ sudo -l -U pradeep User pradeep may run the following commands on this host: (ALL : ALL) ALL
ユーザーがsudoアクセス権を持っていない場合、ユーザーはlocalhostでsudoを実行できないというメッセージが表示されます。
$ sudo -l -U pradeep.c User pradeep.c is not allowed to run sudo on localhost.
答え2
この-l
フラグを使用して権限を一覧表示できます。
-l[l] [command]
If no command is specified, the -l (list) option will list the allowed (and forbidden)
commands for the invoking user (or the user specified by the -U option) on the current
host. If a command is specified and is permitted by sudoers, the fully-qualified path
to the command is displayed along with any command line arguments. If command is
specified but not allowed, sudo will exit with a status value of 1. If the -l option
is specified with an l argument (i.e. -ll), or if -l is specified multiple times, a
longer list format is used.
そのファイルに存在しない場合は、他のコンピュータに表示される「sudoersファイルにありません」というエラーが発生するはずです。
答え3
次のコマンドを使用して、sudo グループに存在することを確認できます。
groups
シェルスクリプトでは、以下を使用する必要があります。
if groups | grep "\<sudo\>" &> /dev/null; then
echo yes
else
echo no
fi
答え4
ユーザーがスクリプトに対するsudo権限を持っていることを確認する必要がありますが、テスト中のユーザーが実行さえ許可されないことがあります。sudo -l
だから私は次のような機能を作りました。
check_if_user_has_sudo(){
sudo -l -U $USER | grep -q 'may run the following' \
&& <has sudo privileges> \
|| <doesn't have sudo privileges>
}
デフォルトでは有効であることを確認し、sudo -l
ユーザーが許可されている場合は実際に印刷します。
印刷ユーザーilがすべてのコマンドを実行できるようになっている場合、grep -q
0が返されます。sudo -l
それ以外の場合、実行は不可能であってもsudo
許可されません。