概要・前提
Solaris のユーザー管理は Linux と類似した /etc/passwd・/etc/shadow・/etc/group に加え、Solaris 独自の RBAC(Role Based Access Control)機能があります。Solaris 11 からは useradm コマンドも利用できます。
主要ファイル一覧
| ファイル | 内容 |
|---|---|
/etc/passwd | 基本ユーザー情報 |
/etc/shadow | パスワードハッシュ・期限情報 |
/etc/user_attr | RBAC 属性(roles・profiles・authorizations) |
/etc/security/auth_attr | 認可定義 |
/etc/security/prof_attr | プロファイル定義 |
/etc/security/exec_attr | 実行属性(特権付きコマンド) |
ユーザー一覧の取得
全ユーザー一覧(/etc/passwd)
awk -F: '{printf "%-20s UID=%-6s GID=%-6s HOME=%-25s SHELL=%s\n", $1,$3,$4,$6,$7}' /etc/passwd
UID 100 以上の一般ユーザーのみ(Solaris 標準 UID 範囲)
awk -F: '$3 >= 100 && $3 < 65534 {print $1, $3, $6, $7}' /etc/passwd
Solaris 11: useradm list
# Solaris 11 以降
useradm list
グループ一覧の取得
awk -F: '{printf "GROUP=%-20s GID=%-6s MEMBERS=%s\n", $1,$3,$4}' /etc/group
ロック状態の確認
Solaris の shadow ファイルでは、パスワードフィールドが *LK* の場合がロック状態です。
passwd コマンドでステータス確認
# 特定ユーザー
passwd -s username
# 全ユーザーのステータス一覧
passwd -sa
出力の第2フィールドの意味は以下のとおりです。
| 表示 | 意味 |
|---|---|
| PS | Password Set(有効) |
| LK | Locked(ロック済み) |
| NP | No Password(パスワードなし) |
| UP | Unable to get status |
shadow ファイルからロックユーザーを直接抽出
sudo awk -F: '$2 ~ /\*LK\*|^!/ {print "LOCKED:", $1}' /etc/shadow
ロック・アンロック
# ロック
passwd -l username
# アンロック
passwd -u username
最終ログイン日時
last コマンドで確認
# 直近のログイン履歴
last
# 特定ユーザー
last username
lastlog コマンド(Solaris 10 以降)
lastlog
# 特定ユーザー
lastlog -u username
who -a / finger コマンド
# 現在ログイン中のユーザー
who -a
# ユーザー情報(finger が利用可能な場合)
finger username
特権の確認
Solaris の特権管理は UID=0 の root に加え、RBAC の ロール(role)・プロファイル(profile)・認可(authorization)で細かく制御されます。
UID=0 のアカウントを確認
awk -F: '$3 == 0 {print "UID=0:", $1}' /etc/passwd
root グループのメンバー確認
grep '^root:' /etc/group
/etc/user_attr で RBAC 属性を確認
# roles / profiles / auths が設定されているユーザーを確認
cat /etc/user_attr
# ロール付与されたユーザーのみ抽出
grep 'roles=' /etc/user_attr | grep -v '^#'
ユーザーのプロファイル・認可を確認
# 特定ユーザーの権限情報を確認
profiles username
auths username
roles username
sudo 権限 / RBAC
Solaris では sudo の代わりに RBAC の pfexec(Profile Execute)が推奨されます。ただし sudo も利用可能です。
sudo の確認
cat /etc/sudoers
ls /etc/sudoers.d/ 2>/dev/null
grep -r 'NOPASSWD' /etc/sudoers /etc/sudoers.d/ 2>/dev/null
RBAC プロファイルの確認(pfexec)
# 全ユーザーのプロファイルを確認
for user in $(awk -F: '$3 >= 100 {print $1}' /etc/passwd); do
pf=$(profiles "$user" 2>/dev/null | tr '\n' ',' | sed 's/,$//')
echo "$user: $pf"
done
Primary Administrator ロールのユーザーを確認
grep 'roles=Primary Administrator' /etc/user_attr
exec_attr でコマンド権限を確認
cat /etc/security/exec_attr | grep -v '^#' | grep -v '^$'
パスワード期限
passwd -sa で全ユーザーのパスワード情報を表示
passwd -sa
shadow ファイルから直接確認
# /etc/shadow のフィールド構成:
# user:pw:lastchg:min:max:warn:inactive:expire
sudo awk -F: '{printf "USER=%-20s LASTCHG=%-8s MIN=%-5s MAX=%-5s WARN=%-5s EXPIRE=%s\n",$1,$3,$4,$5,$6,$8}' /etc/shadow
パスワード無期限(max=99999)ユーザーを抽出
sudo awk -F: '$5 == 99999 || $5 == "" {print "NO EXPIRY:", $1}' /etc/shadow
デフォルトポリシーの確認
grep -E 'MAXWEEKS|MINWEEKS|PASSLENGTH|WARNWEEKS' /etc/default/passwd
一定期間未使用ユーザー
lastlog で 90 日以上未ログインを抽出
lastlog -b 90 2>/dev/null | grep -v 'Username' | grep -v 'Never logged in'
shadow ファイルから最終パスワード変更日で判定
TODAY=$(( $(date +%s) / 86400 ))
sudo awk -F: -v today="$TODAY" '
$3 != "" && $3 > 0 {
diff = today - $3
if (diff > 90) printf "USER=%-20s LAST_PW_CHANGE=%s days ago\n", $1, diff
}
' /etc/shadow
無効化されたユーザー
ロック中ユーザーを抽出
passwd -sa | awk '$2 == "LK" {print "LOCKED:", $1}'
nologin シェルのユーザーを確認
awk -F: '$7 ~ /nologin|false/ {print "NOLOGIN:", $1, $7}' /etc/passwd
アカウント有効期限切れのユーザーを確認
# shadow 第8フィールド:アカウント有効期限(1970/01/01 からの日数)
TODAY=$(( $(date +%s) / 86400 ))
sudo awk -F: -v today="$TODAY" '
$8 != "" && $8 > 0 && $8 < today {
print "EXPIRED:", $1
}
' /etc/shadow
アカウントの有効化・無効化
# ロック
passwd -l username
# アンロック
passwd -u username
# nologin シェルで無効化
usermod -s /usr/sbin/nologin username