私がsudoerであるかどうかはどうすればわかりますか?

私がsudoerであるかどうかはどうすればわかりますか?

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 -q0が返されます。sudo -lそれ以外の場合、実行は不可能であってもsudo許可されません。

関連情報