概要・前提

AIX のユーザー管理は /etc/passwd/etc/security/passwd/etc/security/user/etc/security/group の複数ファイルに分散しています。IBM 独自のコマンド群(lsuserlsgroupchsec)を活用します。

主要ファイル一覧

ファイル 内容
/etc/passwd基本ユーザー情報(UID/GID/ホーム/シェル)
/etc/security/passwdパスワードハッシュ・最終変更日
/etc/security/userパスワードポリシー・ロック状態・特権フラグ
/etc/security/lastlog最終ログイン日時
/etc/security/groupグループメンバー情報(AIX 拡張)

ユーザー一覧の取得

lsuser コマンドで全ユーザーを表示

# 全ユーザーの基本情報を一覧表示
lsuser -a ALL

# 主要属性を指定して整形表示
lsuser -f ALL | grep -E '^[a-zA-Z]|id=|home=|shell=|account_locked='

/etc/passwd から一覧取得

# UID / GID / ホームディレクトリ / シェルを整形表示
awk -F: '{printf "%-20s UID=%-6s GID=%-6s HOME=%-25s SHELL=%s\n", $1,$3,$4,$6,$7}' /etc/passwd

UID 200 以上の一般ユーザーのみ抽出(AIX 標準 UID 範囲)

awk -F: '$3 >= 200 && $3 < 65535 {print $1, $3, $6}' /etc/passwd

グループ一覧の取得

# グループ一覧
lsgroup -a ALL

# /etc/group から表示
awk -F: '{printf "GROUP=%-20s GID=%-6s MEMBERS=%s\n", $1,$3,$4}' /etc/group

ロック状態の確認

AIX のアカウントロックは /etc/security/useraccount_locked 属性で管理されます。

lsuser でロック状態を確認

# 全ユーザーの account_locked 属性を確認
lsuser -a account_locked ALL

# ロック中ユーザーのみ抽出
lsuser -a account_locked ALL | grep 'account_locked=true'

/etc/security/user を直接確認

grep -A 20 '^[a-zA-Z]' /etc/security/user | grep -E '^[a-zA-Z]|account_locked'

ログイン失敗によるロック確認(unsuccessful_login_count)

lsuser -a unsuccessful_login_count ALL | grep -v 'unsuccessful_login_count=0'

アカウントロック解除

# ロック解除
chuser account_locked=false username

# または
/usr/bin/chsec -f /etc/security/user -s username -a account_locked=false

最終ログイン日時

last コマンドで最終ログインを確認

# 全ユーザーの直近ログイン
last

# 特定ユーザー
last username

# 直近 30 件
last | head -30

/etc/security/lastlog を確認

# lastlog ファイルの内容を整形表示
/usr/sbin/acct/ac -p 2>/dev/null || true

# lsuser で最終ログイン情報を取得
lsuser -a time_last_login ALL

lsuser で最終ログイン日時を一覧表示

lsuser -a time_last_login unsuccessful_login_count account_locked ALL

特権の確認

AIX の特権は uid=0 の root に加え、/etc/security/useradmgroupssugroupsroles 属性で制御されます。

UID=0 のアカウントを確認

awk -F: '$3 == 0 {print "UID=0:", $1}' /etc/passwd

system グループ(管理グループ)のメンバー確認

lsgroup -a users system

AIX RBAC(ロールベースアクセス制御)の確認

# ユーザーに割り当てられたロールを確認
lsuser -a roles ALL | grep -v 'roles=$'

# すべてのロール定義を確認
lsrole ALL

特権コマンド実行権限(authorizations)の確認

# 各ユーザーの authorizations を確認
lsuser -a authorizations ALL | grep -v 'authorizations=$'

setuid/setgid ビット付きファイルの確認

# setuid ビット付き実行ファイル
find / -perm -4000 -type f 2>/dev/null | sort

# setgid ビット付き実行ファイル
find / -perm -2000 -type f 2>/dev/null | sort

sudo 権限

AIX では /etc/sudoers の他に、AIX 独自の RBAC(Role Based Access Control)による権限委譲もあります。

/etc/sudoers の確認

# sudoers の内容を表示
cat /etc/sudoers
ls -la /etc/sudoers.d/
cat /etc/sudoers.d/*

NOPASSWD 設定を抽出

grep -r 'NOPASSWD' /etc/sudoers /etc/sudoers.d/ 2>/dev/null

AIX RBAC の委任コマンド確認(/etc/security/privcmds)

cat /etc/security/privcmds 2>/dev/null || echo "Not found"

# privilege コマンド一覧
lssecattr -c ALL 2>/dev/null | head -50

パスワード期限

AIX のパスワードポリシーは /etc/security/usermaxage(最大使用期間、週単位)・minage(最小使用期間)・pwdwarntime(警告日数)で制御されます。

全ユーザーのパスワードポリシーを確認

lsuser -a maxage minage pwdwarntime lastupdate ALL

パスワード無期限(maxage=0)ユーザーを抽出

lsuser -a maxage ALL | grep 'maxage=0'

/etc/security/user のデフォルトポリシーを確認

grep -A 30 '^default:' /etc/security/user

最終パスワード変更日の確認

# /etc/security/passwd から最終変更日を確認
grep -A 5 '^[a-zA-Z]' /etc/security/passwd | grep -E '^[a-zA-Z]|lastupdate'

一定期間未使用ユーザー

lsuser で最終ログイン日時を取得して判定

# time_last_login は UNIX 時刻(秒)で取得される
lsuser -a time_last_login ALL | while IFS=' ' read line; do
  user=$(echo "$line" | awk -F' ' '{print $1}')
  ts=$(echo "$line" | grep -o 'time_last_login=[0-9]*' | cut -d= -f2)
  if [ -n "$ts" ] && [ "$ts" -gt 0 ]; then
    now=$(date +%s)
    days=$(( (now - ts) / 86400 ))
    if [ "$days" -gt 90 ]; then
      echo "UNUSED($days days): $user"
    fi
  else
    echo "NEVER_LOGGED_IN: $user"
  fi
done

last コマンドから過去90日ログインがないユーザーを抽出

# 全ログインユーザー名を抽出
last | awk '{print $1}' | sort -u > /tmp/recent_users.txt

# passwd からユーザー一覧を取得して比較
awk -F: '$3 >= 200 {print $1}' /etc/passwd | while read user; do
  if ! grep -q "^$user$" /tmp/recent_users.txt; then
    echo "NOT_SEEN_IN_WTMP: $user"
  fi
done

無効化されたユーザー

AIX のアカウント無効化は account_locked=true の設定が主な方法です。シェルを /bin/false に変更する方法もあります。

account_locked=true のユーザーを一覧表示

lsuser -a account_locked ALL | grep 'account_locked=true'

/bin/false シェルのユーザーを確認

awk -F: '$7 ~ /false|nologin/ {print "DISABLED:", $1, $7}' /etc/passwd

アカウントの有効期限確認(expires 属性)

# expires 属性(MMDDHHmmYY 形式)を確認
lsuser -a expires ALL | grep -v 'expires=0'

アカウントの有効化・無効化

# 無効化
chuser account_locked=true username

# 有効化
chuser account_locked=false username

# ログインシェルを変更して無効化
chsh -s /bin/false username