ルート権限を持つすべてのユーザー、つまりsudoをリストするコマンドが必要ですか?
私がsudoerユーザーだとします。他のすべてのsudoerユーザーを知るにはどうすればよいですか?
ルート権限を持つすべてのユーザー、つまりsudoをリストするコマンドが必要ですか?
私がsudoerユーザーだとします。他のすべてのsudoerユーザーを知るにはどうすればよいですか?
回答:
sudo
グループにリストされているsudoersをリストする必要がある場合、それを行う最善の方法は、このコマンドを実行することだと思います(この回答の他のコマンドよりも計算が軽いはずです):
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
これらのコマンドはいずれも、sudo
グループにリストされているすべてのユーザーを出力します/etc/group
(存在する場合)。
コマンド#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個以上の文字$
:行末getent group sudo | cut -d: -f4
、またはawkを使用しますが、どちらの方法でも、グループとpasswdは区切り文字付きの固定形式であることを覚えておいてください。
getent group
はまったく必要ありません。getent group foo
はに似てgrep foo /etc/group
いますが、より能力があります。
getent
、どのように計算grep
してgetent
比較するのですか?走るのは軽くなりますgetent
か?
sudo
グループのメンバーであることを前提としています。一部のUNIXには、などの他のグループがありますwheel
。@muruによって答えは関係なく、彼らがしているものをグループのすべてのsudoersファイルが含まれません。
ここで述べたように、-l
&-U
オプションを一緒に発見する最も簡単な方法を検討し、入力するだけで、users
たとえば次のようJohn
に入力します。
ユーザーにsudo
アクセス権がある場合、sudo
その特定のユーザーのアクセスレベルを出力します。
sudo -l -U John
User John may run the following commands on this host:
(ALL : ALL) ALL
ユーザーにsudoアクセス権がない場合、localhostでの実行が許可されていないことを表示しますsudo
。
sudo -l -U John
User John is not allowed to run sudo on localhost.
"%domain admins@mycompany.intra" ALL=(ALL) ALL
に機能します。私はこれが非ローカルユーザーでも同様に機能することを知らなかったので、あなたは多くの時間を節約してくれました。
すでに述べたように、答えはUnix&Linux Stack Exchangeで見つけることができます:
これは、ユーザー「saml」がwheelグループのメンバーであることを示しています。
$ getent group wheel wheel:x:10:saml
唯一の違いは、Ubuntuの中のグループではないことであるwheel
が、sudo
(またはadmin
Ubuntuの古いバージョンで)。したがって、コマンドは次のようになります。
getent group sudo
geten group
、そして、私は多くの異なる数字を見ます。私の元の質問は、ユーザーが(で作成したシステムユーザであるかどうかを確認する方法、であるuseradd -r
)
sudo -l -U
テストを拡張すると、を使用getent passwd
できるユーザーを決定するために使用できますsudo
。を使用getent
するとpasswd
、LDAPユーザーなど、ファイルに存在しないユーザーにアクセスできます。
getent passwd | cut -f1 -d: | sudo xargs -L1 sudo -l -U | grep -v 'not allowed'
sudo -U
は、利用できるゼロ以外の終了値を返さないため、出力をgrepすることになります。
sudo
です。
ほとんどの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特権を持つユーザーです。
cat
。
に言及されていない、または見つけられないvagrant
場合sudo
でも、ユーザーがどのように使用できるかについて困惑しました。/etc/sudoers
/etc/group
getent
結局のところsudo
も下のすべてのファイルからエントリを読み込みます/etc/sudoers.d/
。そのため、そのディレクトリを調べていない場合、実際にsudo
アクセスしているユーザーの数に気付かないことがあります。
この種のsudo
アクセスは、使用してジョーカーの答えによって検出することができますsudo -l -U vagrant
が、すべてのいずれかに依存している、ここで他の回答のいずれかによって検出されていませんgetent
か/etc/group
。