1. 概要

ユーザーとグループは、Linuxのセキュリティ管理における2つの重要な要素です。 このクイックチュートリアルでは、現在のシステム上のすべてのグループを一覧表示する方法を見ていきます。

さらに、特定のユーザーが属するすべてのグループを取得する方法についても説明します。

2. / etc /groupファイルの読み取り

Linuxでは、すべてのグループがファイルで定義されています / etc/group。 さらに、各グループエントリを次の形式で保存します。

group_name:password(encrypted):GID:user_list

まず、 / etc /groupの例を見てみましょう。

$ cat /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin
adm:x:4:root,daemon
tty:x:5:
disk:x:6:root
lp:x:7:cups,daemon,kent
mem:x:8:
...

/ etc /groupファイルはプレーンテキストファイルです。 したがって、ファイルを読み取り、Linuxコマンドラインfuを使用して、グループ名などの必要なデータを抽出できます。

$ cut -d: -f1 /etc/group
root
bin
daemon
sys
adm
tty
disk
lp
mem
...

上記の例では、cutコマンドを使用してグループ名のみを抽出しました。 したがって、出力には、システム上のすべてのグループ名が含まれ、1行に1つのグループが含まれます。

3. getentコマンドの使用

/ etc / group ファイルは、ローカルシステム上のすべてのグループを定義します。

ただし、ネットワークシステムで作業している場合、システムは / etc / group ファイルからローカルグループを読み取り、はネットワークサービスなどのグループも読み取ることができます。 LDAP。

getent コマンドを使用して、 group データベースを読み取り、すべてのグループを取得できます。

$ getent group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin
adm:x:4:root,daemon
tty:x:5:
disk:x:6:root
lp:x:7:cups,daemon,kent
mem:x:8:
...

出力が示すように、各グループのフォーマットは / etc /groupファイルと同じフォーマットです。

グループ名のみを取得したい場合は、同じcutトリックがここでも役立ちます。

$ getent group | cut -d: -f1
root
bin
daemon
sys
adm
tty
disk
lp
mem
...

4. 特定のユーザーのグループを取得する

システムですべてのグループを定義する方法を学びました。 より一般的なケースでは、特定のユーザーがどのグループに属しているかを知りたい場合があります。

このセクションでは、この情報を取得する2つの方法を示します。 どちらも非常に簡単です。

目標を達成するための最初の方法は、groupsコマンドを使用することです。 このコマンドは、shadow-utilsパッケージに同梱されています。 したがって、デフォルトですべてのLinuxディストリビューションで使用できます。

引数を指定しない場合、groupsコマンドは現在のユーザーのすべてのグループを一覧表示します。

kent$ groups
lp wheel dbus network video audio optical storage input users vboxusers docker kent

ただし、必要に応じて、コマンドにユーザー名を渡すことができ、指定されたユーザーが属するグループのみが報告されます。

kent$ groups root
root bin daemon sys adm disk wheel log

または、idコマンドを使用して実行することもできます。

id コマンドは、ユーザー名、本名、グループなどのユーザー情報を報告するための便利なユーティリティです。 

idコマンドはCoreutilsのメンバーであるため、デフォルトですべてのLinuxディストリビューションにインストールされています。

-Gオプションと-nオプションを組み合わせて、idコマンドで特定のユーザーのすべてのグループ名を出力することができます

groups コマンドと同様に、 id にユーザー名を指定しない場合、現在のユーザーのグループ名が出力されます。

kent$ id -Gn
kent lp wheel dbus network video audio optical storage input users vboxusers docker

ただし、コマンドにユーザー名を渡すと、指定されたユーザーのグループ名が自然に出力されます。

kent$ id -Gn root
root bin daemon sys adm disk wheel log

5. 結論

この簡単な記事では、最初に、システムですべてのグループを定義するための2つのアプローチを学びました。

  • / etc /groupファイルの解析
  • getentコマンドの使用

後で、例を通じて特定のユーザーのグループ名を取得するための2つの簡単なコマンド idgroups)についても説明しました。