RHEL 7.6から /etc/shellにnologinが含まれなくなりました。
1 2 3 4 5 |
[root@rhel8 ~]# cat /etc/shells /bin/sh /bin/bash /usr/bin/sh /usr/bin/bash |
これはCVE-2018-1113対策のようで/sbin/nologinを指定してもある状況下でシステムにアクセスできてしまうとか。
https://access.redhat.com/security/cve/cve-2018-1113
その為にnologinシェルを指定したユーザがvsftpにログインできないと。
How to authenticate user without shell access to ftp server vsftp without adding nologin in /etc/shells on RHEL 7.6.
https://access.redhat.com/solutions/4162001
※RedHatアカウントでログインしないと全文が読めません。
Red Hat Enterprise Linux release 8.2 (Ootpa)で試してみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
[root@rhel8 ~]# useradd -m -s /sbin/nologin user01 [root@rhel8 ~]# passwd user01 Changing password for user user01. New password: Retype new password: passwd: all authentication tokens updated successfully. [root@rhel8 ~]# ftp localhost Trying ::1... Connected to localhost (::1). 220 (vsFTPd 3.0.3) Name (localhost:root): user01 331 Please specify the password. Password: 530 Login incorrect. Login failed. ftp> quit 221 Goodbye. |
ログインに失敗します。/etc/shellsに/sbin/nologinを追加するとログインできました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[root@rhel8 ~]# grep nologin /etc/shells /sbin/nologin [root@rhel8 ~]# ftp localhost Trying ::1... Connected to localhost (::1). 220 (vsFTPd 3.0.3) Name (localhost:root): user01 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 229 Entering Extended Passive Mode (|||16383|) 150 Here comes the directory listing. 226 Directory send OK. ftp> quit |
ただこの方法だとCVE-2018-1113に反してリスクが発生するので推奨方法は仮想ユーザを作成して対応するとのこと。
※RedHatアカウントでログインしないと全文が読めません。
How to use vsftpd with virtual users
https://access.redhat.com/solutions/54295
- 仮想ユーザのテキストファイル作成
- テキストファイルからデータベースファイルにコンバート
- パーミッション変更
- /etc/pam.d/vsftpd.virtualの作成
- 仮想ユーザのホームディレクトリ作成
- /etc/vsftpd/vsftpd.confの変更
- vsftpdの再起動
- ftp接続
交互にユーザ名、パスワードを記述したテキストファイルを作成します。
1 2 3 4 5 6 |
[root@rhel8 ~]# vi vsftpuser [root@rhel8 ~]# cat vsftpuser user10 Password10 user11 Password11 |
1 2 3 |
[root@rhel8 ~]# db_load -T -t hash -f vsftpuser /etc/vsftpd/login.db [root@rhel8 ~]# ls -l /etc/vsftpd/login.db -rw-r--r--. 1 root root 12288 Sep 8 09:05 /etc/vsftpd/login.db |
1 2 3 |
[root@rhel8 ~]# chmod 0600 /etc/vsftpd/login.db [root@rhel8 ~]# ls -l /etc/vsftpd/login.db -rw-------. 1 root root 12288 Sep 8 09:05 /etc/vsftpd/login.db |
仮想ユーザ(pam_userdb)で認証できるように新たに/etc/pam.d/vsftpd.virtualを作成します。
1 2 3 4 5 6 |
[root@rhel8 ~]# vi /etc/pam.d/vsftpd.virtual [root@rhel8 ~]# cat /etc/pam.d/vsftpd.virtual #%PAM-1.0 auth required pam_userdb.so db=/etc/vsftpd/login account required pam_userdb.so db=/etc/vsftpd/login session required pam_loginuid.so |
1 2 3 4 5 6 7 |
[root@rhel8 ~]# mkdir /home/ftp [root@rhel8 ~]# mkdir -p /home/ftp/{user10,user11} [root@rhel8 ~]# chown -R ftp:ftp /home/ftp [root@rhel8 ~]# ls -l /home/ftp/ total 0 drwxr-xr-x. 2 ftp ftp 6 Sep 8 09:42 user10 drwxr-xr-x. 2 ftp ftp 6 Sep 8 09:42 user11 |
/etc/vsftpd/vsftpd.confに下記を追加します。
1 2 3 4 5 6 |
pam_service_name=vsftpd.virtual #pam_service_name=vsftpd guest_enable=YES user_sub_token=$USER local_root=/home/ftp/$USER chroot_local_user=YES |
1 |
[root@rhel8 ~]# systemctl restart vsftpd |
1 2 3 4 5 6 7 8 9 10 11 |
[root@rhel8 ~]# ftp localhost Trying ::1... Connected to localhost (::1). 220 Welcome to blah FTP service. Name (localhost:root): user10 331 Please specify the password. Password: 500 OOPS: vsftpd: refusing to run with writable root inside chroot() Login failed. 421 Service not available, remote server has closed connection ftp> quit |
忘れていました。chrootしたディレクトリの/(ルートディレクトリ)には書込みできないといつものエラーです。
取り合えず/etc/vsftpd/vsftpd.confに下記を追加して下さい。
1 |
allow_writeable_chroot=YES |
vsftpdを再起動して試してみます。
1 2 3 4 5 6 7 8 9 10 11 12 |
[root@rhel8 ~]# ftp localhost Trying ::1... Connected to localhost (::1). 220 Welcome to blah FTP service. Name (localhost:root): user10 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> quit 221 Goodbye. |
RedHatのサイトを参考にしたのですが、上手くいかなかったので色々なサイトを参考にさせて頂きました。
取り合えず基本的なところは大丈夫か?