3.

Linux ユーザー一覧を確認するコマンド集 - /etc/passwd / getent / awk / who / w

編集
この記事の要点
  • 全登録ユーザー: cat /etc/passwd / getent passwd(LDAP や SSSD も含む)
  • ログインユーザーのみ: awk -F: "$7 !~ /nologin|false/ {print $1}" /etc/passwd
  • 現在ログイン中: who / w / users / last
  • UID 範囲で人間ユーザー抽出: 通常 UID >= 1000(CentOS)または UID >= 500(古い RHEL)
  • グループ一覧: cat /etc/group / getent group / groups ユーザー名

登録ユーザー一覧の取得

Linux サーバーに登録されているユーザーは /etc/passwd ファイルか getent passwd コマンドで一覧できます。両者の違いは重要:

# /etc/passwd の中身そのもの(ローカル定義のみ)
cat /etc/passwd

# getent passwd は NSS 経由 → LDAP / NIS / SSSD のユーザーも含む
getent passwd

# 1 ユーザー指定
getent passwd alice
# alice:x:1001:1001:Alice User:/home/alice:/bin/bash

# 件数
wc -l /etc/passwd
getent passwd | wc -l

/etc/passwd の読み方

alice:x:1001:1001:Alice User:/home/alice:/bin/bash
 |    |  |    |     |          |           |
 |    |  |    |     |          |           +-- ログインシェル
 |    |  |    |     |          +-------------- ホームディレクトリ
 |    |  |    |     +------------------------- GECOS(フルネーム等)
 |    |  |    +------------------------------- プライマリ GID
 |    |  +------------------------------------ UID
 |    +--------------------------------------- パスワード(x=/etc/shadow参照)
 +-------------------------------------------- ユーザー名

ログイン可能なユーザーだけ抽出

サービス用アカウント (httpd, mysql 等) は通常 /sbin/nologin/bin/false が割当てられます。ログイン可能な人間ユーザーだけを抽出する場合:

# ログイン可能シェルを持つユーザー
awk -F: '$7 !~ /nologin|false|sync|halt|shutdown/ {print $1, $7}' /etc/passwd

# ホームディレクトリが /home 以下のユーザーのみ
awk -F: '$6 ~ /^\/home\// {print $1}' /etc/passwd

# UID >= 1000(一般ユーザー、CentOS 7+ / Ubuntu / Debian)
awk -F: '$3 >= 1000 && $3 < 65534 {print $1}' /etc/passwd

# UID 500-999(古い RHEL 6 以前)
awk -F: '$3 >= 500 && $3 < 1000 {print $1}' /etc/passwd

# 名前のみリスト
cut -d: -f1 /etc/passwd
getent passwd | cut -d: -f1

現在ログイン中のユーザー

# 簡潔
users
# alice bob

# 詳細
who
# alice  pts/0  2026-06-11 10:00 (192.168.1.10)
# bob    pts/1  2026-06-11 10:30 (192.168.1.20)

# CPU / IDLE / 実行中コマンドも
w
#  10:50:00 up 5 days,  3:00,  2 users,  load average: 0.05, 0.10, 0.15
# USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
# alice    pts/0    192.168.1.10     10:00    0.00s  0.10s  0.00s w
# bob      pts/1    192.168.1.20     10:30    0.50m  0.05s  0.05s vim

# ログイン履歴(過去)
last
last -10                   # 直近 10 件
last alice                 # alice のログイン履歴
last reboot                # 再起動履歴

# 失敗ログイン
lastb                      # root 権限必要

UID で人間ユーザーを抽出(システム別)

システムシステムアカウント UID一般ユーザー UID
RHEL 7+, CentOS 7+, Rocky/AlmaLinux0〜9991000〜65533
RHEL 6 以前0〜499500〜65533
Ubuntu / Debian0〜9991000〜65533
SUSE / openSUSE0〜999(一部 100〜499 をサービス予約)1000〜65533
古い Solaris0〜99100〜2147483647

境界は /etc/login.defsUID_MIN / UID_MAX で定義されています:

grep -E '^UID_MIN|^UID_MAX' /etc/login.defs
# UID_MIN                  1000
# UID_MAX                 60000
# SYS_UID_MIN              201
# SYS_UID_MAX              999

# これを使って一般ユーザー抽出
UID_MIN=$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)
UID_MAX=$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)
awk -F: -v min=$UID_MIN -v max=$UID_MAX \
    '$3 >= min && $3 <= max {print $1}' /etc/passwd

グループ確認

# 全グループ
cat /etc/group
getent group

# 特定ユーザーが属するグループ
groups alice
id alice
# uid=1001(alice) gid=1001(alice) groups=1001(alice),10(wheel),100(users)

# 特定グループに属するメンバー
getent group wheel
# wheel:x:10:alice,bob,carol

# wheel グループメンバー(sudo 権限ユーザー)一覧
getent group wheel | cut -d: -f4

sudo 可能なユーザーを調べる

# sudoers ファイル(root のみ閲覧可)
sudo cat /etc/sudoers
sudo ls /etc/sudoers.d/

# wheel グループメンバー(RHEL系で sudo 権限を持つことが多い)
getent group wheel | cut -d: -f4

# sudo グループメンバー(Debian / Ubuntu)
getent group sudo | cut -d: -f4

# 全ユーザーの sudo 可否確認
for u in $(getent passwd | cut -d: -f1); do
    sudo -lU $u 2>/dev/null | grep -q '(ALL' && echo "$u has sudo"
done

パスワード設定状況

# /etc/shadow(root 専用)でパスワード状況確認
sudo awk -F: '{print $1, $2}' /etc/shadow
# alice $6$xxxxxx...     ← ハッシュあり = ログイン可
# guest !                ← ロック中
# nobody *               ← パスワード無し(ログイン不可)

# 各ユーザーのパスワード状態
sudo passwd -S alice
# alice PS 2026-05-01 0 99999 7 -1 (Password set, SHA512 crypt.)
#       L  = locked
#       NP = no password
#       PS = password set

# ロックされているユーザー一覧
sudo awk -F: '$2 ~ /^!/ {print $1}' /etc/shadow

よく使う組合せ

# 「実在する人間ユーザー」のみ抽出(推奨パターン)
getent passwd | \
  awk -F: '$3 >= 1000 && $3 < 65534 && $7 !~ /nologin|false/ {print $1}'

# 各ユーザーの最終ログイン
lastlog
# Username   Port   From                Latest
# alice      pts/0  192.168.1.10        Wed Jun 11 10:00:00 +0900 2026
# bob        **Never logged in**

# 90 日以上ログインしていないユーザー
lastlog -b 90

FAQ

Q: AD / LDAP のユーザーは /etc/passwd に出ない
A: SSSD や nss_ldap 経由のユーザーは /etc/passwd には載りません。getent passwd を使うこと。これは NSS(Name Service Switch)経由なので統合された結果を返します。

Q: ホームディレクトリが無いユーザーは
A: useradd -M で作成すれば作られません。サービス用アカウントは大抵そう。ls /home/etc/passwd$6 列を比較すると整合性確認できます。

Q: 一時的にユーザーをロックしたい
A: sudo usermod -L alice でロック(shadow の パスワードハッシュ先頭に ! が付く)。usermod -U で解除。SSH 鍵ログインは別途無効化が必要(鍵ベースは shadow 確認しない)。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. ディストリビューション
  2. コマンド一覧
  3. Linuxのサーバーに登録されているユーザの一覧を確認するコマンド
  4. リポジトリの一覧の確認
  5. エラー一覧
  6. ショートカットキー一覧
  7. ログを確認する便利なコマンド
  8. cronの導入と実行方法 (CentOS 7編)
  9. ディレクトリ内のファイル数を確認
  10. 複数ファイル内の文字列を一括置換する方法

最近更新/作成されたページ