Table of Contents
proftpd+MySQLで仮想アカウント使用のFTPサーバ構築
インストールの前提条件は、MySQLがインストール済み
※クォータ管理は、今回は不要なので省略
epelリポジトリのインストール
EPELが必要なので、EPELリポジトリを追加
epelインストール
インストール
# dnf install proftpd proftpd-utils proftpd-mysql
FTP用UNIXアカウント作成
FTP用UNIXユーザー「ftpuser」、グループ「ftpgroup」を作成し、MySQLで管理するバーチャルユーザーとマッピングします。まずはグループから。UID、GIDは一旦2001で固定することにします。
# groupadd -g 2001 ftpgroup
# useradd -u 2001 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser
telnet や SSH でログインできないユーザー用の「/sbin/false」を作成
# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
# echo "/sbin/false" >> /etc/shells
# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/sbin/false
MySQLにデータベースを作成
$mysql -u root -p
Enter password:(rootのパスワード)
mysql> USE ftp;
mysql> CREATE TABLE ftpgroup (groupname varchar(16) NOT NULL default '',gid smallint(6) NOT NULL default '5500',members varchar(16) NOT NULL default '',KEY groupname (groupname)) ENGINE=MyISAM COMMENT='ProFTP group table';
mysql> CREATE TABLE ftpuser (id int(10) unsigned NOT NULL auto_increment,userid varchar(32) NOT NULL default '',passwd varchar(32) NOT NULL default '',uid smallint(6) NOT NULL default '5500',gid smallint(6) NOT NULL default '5500',homedir varchar(255) NOT NULL default '',shell varchar(16) NOT NULL default '/sbin/nologin',count int(11) NOT NULL default '0',accessed datetime ,modified datetime ,PRIMARY KEY (id),UNIQUE KEY userid (userid)) ENGINE=MyISAM COMMENT='ProFTP user table';
※参考URLで指定されているaccessed と modified の初期値は、今回使用するMySQLではエラーになったので、省略しています。
ftpgroupテーブルに実UID、実GIDをマッピングするデータを投入
mysql> INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 2001, 'hoge');
ftpuserテーブルにユーザーデータを投入
mysql> INSERT INTO `ftpuser` (`id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed`, `modified`) VALUES (1, 'hoge', '******', 2001, 2001, '/home/kyouyu', '/sbin/nologin', 0, null, null);
※shellで指定する/sbin/false
は/etc/shells
に追加されていなければ追加すること
※uidやgidで指定したユーザの権限でディレクトリの所有者など変更しておく
ディレクトリ作成
FTPユーザーのホームディレクトリを作成し、オーナーをMySQLのユーザーとマッピングしているUNIXユーザーのオーナーとグループに変更します。
※ユーザとオーナーの権限で書き込み権限を調整
# mkdir -p /home/kyouyu
# chown 2001:2001 /home/kyouyu
設定ファイルの変更
# vi proftpd.conf
-------------------------------------------------------------------------------------------------------------------
#AuthOrder mod_auth_pam.c* mod_auth_unix.c
AuthOrder mod_sql.c mod_auth_unix.c
SQLBackend mysql
SQLEngine on
# The passwords in MySQL are encrypted using CRYPT
SQLAuthTypes Plaintext Crypt
SQLAuthenticate users groups
# used to connect to the database
# databasename@host database_user user_password
SQLConnectInfo ftp@localhost proftpd ftpadmin
# Here we tell ProFTPd the names of the database columns in the "usertable"
# we want it to interact with. Match the names with those in the db
SQLUserInfo ftpuser userid passwd uid gid homedir shell
# Here we tell ProFTPd the names of the database columns in the "grouptable"
# we want it to interact with. Again the names match with those in the db
SQLGroupInfo ftpgroup groupname gid members
# set min UID and GID - otherwise these are 999 each
SQLMinID 500
# create a user's home directory on demand if it doesn't exist
##--@Disabled@--##SQLHomedirOnDemand on # ここだけonにするとproftpdが起動しなかったのでコメントアウト
# Update count every time user logs in
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser
# Update modified everytime user uploads or deletes a file
SQLLog STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser
#SQLLogFile /var/log/proftpd-mysql.log
-------------------------------------------------------------------------------------------------------------------
# vi /etc/proftpd/modules.conf
-------------------------------------------------------------------------------------------------------------------
LoadModule mod_sql.c
LoadModule mod_sql_mysql.c
-------------------------------------------------------------------------------------------------------------------
自動起動の設定
# systemctl enable proftpd
# systemctl start proftpd
ファイアーオールに追加
# firewall-cmd --zone=manage --add-service=ftp --permanent
# firewall-cmd --reload ←設定再読み込み
# firewall-cmd --list-all --zone=manage ← manageゾーンの詳細表示
参考URL
【proftpd】 MySQLでアカウント管理する リターンズ 201511 – (っ´∀`)っ ゃー | 一撃
Virtual Hosting With Proftpd And MySQL (Incl. Quota) On Fedora 9