CentOS7でyum update後、vsftpdにログインできなくなって、予想以上に直すのに時間がかかってしまったので、その対応メモです。
症状は、CentOS7でyum update後、vsftpdで「530 Login incorrect.」を発行してログインできないという事象です。yum update前はログインできてました。
原因は、CentOS7のパッケージ「setup」がアップグレードされたのが原因でした。
vsftpdの認証ではpamを使っております。/etc/vsftpd/vsftpd.confの中でCentOS7標準の設定で「pam_service_name=vsftpd」が指定されており、そのpamの設定は下記のとおりです。
#%PAM-1.0 session optional pam_keyinit.so force revoke auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed auth required pam_shells.so auth include password-auth account include password-auth session required pam_loginuid.so session include password-auth
上記のとおり、4行目の「pam_shells.so」で、いまFTPしようとしてユーザのシェルが「/etc/shells」に列挙してあるものに該当しているかをチェックしています。
パッケージ「setup」には、この「/etc/shells」ファイルが含まれており、旧バージョンの際は下記のようになってました。
/bin/sh /bin/bash /sbin/nologin /usr/bin/sh /usr/bin/bash /usr/sbin/nologin /bin/tcsh /bin/csh
これが、新しい方のパッケージ「setup」に含まれてる「/etc/shells」ファイルでは、下記のように綺麗になっています。
/bin/sh /bin/bash /usr/bin/sh /usr/bin/bash
従って、今回、FTPできなかったのは、そのFTPユーザのシェルが上記の「/etc/shells」から漏れてしまったためでした。FTPだけ行うUNIXユーザなので「/sbin/nologin」にしてたので漏れてました。
/etc/shellsに該当のシェルを追加すれば直りました。