Pure FTPdは、オープンソースで安全なFTPサーバーです。これは、セキュリティ、使いやすさ、データベースへの接続機能で広く使用されているFTPサーバーの1つです。
この記事では、CentOS8にFTPdをインストールして構成します。
CentOS 8のEPELリポジトリを取得します:
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

次のコマンドを使用してFTPdをインストールします。
dnf install pure-ftpd
次に、FTPdサーバーのユーザーとグループを作成します。
nano /etc/pure-ftpd/pure-ftpd.conf
次の変更を行います:
ChrootEveryone yes
MaxClientsNumber 50
MaxClientsPerIP 2
VerboseLog yes
AnonymousOnly no
NoAnonymous yes
MaxIdleTime 15
MySQLConfigFile /etc/pure-ftpd/pureftpd-mysql.conf
PAMAuthentication no
UnixAuthentication no
次に、pure-ftpdmysql構成ファイルを編集します。
nano /etc/pure-ftpd/pureftpd-mysql.conf
次の行のコメントを解除します:
# Optional : MySQL server name or IP. Don't define this for unix sockets.
MYSQLServer 127.0.0.1
# Optional : MySQL port. Don't define this if a local unix socket is used.
MYSQLPort 3306
次の値を更新します:
MYSQLUser pureftpd
MYSQLPassword password
MYSQLDatabase pureftpd
MYSQLCrypt md5
ファイアウォールを介したftpサービスを許可します。
firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload

純粋なFTPdサービスを有効にして開始します。
systemctl enable pure-ftpd.service
systemctl start pure-ftpd.service
systemctl status pure-ftpd.service

インストール後、mariaDB用に構成します。
次のコマンドを使用してMariaDBをインストールします。
dnf install @mariadb

MariaDBサービスを開始して有効にします。
systemctl enable --now mariadb
systemctl status mariadb

ルートパスワードが設定されていないため、MariaDBおよびその他のセキュリティチェックにルートパスワードを設定します。次のコマンドを使用します。
mysql_secure_installation
MariaDBのrootパスワードを設定するように求めるプロンプトが表示されます。これを行うと、スクリプトは匿名ユーザーを削除し、rootユーザーのアクセスを制限し、テストデータベースを削除するように要求します。すべてのオプションに「Y」(はい)と答える必要があります。

次に、mariaDBにログインして、データベース、テーブル、ユーザーを作成し、それに応じて情報を保存します。
mysql -u root -p
次に、次のコマンドを入力します。
CREATE DATABASE pureftpd;
GRANT ALL ON pureftpd.* to 'pureftpd'@'localhost' IDENTIFIED BY '_password_';
FLUSH PRIVILEGES;
use pureftpd;
CREATE TABLE `users` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`User` varchar(32) NOT NULL DEFAULT '',
`Password` varchar(64) NOT NULL DEFAULT '',
`Uid` int(3) NOT NULL DEFAULT '500',
`Gid` int(3) NOT NULL DEFAULT '500',
`Dir` varchar(255) NOT NULL DEFAULT '',
`QuotaSize` int(4) NOT NULL DEFAULT '50',
`Status` enum('0','1') NOT NULL DEFAULT '1',
`ULBandwidth` int(2) NOT NULL DEFAULT '100',
`DLBandwidth` int(2) NOT NULL DEFAULT '100',
`Date` date NOT NULL DEFAULT '0000-00-00',
`LastModif` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`ID`),
UNIQUE KEY `User` (`User`),
KEY `Uid` (`Uid`),
KEY `Gid` (`Gid`),
KEY `Dir` (`Dir`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
quit;

pure-ftpdのセットアップが完了しました。次に、最初のftpアカウントを作成してセットアップをテストする必要があります。セットアップをテストするには、最初にLinuxシステムでユーザーを作成する必要があります。その後、そのユーザーのUIDとGIDを使用して仮想ftpアカウントを作成します。
useradd ftp1
passwd ftp1
次のコマンドを実行して、このアカウントのUIDとGIDを取得します。
cat /etc/passwd | grep ftp1

上記のコマンドの出力によると、このユーザーのUIDとGIDは1000です。
次に、mariaDBにログインして、アカウントを作成します。
mysql -u root -p
次のコマンドを実行します:
use pureftpd;
INSERT INTO `users` (`User`, `Password`, `Uid`, `Gid`, `Dir`, `QuotaSize`,
`Status`, `ULBandwidth`, `DLBandwidth`, `Date`, `LastModif`)
VALUES ('ftpuser1', md5('_password_'), '1000', '1000', '/home/ftp1',
'20', 2, '10', '10', now(), '');
quit

これで、ftpアカウントにログインできます。

これで、FTPを使用してファイルとディレクトリを作成できます。純粋なFTPdを使用してtestという名前のディレクトリを作成します。

これで、必要に応じてPureFTPdを使用できます。