この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:5
ページ更新者:atom
更新日時:2026-06-11 07:07:02

タイトル: Linuxのサーバーに登録されているユーザの一覧を確認するコマンド
SEOタイトル: 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 確認しない)。