概要・前提
HP-UX のユーザー管理は /etc/passwd の他に、HP-UX 独自の Trusted System(Trusted Mode)環境では /tcb/files/auth/ 配下の TCB(Trusted Computing Base)ファイルにセキュリティ情報が格納されます。信頼モードの有無によってコマンドが異なります。
Trusted モードの確認方法
getprdef -l 2>/dev/null && echo "Trusted Mode: ON" || echo "Trusted Mode: OFF"
主要ファイル一覧
| ファイル | 内容 |
|---|---|
/etc/passwd | 基本ユーザー情報 |
/etc/shadow | パスワードハッシュ・期限(非 Trusted) |
/tcb/files/auth/<initial>/<user> | TCB セキュリティ情報(Trusted モード) |
/etc/group | グループ情報 |
ユーザー一覧の取得
全ユーザー一覧(/etc/passwd)
awk -F: '{printf "%-20s UID=%-6s GID=%-6s HOME=%-25s SHELL=%s\n", $1,$3,$4,$6,$7}' /etc/passwd
UID 100 以上の一般ユーザーのみ抽出
awk -F: '$3 >= 100 && $3 < 65534 {print $1, $3, $6, $7}' /etc/passwd
ログインシェルを持つユーザーのみ抽出
grep -v -E ':/sbin/nologin$|:/bin/false$|:/usr/bin/false$' /etc/passwd |
awk -F: '{print $1, $3, $7}'
グループ一覧の取得
awk -F: '{printf "GROUP=%-20s GID=%-6s MEMBERS=%s\n", $1,$3,$4}' /etc/group
ロック状態の確認
非 Trusted モードは shadow ファイルを、Trusted モードは getprpw コマンドまたは TCB ファイルを確認します。
非 Trusted モード:shadow でロックを確認
# パスワードフィールドが !! または ! で始まる=ロック
sudo awk -F: '$2 ~ /^!/ {print "LOCKED:", $1}' /etc/shadow
Trusted モード:getprpw コマンドで確認
# ロック状態を確認
getprpw -m lockout username
# 全ユーザーで確認
for user in $(awk -F: '$3 >= 100 {print $1}' /etc/passwd); do
lockout=$(getprpw -m lockout "$user" 2>/dev/null)
echo "$user: $lockout"
done
Trusted モード:TCB ファイルを直接確認
# ユーザー 'john' の TCB ファイルを確認(頭文字ディレクトリ)
cat /tcb/files/auth/j/john 2>/dev/null | grep 'u_lock\|u_lockout'
ロック解除
# 非 Trusted: passwd コマンド
passwd -u username
# Trusted: modprpw コマンド
modprpw -k -l username # ロック
modprpw -k username # 解除
最終ログイン日時
last コマンドで確認
# 直近のログイン履歴
last
# 特定ユーザー
last username
lastlog コマンドで確認
lastlog
# 特定ユーザー
lastlog -u username
Trusted モード:getprpw で最終ログイン確認
# 最終ログイン時刻を確認(UNIX 時刻)
getprpw -m u_suclog username
# 全ユーザーで一括確認
for user in $(awk -F: '$3 >= 100 {print $1}' /etc/passwd); do
ts=$(getprpw -m u_suclog "$user" 2>/dev/null | cut -d= -f2)
echo "$user last_login=$ts"
done
特権の確認
UID=0 のアカウントを確認
awk -F: '$3 == 0 {print "UID=0:", $1}' /etc/passwd
root グループのメンバー確認
grep '^root:' /etc/group
Trusted モード:管理者フラグの確認
# sys_admin フラグが設定されているユーザーを確認
for user in $(awk -F: '$3 >= 0 {print $1}' /etc/passwd); do
admin=$(getprpw -m u_isceroot "$user" 2>/dev/null)
if echo "$admin" | grep -q '1'; then
echo "ADMIN: $user ($admin)"
fi
done
setuid/setgid ビット付きファイルの確認
# setuid ビット付き実行ファイル
find / -perm -4000 -type f 2>/dev/null | sort
# setgid ビット付き実行ファイル
find / -perm -2000 -type f 2>/dev/null | sort
sudo 権限
/etc/sudoers の確認
cat /etc/sudoers
ls -la /etc/sudoers.d/ 2>/dev/null
# NOPASSWD 設定を抽出
grep -r 'NOPASSWD' /etc/sudoers /etc/sudoers.d/ 2>/dev/null
特定ユーザーの sudo 権限確認
# そのユーザー自身が実行
sudo -l -U username
パスワード期限
非 Trusted モードは /etc/shadow の第5フィールド(最大使用日数)を、Trusted モードは getprpw の u_maxlen(最大パスワード長・期間)を確認します。
非 Trusted:shadow ファイルで確認
# フィールド:user:pw:lastchg:min:max:warn:inactive:expire
sudo awk -F: '{printf "USER=%-20s MIN=%-5s MAX=%-5s WARN=%s\n",$1,$4,$5,$6}' /etc/shadow
非 Trusted:パスワード無期限ユーザーを抽出
sudo awk -F: '$5 == 99999 || $5 == "" {print "NO EXPIRY:", $1}' /etc/shadow
Trusted モード:getprpw でパスワード期限を確認
# パスワード最終変更日と有効期間を確認
for user in $(awk -F: '$3 >= 100 {print $1}' /etc/passwd); do
info=$(getprpw -m u_pwchanger,u_exp "$user" 2>/dev/null)
echo "$user: $info"
done
デフォルトパスワードポリシーの確認
# 非 Trusted
grep -E 'MAXWEEKS|MINWEEKS|PASSWORD_MAXDAYS' /etc/default/security 2>/dev/null
# Trusted モード:デフォルトプロファイルを確認
getprdef -l 2>/dev/null
一定期間未使用ユーザー
lastlog で 90 日以上未ログインを抽出
lastlog | awk '
NR==1 { next }
$NF == "in" { print "NEVER:", $1; next }
{
cmd="date -d \""$4" "$3" "$5" "$6"\" +%s 2>/dev/null"
cmd | getline ts; close(cmd)
now=systime()
days=int((now-ts)/86400)
if (days > 90) print "UNUSED(" days " days):", $1
}
'
Trusted モード:getprpw の最終ログイン日時で判定
NOW=$(date +%s)
for user in $(awk -F: '$3 >= 100 {print $1}' /etc/passwd); do
ts=$(getprpw -m u_suclog "$user" 2>/dev/null | grep -o '[0-9]*$')
if [ -n "$ts" ] && [ "$ts" -gt 0 ]; then
days=$(( (NOW - ts) / 86400 ))
if [ "$days" -gt 90 ]; then
echo "UNUSED($days days): $user"
fi
else
echo "NEVER_LOGGED_IN: $user"
fi
done
無効化されたユーザー
非 Trusted:shadow のロック状態を確認
sudo awk -F: '$2 ~ /^!/ {print "LOCKED:", $1}' /etc/shadow
nologin シェルのユーザーを確認
awk -F: '$7 ~ /nologin|false/ {print "NOLOGIN:", $1, $7}' /etc/passwd
Trusted モード:ロック・無効状態を確認
# 管理者による明示的ロック
for user in $(awk -F: '$3 >= 0 {print $1}' /etc/passwd); do
lock=$(getprpw -m lockout "$user" 2>/dev/null | grep -o '[01]$')
[ "$lock" = "1" ] && echo "LOCKED: $user"
done
アカウントの有効化・無効化
# 非 Trusted: passwd コマンド
passwd -l username # ロック
passwd -u username # アンロック
# Trusted: modprpw コマンド
modprpw -l username # ロック(管理者ロック)
modprpw -k username # ロック解除
# シェルを変更して無効化
usermod -s /sbin/nologin username