CentOS7でvsftpdのバーチャルユーザを使って、MySQLでFTPユーザ管理をする。
参考URL
http://park1.wakwak.com/~ima/centos4_vsftpd0006.html
FTPユーザのために、いちいちLinuxユーザを増やしたくない!
vsftpdの認証には、linuxユーザを使っている。実装としてはPAM(Pluggable Authentication Modules)を使っていて、これは各サービスが独自に認証をしなくてもよくなるための仕組み。
今回の目的では、vsftpd → PAM → MySQLの架け橋として、pam_mysqlというパッケージが必要。CentOS6まではEPELに登録されていたらしいが、更新されなくなってCentOS7では削除されたらしい。
しょうがないので、ソースを落としてきてローカルビルドして、インストールしよう
1, vsftpdからmysqlのためにpam_mysqlモジュールをインストール
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# ローカルでビルドするためのソフトをインストール yum install -y make gcc-c++ autoconf automake libtool rpm-build pam-devel mysql-devel openssl-devel cyrus-sasl-devel # pam_mysqlのソースをダウンロード wget "ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/fedora-secondary/releases/23/Everything/source/SRPMS/p/pam_mysql-0.7-0.20.rc1.fc23.src.rpm" # ローカルでビルド rpmbuild --rebuild pam_mysql-0.7-0.20.rc1.fc23.src.rpm # 環境によってrpmファイルの名前が違うので確認してから、ようやくpam_mysqlをインストール #yum localinstall /root/rpmbuild/RPMS/x86_64/pam_mysql-0.7-0.20.rc1.amzn2.x86_64.rpm yum localinstall /root/rpmbuild/RPMS/x86_64/pam_mysql-0.7-0.20.rc1.el7.x86_64.rpm |
2, MySQLのインストール
そもそもMySQLが入っていなかった…。インストールしよう。
https://qiita.com/nooboolean/items/7efc5c35b2e95637d8c1
Mysql 5.7* パスワード強度の強要を止めさせる。セキュリティポリシーをMEDIUM(数字・小文字・大文字・記号の4種類必須)からLOW(最低文字数だけ)へ変更
https://qiita.com/keisukeYamagishi/items/d897e5c52fe9fd8d9273
1 2 3 4 |
mysql> show variables like 'validate_password%'; mysql> set global validate_password_length=8; # 文字列の長さを変更 mysql> set global validate_password_policy=LOW; # ポリシーを変更(数字・小文字・大文字・記号の4種類必須はキツい…。) mysql> show variables like 'validate_password%'; |
MySQLのDBインスタンス(ftpusers)、vsftpdからMySQLへの接続ユーザ(ftpuser)、FTPユーザの管理テーブル(users)、ログテーブル(logs)を作る
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# mysql -u root -p mysql> create database ftpusers; mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER on ftpusers.* to ftpuser@localhost identified by '12345678'; mysql>use ftpusers; Database changed create table users( id int AUTO_INCREMENT NOT NULL, name char(128) binary NOT NULL, passwd char(128) binary NOT NULL, primary key(id) ); create table logs ( msg varchar(255), user char(128), pid int, host char(128), rhost char(128), logtime timestamp ); |
3, vsftpdからMySQサーバへ接続できるMySQLのアカウント(ユーザIDとパスワード)を記述
1 2 3 4 5 6 |
touch /etc/pam.d/vsftpd_mysql chmod 644 /etc/pam.d/vsftpd_mysql # ファイルの内容は以下の通り auth required /lib64/security/pam_mysql.so user=ftpuser passwd=12345678 host=localhost db=ftpusers table=users usercolumn=name passwdcolumn=passwd crypt=2 use_323_passwd=false sqllog=1 logtable=logs logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=logtime account required /lib64/security/pam_mysql.so user=ftpuser passwd=12345678 host=localhost db=ftpusers table=users usercolumn=name passwdcolumn=passwd crypt=2 use_323_passwd=false sqllog=1 logtable=logs logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=logtime |
4, ftpポートとデータ転送用ポート(50000から50050)を開放
1 2 3 4 5 |
firewall-cmd --permanent --zone=public --add-service=ftp firewall-cmd --reload firewall-cmd --permanent --zone=public --add-port=50000-50050/tcp firewall-cmd --reload |
5, /etc/vsftpd/vsftpd.confに記述を追加
1 2 3 4 5 6 |
# vsftpdkからMySQL(MariaDB)への接続情報 pam_service_name=vsftpd_mysql # 実行するlinuxユーザ guest_username=apache # 各FTPユーザの情報が置かれているフォルダパス user_config_dir=/etc/vsftpd/userconf |
1 2 3 4 |
# 各FTPユーザの情報フォルダを作っておく mkdir /etc/vsftpd/userconf systemctl restart vsftpd |
6, FTPユーザの追加(二人目以降も同様)
1 2 3 4 5 6 7 8 9 |
MySQLへFTPユーザ情報をINSERT insert into users (name,passwd) values('aaa',password('12345678')); # ホームディレクトリ作成 mkdir /var/www/html/aaa chmod 777 /var/www/html/aaa # ホームディレクトリ指定する echo 'local_root=/var/www/html/aaa' > /etc/vsftpd/userconf/aaa |
これで、MySQLにレコードを作って、ホームディレクトリと設定ファイルを追加すれば、FTPユーザを追加できるようになった。
linuxコマンドを実行しなくても良い所が良いね!