概要・前提

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 モードは getprpwu_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