ftpのユーザをmysqlで管理する
こーめいです。
ftpのユーザをmysqlで管理する際のメモです。個人的にはユーザをmysqlで管理するのは好きです。今回はvsftpd + pam_myslqで環境構築します。
概要
pam_mysqlインストール
pam_mysqlをインストールします。その他、vsftpd, mysqlなど必要なパッケージも合わせてインストールします。
sudo yum install vsftpd sudo yum --enablerepo=epel install pam_mysql sudo yum install mysql mysql-server mysqlclient10
mysqlを起動してchkconfigも忘れずにonにしておきましょう
sudo /etc/rc.d/init.d/mysqld start chkconfig mysqld on
mysql設定
mysqlで今回使用するdatabaseとtableを作成します。テーブルにはユーザを格納するuserとアクセスログを格納するlogテーブルを作成します。後々設定をしますが、ローカルでもリモートでもどちらでも可能です。
mysql -u root -p create database ftpuser_db; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER on ftpuser_db.* to <username> identified by '<password>'; use ftpuser_db; create table user( id int AUTO_INCREMENT NOT NULL, name char(128) binary NOT NULL, passwd char(128) binary NOT NULL, primary key(id) ); create table log ( msg varchar(255), user char(128), pid int, host char(128), rhost char(128), logtime timestamp );
pam_mysql設定
ここではローカルのmysqlを使用する前提で設定します。リモートに構築した場合はpam設定のhost=<remote_host>で設定してください。
touch /etc/pam.d/vsftpd_mysql chmod 644 /etc/pam.d/vsftpd_mysql vim /etc/pam.d/vsftpd_mysql auth required /lib64/security/pam_mysql.so user=<username> passwd=<password> host=localhost db=ftpuser_db 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=<username> passwd=<password> host=localhost db=ftpuser_db 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
vsftpd設定
以下はvsftpd.confの設定です。自身の環境に合わせて適宜修正してください。
/etc/vsftpd/vsftpd.conf anonymous_enable=NO ascii_upload_enable=YES ascii_download_enable=YES use_localtime=YES log_ftp_protocol=YES pasv_enable=YES
pam_service_name=vsftpd_mysqlがポイントです。
chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list pam_service_name=vsftpd_mysql virtual_use_local_privs=YES user_config_dir=/etc/vsftpd/userconf force_dot_files=YES
guest_usernameには実際のLinux上のユーザを指定してください。ここではftpを使用します。
guest_enable=YES guest_username=ftp
userconfフォルダにユーザ名のファイルを作成してftpユーザ用のディレクトリを指定します。ホームディレクトリより上層にアクセスする必要はないため、chroot_listは空ファイルで問題ないです。
mkdir /etc/vsftpd/userconf vi /etc/vsftpd/userconf/testuser local_root=/var/testuser touch /etc/vsftpd/chroot_list
それでは実際にtestuserを先ほどのテーブルに作成します。
mysql -u <username> -p use ftpuser_db; insert into user (name,passwd) values('testuser',password('<password>'));
testuser用のディレクトリも合わせて作成します。先ほどguest_usernameを設定したユーザでアクセスできるよう権限を設定しておきます。
mkdir -p /var/testuser chown ftp:ftp /var/testuser
最後にvsftpdをリスタートします。
sudo /etc/rc.d/init.d/vsftpd restart
ここまでの設定で問題なければftpでアクセスできるようになっているはずです。ログはmysqlのlogテーブルに格納されますので注意してください。
あまり流行ってはないようですが、実際にやってみると簡単かつ管理しやすく個人的なスタンダードとして使用したいと思います。
シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。
- 作者: 遠藤俊裕,坂井恵,館山聖司,鶴長鎮一,とみたまさひろ,班石悦夫,松信嘉範
- 出版社/メーカー: 翔泳社
- 発売日: 2011/08/26
- メディア: 大型本
- 購入: 9人 クリック: 82回
- この商品を含むブログ (9件) を見る
- 作者: Baron Schwartz,Peter Zaitsev,Vadim Tkachenko,菊池研自(監訳),株式会社クイープ
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/11/25
- メディア: 大型本
- この商品を含むブログ (6件) を見る