ルート権限を持つすべてのユーザー、つまりSudoをリストするコマンドが必要ですか?
私がsudoerユーザーだとします。他のすべてのsudoerユーザーを知るにはどうすればよいですか?
Sudo
グループにリストされているsudoerをリストする必要がある場合、それを行う最良の方法は、このコマンドを実行することだと思います(これはshouldこの回答の他のコマンド):
grep -Po '^Sudo.+:\K.*$' /etc/group
また、muruのコメントで示唆されているように、/etc/group
のエントリの形式はcut
で簡単に処理できます。
grep '^Sudo:.*$' /etc/group | cut -d: -f4
また、muruのコメントで示唆されているように、getent
の代わりにgrep
を使用できます。
getent group Sudo | cut -d: -f4
これらのコマンドはいずれも、/etc/group
(存在する場合)のSudo
グループにリストされているすべてのユーザーを出力します。
コマンド#1の内訳:
grep
:ファイル内の正規表現に一致するすべての行を出力します-P
:grep
をPerlスタイルの正規表現に一致させますo
:grep
は一致した文字列のみを出力します'^Sudo.+:\K.*$'
:grep
を引用符間の正規表現に一致させます正規表現#1の内訳:
^
:行の始まり.+
:1つ以上の文字\K
:前の一致を破棄.*
:0個以上の文字$
:行末コマンド#2の内訳:
grep
:ファイル内の正規表現に一致するすべての行を出力します'^Sudo.+:\K.*$'
:grep
を引用符間の正規表現に一致させますcut
:ファイル内の各行の指定されたセクションのみを印刷します-d:
:cut
が:
をフィールド区切り文字として解釈するようにします-f4
:cut
は4番目のフィールドのみを印刷します正規表現#2の内訳:
^
:行の始まり.*
:0個以上の文字$
:行末here と述べたように、-l
&-U
オプションを一緒に使用して発見する最も簡単な方法を検討します。単にusers
と入力するだけです。例:John
その後:
ユーザーがSudo
アクセス権を持っている場合、その特定のユーザーのSudo
アクセスレベルを出力します。
Sudo -l -U John
User John may run the following commands on this Host:
(ALL : ALL) ALL
ユーザーにSudoアクセス権がない場合、ローカルホストでSudo
を実行することはユーザーに許可されていないと表示されます:
Sudo -l -U John
User John is not allowed to run Sudo on localhost.
既に述べたように、答えは nix&Linux Stack Exchange にあります:
これは、ユーザー「saml」がwheelグループのメンバーであることを示しています。
$ getent group wheel wheel:x:10:saml
唯一の違いは、Ubuntuのグループがwheel
ではなく、Sudo
(またはUbuntuの古いバージョンではadmin
)であることです。したがって、コマンドは次のようになります。
getent group Sudo
Sudo -l -U
テストを展開すると、getent passwd
を使用して、Sudo
を使用できるユーザーを決定できます。 getent
を使用すると、LDAPユーザーなど、passwd
ファイルに存在しないユーザーにアクセスできます。
getent passwd | cut -f1 -d: | Sudo xargs -L1 Sudo -l -U | grep -v 'not allowed'
Sudo -U
は、利用できるゼロ以外の終了値を返さないため、出力をgrepすることになります。
ほとんどのUnixライクシステムでは、Sudoコマンドがあり、Sudo構成ファイルがあります。 rootとしてvisudoを実行:
:~$ Sudo bash
または
:~$ su
:~# visudo
管理者は、Sudoコマンドを使用できるグループの特権を検査および修正できます。
UbuntuのようなDebianベースのUnixライクなシステムでは、グループ4と27には一般にSudo特権へのアクセス権があります。
グループ4は管理者グループ(adm)で、グループ27はSudo gidです。
これらのグループに現在割り当てられているユーザーを確認するには、以下に示すように/ etc/groupファイルをcatします。
:~$ cat /etc/group
Ubuntu(Redhatベース、Oracle Solaris/Solarisベース、またはBSDベースのシステムではない)でのサンプル出力では、次の結果が得られます。
adm:x:4:youruser
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:youruser,mybrother
floppy:x:25:
tape:x:26:
Sudo:x:27:youruser,mybrother
言うまでもなく、youruserはシステムの管理者であり、グループ4(adm)のメンバーです。ただし、youruserとmybrotherは両方ともグループ27のメンバーであり、これはグループSudoのgid(グループID)番号です。したがって、mybrotherはルート権限(スーパーユーザー)を取得することもできます。
FedoraやSlackwareなどの多くのLinuxシステムには、ホイールグループgid = 10が組み込まれています。 Sudoコマンドが適用されたときに管理者権限を許可します。 BSDベースのシステム(FreeBSDなど)では、rootユーザーはgid 0のwheelグループのメンバーです。
また、idコマンドを使用することにより、すべてのユーザーはシステムに既知の別のユーザーのグループ情報を見つけることができます。
例えば:
:~$ id mybrother
サンプル出力
uid=1001(mybrother) gid=1001(mybrother) groups=1001(mybrother),24(cdrom),27(Sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)
このコマンドは、Sudo権限を持つユーザーのリストを返します。
awk -F ":" '{ system("groups " $1 " | grep -P \"[[:space:]]Sudo([[:space:]]|$)\"") }' /etc/passwd
出力は(例):
<username> : <username> adm cdrom Sudo dip plugdev lpadmin sambashare docker
ユーザー名のみを表示する場合、次のコマンド:
awk -F ":" '{ system("groups " $1 " | grep -P \"[[:space:]]Sudo([[:space:]]|$)\"") }' | awk -F ":" '{ print $1 }' /etc/passwd
コマンド:
cat /etc/group | grep Sudo
出力:
Sudo:x:27:Tom,Stacy
トム、ステイシーは、Sudo特権を持つユーザーです。