AIXのログインとユーザー認証について、教科書レベルの内容をまとめてみました。
実機での検証で確かめたことも置いておきます。
内容の加筆修正は随時行います。
実機環境
- AIX 7.3.0.0(TL1 SP1)
- openssh.base.server 8.1.102
概要
AIXのログインとユーザー認証プロセスについて、フロー図を作ってみました。
以降はこのフロー図に従って順に内部的な動きを見ていきます。
この記事を書くきっかけにもなった、AIX,シェルなどの環境設定部分(図の「環境設定」~「シェルの起動まで」)については別途記事を書こうと思います。
loginの要求
図と照らしあわると「ユーザーによるログイン名の入力」に向かう矢印にあたる箇所の話です。
AIXのユーザーのログイン形態は以下2種類と言われています。
- gettyが待機するポートからのログイン
- TCP/IPネットワーク経由でサーバー(login)プログラムを起動させる
上記は2つともログイン要求の仕組みに違いはあるものユーザー認証の仕組みはパスワード認証方式の場合同じため、それぞれのログイン要求について述べ、ユーザー認証についてはまとめて記載します。
1. getty(/usr/sbin/getty)からのloginの要求
端末を使ったサーバーへの直接ログインがこのログイン形態です。
流れは以下の通りです。
init起動 → gettyをスタートさせる → gettyが待ち受けるポート(コンソール・デバイス)に端末が接続される → ログイン・プロンプトの表示 → 端末からの入力
細かい部分を見ていきます。
- ログインに使用されるポートは/etc/initabに記載されています。
grep getty /etc/inittab
で確認可能。以下、実機での出力
cons:0123456789:respawn:/usr/sbin/getty /dev/console
※この場合、待ち受けているポートは/dev/consoleになります。
現在使用しているコンソール・デバイスはlscons
で確認可能です。
実機でHMCからのVterm(/dev/vty)接続の場合、出力は以下のようになります
# lscons
/dev/vty0
- 各ポートの構成は/etc/security/login.cfgにて属性と値で設定できます。
内容はcat
コマンドなどで確認可能です。詳細な属性の説明は設定ファイル内に記載ありますが、こちらのドキュメントにも記載があります。
(https://www.ibm.com/docs/en/aix/7.3?topic=files-logincfg-file)
以下、属性値を実機で確認したものです。
default:
sak_enabled = false
logintimes =
logindisable = 0
logininterval = 0
loginreenable = 0
logindelay = 0
・・・・
usw:
shells = /bin/sh,/bin/bsh,/bin/csh,/bin/ksh,/bin/tsh,/bin/ksh93,/bin/bash,/usr/bin/sh,/usr/bin/bsh,/usr/bin/csh,/usr/bin/ksh,/usr/bin/tsh,/usr/bin/ksh93,/usr/bin/bash,/usr/bin/rksh,/usr/bin/rksh93,/usr/sbin/uucp/uucico,/usr/sbin/snappd
maxlogins = 32767
logintimeout = 60
maxroles = 8
auth_type = STD_AUTH
pwd_algorithm = ssha256
unix_passwd_compat = true
/etc/security/login.cfgではherald属性にてログイン・プロンプトの設定ができます。
herald Specifies the initial message to be printed out when getty or
login prompts for a login name. This value is a string that is
written out to the login port. If the herald is not specified
for a port or in the default stanza, then the default herald is
gotten from the message catalog associated with the language
set in /etc/environment.
AIXにおいて端末からのログインを実行するには対象ユーザーのlogin属性の値がTrueである必要があります。
実機でログインプロンプトの変更
デフォルト
AIX Version 7
Copyright IBM Corporation, 1982, 2022.
Console login:
viでPortのスタンザを変更
default:
herald = "login to console: "
・・・
exitしてログインプロンプト表示させてみると、、、
login to console:
2. TCP/IPネットワーク経由でloginの要求
rlogin,telnet,sshログインがこのログイン形態にあたります。
流れは以下の通りです。
(前提)rlogind/telnetd/sshdがactive状態 → クライアントからrlogin/telnet/sshコマンドの発行 → サーバーとの通信確立 → rlogind/telnetd/sshdからlogin要求 → 入力
以下、細かい部分です。
- 前提のrlogind/telnetd/sshdの状態は
lssrc -s サービス名
で確認できます
# lssrc -s sshd
Subsystem Group PID Status
sshd ssh 7274760 active
rlogind,telnetdについてはinetdの子プロセスとして動きます。そのため、/etc/inetd.confにてrlogind,telnetdが有効になるように以下のような記載が存在する必要があります。
telnet stream tcp6 nowait root /usr/sbin/telnetd telnetd -a #telnetの場合
login stream tcp6 nowait root /usr/sbin/rlogind rlogind #rloginの場合
AIX7.3ではセキュリティの都合でデフォルトではコメントアウトされているので注意が必要です
sshdについてはinetdではなくその上位のsrcmstrの子プロセスで動くため/etc/inetd.confの編集は必要ありません。また、/etc/ssh/sshd_configで詳細の設定が可能です。
※ここでsshについて内容を書くと長くなるため割愛します。
AIXにおいてTCP/IPネットワーク経由のログインを実行するには対象ユーザーのrlogin属性の値がTrueである必要があります。
ユーザーの認証
図と照らしあわると「ユーザーによるログイン名の入力」~「ログエントリーの追加」にあたる箇所の話です。
ユーザーの認証については以下の前提条件があります。
- 端末からのログインの場合、対象ユーザーの属性値loginがtrueであること
- TCP/IPネットワーク経由のログインの場合、対象ユーザーの属性値rloginがtrueであること
設定はchuser login=true ユーザー名
chuser rlogin=true ユーザー名
で設定をするか、smitty chuser
でも設定できます
User can LOGIN? true + #login属性
User can LOGIN REMOTELY(rsh,tn,rlogin)? true + #rlogin属性
ユーザー認証(パスワード認証方式)の流れは以下の通りです。
実際試しにログインを失敗(パスワード入力ミス)してみました。
login to console: root
root's Password:
You entered an invalid login name or password.
login: root
root's Password:
You entered an invalid login name or password.
login: root
root's Password:
*******************************************************************************
* *
* *
* Welcome to AIX Version 7.3! *
* *
* *
* Please see the README file in /usr/lpp/bos for information pertinent to *
* this release of the AIX Operating System. *
* *
* *
*******************************************************************************
2 unsuccessful login attempts since last login.
Last unsuccessful login: Sun Oct 6 21:21:13 CDT 2024 on /dev/vty0
Last login: Sun Oct 6 21:17:41 CDT 2024 on /dev/vty0
すると/etc/security/failedloginには記録されています。(diff差分で確認)
[haship10t@root]/# diff loginfail1.txt loginfail2.txt
3c3
< f▒▒▒UNKNOWN_USERvty0|
f▒▒UNKNOWN_USERvty0|f▒▒?
・・・(f▒8▒hashinokvty0e*g<▒
---
> f▒▒▒UNKNOWN_USERvty0|
・・・(f▒8▒hashinokvty0e*g<▒rootvty0e0gE▒rootvty0e0gE▒