ssh のパスワード認証を停止し鍵認証に移行する
これまで ssh トンネルを使って IBM i に接続していました。その ssh セッションではパスワード認証を使っていましたよね。
つまり、インターネットに向けて公開されている sshd がパスワード認証なのです。さらに、今回は、作業ユーザーに ADMIN という分かりやすい名前を付ました。不正アクセスを試みられて当たり前の状態でした。
デプロイ後のシステム値 QMAXSIGN はデフォルトの「3」です。そのため、不正ログインが 3 回試行されると、ユーザープロフィールが「*DISABLED」になり接続できなくなってしまいます。
どんなに複雑で長いパスワードを設定しても、ユーザーが使えなくなるのは困ります。
二つの改善点
早急に下記の対策をとる必要があります。
- パスワード認証を停止するまでの作業ユーザー名は分かりにくいものにする
- 速やかにssh のパスワード認証を停止し鍵認証に移行する
ユーザー・プロフィールは 8文字まで? 10文字使う?
分かりにくいユーザー名を付けるのに、ユーザー名を長くしたいのが人情です。
IBM i で使えるユーザープロフィールの最大長は10文字です。
しかし、標準では ssh 接続に使えるのは 8 文字まで になります。
こらは PASE 環境のもとになっている AIX (というか POSIX 標準)の制約を引き継いでいるからです。
ユーザー名とグループ名の長さの制限パラメーターのデフォルト値は 9 文字です。 AIX® 5.3 以降では、ユーザー名とグループ名の長さの制限を 9 文字から 256 文字に増やすことができます。 ユーザー名とグループ名の長さの制限パラメーターには終了 NULL 文字があるため、実際の有効な名前の長さは 8 文字から 255 文字までです。
AIX と同様に 9 文字以上のユーザー名を ssh で使う設定が IBM i にもあります。もちろん 10 文字までですが...
Allowing or Denying Access to the IBM i Secure Shell Daemon (SSHD) Using Group Profiles
There is an eight-character limitation on the user profiles that can access the IBM i through SSHD. The eight-character limitation is also placed on any group profile that the user might be a member of. If any of the other members in a group profile have more than eight characters in their user name, access to the system will be denied. In order to get around the eight-character limitation, you can either create system wide environment variable or add a specicial directive to the sshd_config file:
ADDENVVAR ENVVAR(PASE_USRGRP_LIMITED) VALUE('N') LEVEL(*SYS)
ibmpaseforienv PASE_USRGRP_LIMITED=N
CL コマンドで「ADDENVVAR ENVVAR(PASE_USRGRP_LIMITED) VALUE('N') LEVEL(*SYS)」を実行しておくか、sshd の設定ファイルである「sshd_config」に「ibmpaseforienv PASE_USRGRP_LIMITED=N」を書けば 10 文字までのユーザー名が利用できます。
今回は、システム環境変数で設定しましょう。有効にするには sshd の再起動が必要です。
ADDENVVAR ENVVAR(PASE_USRGRP_LIMITED) VALUE('N') LEVEL(*SYS)
ENDTCPSVR SERVER(*SSHD)
STRTCPSVR SERVER(*SSHD)
ユーザーの用意
IBM i 側でユーザーを用意します。
ユーザーを作成し、ホームディレクトリーを作成し、ホームディレクトリーのオーナーを作成したユーザーにします。
そろとそろ IBM i でも CRTUSRPRF でまとめてやってくれると嬉しいのですが...
今回は「YKASFT0731」というユーザーを用意しました。
CRTUSRPRF USRPRF(YKASFT0731) PASSWORD(yourPAssword) SRCLS(*SECOFR)HOMEDIR('/home/ykasft0731')
MKDIR DIR('/home/ykasft0731')
CHGOWN OBJ('/home/ykasft0731') NEWOWN(YKASFT0731)
公開鍵を IBM i に転送
「こちら」で作った公開鍵を scp でホームディレクトリーに転送します。
scp も ssh と同時に Windows 10 で標準で使えるようになっています。
作業環境がWindowsなのでソースが「.ssh\id_rsa.pub 」と「\」区切りになっています。
まだ、パスワード認証ですね。
C:\Users\YASUHIROOnoda>scp .ssh\id_rsa.pub YKASFT0731@158.175.XXX.XXX:/home/ykasft0731/id_rsa.pub
YKASFT0731@158.175.XXX.XXX's password:
id_rsa.pub 100% 758 2.9KB/s 00:00
公開鍵と権限の設定
ssh で追加の作業をします。
転送した id_rsa.pub を .ssh/authorized_keys に追記します。
(今回は宛先が存在しないので mv でもよかったのですが)
権限の設定を忘れないようにしましょう。ssh の鍵認証の失敗のほとんどは権限の設定もれです。
C:\Users\YASUHIROOnoda>ssh YKASFT0731@158.175.XXX.XXX
YKASFT0731@158.175.XXX.XXX's password:
$ pwd
/home/ykasft0731
$ mkdir .ssh
$ cat id_rsa.pub >> .ssh/authorized_keys
$ chmod 700 .
$ chmod 700 .ssh
$ chmod 600 .ssh/authorized_keys
$ exit
Connection to 158.175.XXX.XXX closed.
接続テスト
もう一度、ssh で接続するとパスワード無しで接続されます。
C:\Users\YASUHIROOnoda>ssh YKASFT0731@158.175.XXX.XXX
$
パスワード認証を停止
IBM i でパスワード認証を停止します。
sshd の設定ファイルは「/QOpenSys/QIBM/UserData/SC1/OpenSSH/etc/sshd_config」になります。
「PasswordAuthentication no」を設定します。
sshd を再起動します。
ENDTCPSVR SERVER(*SSHD)
STRTCPSVR SERVER(*SSHD)
鍵認証の設定をしていないユーザー(存在していないユーザーでも可)で ssh の接続を試みてパスワードが聞かれずに接続拒否されれば OK です。
C:\Users\YASUHIROOnoda>ssh qsecofr@158.175.XXX.XXX
qsecofr@158.175.XXX.XXX: Permission denied (publickey,keyboard-interactive).
当日記のIndexはこちらです。
許可の無い転載を禁じます。
この記事は筆者の個人的な責任で無保証で提供しています。
当記事に関してIBMやビジネスパートナーに問い合わせることは、固くお断りします。