概要・前提
AIX のユーザー管理は /etc/passwd・/etc/security/passwd・/etc/security/user・/etc/security/group の複数ファイルに分散しています。IBM 独自のコマンド群(lsuser・lsgroup・chsec)を活用します。
主要ファイル一覧
| ファイル | 内容 |
|---|---|
/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/user の account_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/user の admgroups・sugroups・roles 属性で制御されます。
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/user の maxage(最大使用期間、週単位)・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