CentOS6.x vsftpd

CentOS6でデフォルトのvsftpを利用し、FTPサーバを構築します

FTPユーザの管理はMySQLデータベースをで行う様にし、接続するユーザ毎にホームディレクトリを指定できる様にします

バーチャルユーザ運用の為、すべての代表となるUNIXアカウントかひとつ必要ですが、ここではapacheをインストールする際に自動的に作成されるユーザであるapacheを利用することとします

FTPを利用するシーンとしてはWEBサイトにコンテンツをアップすることが多いと思うので、逆にapacheユーザの方が都合が良いかと思います

vsftpdのインストール

vsftpdをインストールします

rootにて以下を実行します

# yum install vsftpd

PAM_MYSQLのインストール

MySQLデータベースで認証を行う様にする為、MySQLの為のPAM認証モジュール PAM_MYSQLをインストールします

PAM_MYSQLはCentOS標準リポジトリにはない為、PAM_MYSQLがあるEPELリポジトリからインストールします

EPELリポジトリのセットアップ

EPELリポジトリをセットアップします

なお、EPELリポジトリセットアップに関する詳細は、[CentOS]yumでサードパーティ製リポジトリを使用する - EPELリポジトリに記載しております

# wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-xx-xx.noarch.rpm
# rpm -ivh epel-release-xx-xx.noarch.rpm

(*)上記は64ビット版の例です。バージョンとあわせて読み替えてください

PAM_MYSQLのインストール

EPELリポジトリが使える様になったので、PAM_MYSQLをインストールします

# yum --enablerepo=epel install pam_mysql

MySQLデータベースの作成

FTPアカウントを保持する為のMySQLデータベースを作成します

ここでは、MySQLが既に利用可能な状態を前提としています

MySQLのインストールについては[CentOS]MySQLの導入を参照願います

データベースの作成とテーブルの作成

作成するデータベースとFTPユーザを保持するテーブルは以下とします

データベース名ftpusers
データベース接続ユーザftpuser
データベース接続ユーザパスワード12345
FTPアカウント保持テーブル名users

以下の様にしてデータベース及びテーブルを作成します

# 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 '12345';
mysql>use ftpusers;
Database changed
mysql> create table users(
    ->           id int AUTO_INCREMENT NOT NULL,
    ->           name char(128) binary NOT NULL,
    ->           passwd char(128) binary NOT NULL,
    ->           primary key(id)
    ->       );
mysql> create table logs (
    ->           msg varchar(255),
    ->           user char(128),
    ->           pid int,
    ->           host char(128),
    ->           rhost char(128),
    ->           logtime timestamp
    ->       );
mysql> ¥q

PAM_MYSQLの設定

冒頭でインストールした、PAM_MYSQLの設定を行います

/etc/pam.d/vsftpd_mysqlというファイルを新規に作成します

# touch /etc/pam.d/vsftpd_mysql
# chmod 644 /etc/pam.d/vsftpd_mysql

作成するファイルの内容は以下です

auth       required     /lib64/security/pam_mysql.so user=ftpuser passwd=12345 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=12345 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

vsttpdの設定

vsftpdの設定を行います

設定ファイルは/etc/vsftpd/vsftpd.confになりますので、このファイルを変更します

以下に変更箇所だけ記載します

anonymous_enable=NO
ascii_upload_enable=YES
ascii_download_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
pam_service_name=vsftpd_mysql
#userlist_enable=YES
#tcp_wrappers=YES
use_localtime=YES
log_ftp_protocol=YES
guest_enable=YES
guest_username=apache
virtual_use_local_privs=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_world_readable_only=NO
user_config_dir=/etc/vsftpd/userconf
force_dot_files=YES
pasv_enable=YES
pasv_min_port=50000
pasv_max_port=50050
#pasv_promiscuous=YES

上記設定の細かい説明は省きますが、ポイントとして

  • pam_service_nameでPAMモジュールを指定
  • guest_usernameで仮想ユーザの代表であるUNIXユーザを指定
  • user_config_dirでFTP接続ユーザの個別設定ディレクトリの場所を指定

となります

更に、chroot_listファイルとFTPユーザ個別設定ファイル格納ディレクトリを作成します

# mkdir /etc/vsftpd/userconf
# touch /etc/vsftpd/chroot_list

(*)chroot_listファイルは、ユーザのホームディレクトリより上にCDできるユーザを設定するファイルです。ここでは特に必要することがないので空の不アイルだけを用意しておきます

FTPアカウントの用意

FTPアカウントを作成します

作成するアカウントの情報は以下とします

FTPアカウントtest@example.com
同パスワードabc
ホームディレクトリ/var/www-test

FTPアカウントはデータベースで管理する為、テーブルにレコードを作成します

また、接続したユーザのホームディレクトリを指定する為、設定ファイルを用意します

レコードの作成

MySQLに接続し、レコードを作成します

# mysql -u ftpuser -p
mysql> use ftpusers;
mysql> insert into users (name,passwd) values('test@example.com',password('abc'));
# ¥q

vsftpd個別設定ファイルの作成

vsftpd個別設定ファイルを作成します

作成する場所は/etc/vsftpd/userconf/で、作成するファイル名はFTPアカウントと同じ名前である test@example.comとなり、ホームディレクトリをそのファイルに設定します

作成するファイルの内容は以下です

local_root=/var/www-test

メモ

vsftpdは、個別設定ファイル格納ディレクトリ以下にある、要求されたFTPアカウントと同じ名前を持つファイルを設定ファイルとして認識します

従って、個別設定ファイルのファイル名は、FTP接続アカウント名と同じにする必要があります

ホームディレクトリの用意

FTP接続ユーザの為のディレクトリを用意します

作成するディレクトリのオーナーは、vsftpdバーチャルユーザの代表として設定したUNIXユーザ apache となります

# mkdir -p /var/www-test
# chown apache:apache /var/www-test

ファイアーウォールの設定

FTP用のポートである21番と、vsftpd.confで指定したデータ転送用ポート(50000から50050)が通過する様、iptablesを設定します

vsttpdの起動

vsftpdを起動します

# /etc/rc.d/init.d/vsftpd start

確認

作成したFTPアカウントで接続できればOKです

関連ページ