LoginSignup
3
1

More than 3 years have passed since last update.

PowerVS IBM i 日記(5): 【重要】ssh のパスワード認証を停止し鍵認証に移行する

Last updated at Posted at 2020-09-14

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」を設定します。

image.png

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やビジネスパートナーに問い合わせることは、固くお断りします。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1