序章
この記事では、ユーザーとグループ向けにMySQLバックエンドを使用してUbuntuでProFTPDを完全に設定する方法について説明します。
警告:FTPは本質的に安全ではありません! SSHで実装されたFTPの安全な代替手段であるSFTPを使用するようにProFTPdを構成することを検討してください。
Prerequisite
このチュートリアルでは、MySQLとphpMyAdminがすでにインストールおよび構成されていることを前提としています。
そうでない場合は、 Ubuntu12.04にphpMyAdminをインストールして保護する方法に従ってください。
MySQLをサポートするProFTPDをインストールする
sudo apt-get install proftpd-basic proftpd-mod-mysql
これにより、必要なすべてのパッケージがインストールされます。 インストールで要求された場合は、スタンドアロンモードを選択します。
データベースを構成します
phpMyAdminのインストールに移動し、ログインします。
「権限」タブを選択し、「ユーザーの追加」をクリックします。
次に、目的のユーザー名を選択する必要があります。「ftpd」(引用符なし)を使用して、ユーザーのパスワードを生成することをお勧めします。 その情報を保存します。後で必要になります。
[ユーザーのデータベース]セクションで、[同じ名前のデータベースを作成し、すべての権限を付与する]を選択します。
これにより、ProFTPDが使用できるユーザーとデータベースが作成されます。 次に、データベースにいくつかのテーブルを設定する必要があります。 左側に、新しいデータベース(ユーザーと同じ名前、この場合は「ftpd」)が表示されます。クリックします。
次に、[SQL]タブをクリックし、以下を貼り付けて[実行]をクリックします。
CREATE TABLE IF NOT EXISTS `ftpgroup` ( `groupname` varchar(16) COLLATE utf8_general_ci NOT NULL, `gid` smallint(6) NOT NULL DEFAULT '5500', `members` varchar(16) COLLATE utf8_general_ci NOT NULL, KEY `groupname` (`groupname`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='ProFTP group table'; CREATE TABLE IF NOT EXISTS `ftpuser` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `userid` varchar(32) COLLATE utf8_general_ci NOT NULL DEFAULT '', `passwd` varchar(32) COLLATE utf8_general_ci NOT NULL DEFAULT '', `uid` smallint(6) NOT NULL DEFAULT '5500', `gid` smallint(6) NOT NULL DEFAULT '5500', `homedir` varchar(255) COLLATE utf8_general_ci NOT NULL DEFAULT '', `shell` varchar(16) COLLATE utf8_general_ci NOT NULL DEFAULT '/sbin/nologin', `count` int(11) NOT NULL DEFAULT '0', `accessed` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`id`), UNIQUE KEY `userid` (`userid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='ProFTP user table';
これにより、必要なテーブルが作成されます。
ユーザーを作成する
左側の列の「ftpuser」テーブルをクリックしてから、「挿入」タブをクリックします。
これにより、ユーザーを挿入できます。 userid(ユーザーがFTPにログインするユーザー名)とhomedir(FTPユーザーhome-システムに存在する必要があります)を入力します。
passwdフィールドのパスワードは暗号化する必要があります。これを行うには、(サーバーシェルで)このスニペットを使用して、passwdフィールドに貼り付けることができるパスワード文字列を生成できます。
/bin/echo "{md5}"`/bin/echo -n "password" | openssl dgst -binary -md5 | openssl enc -base64`
もちろん、「パスワード」をあなた/ユーザーの希望するパスワードに置き換えてください。
ここでは、自明であり、通常は後で使用される他のフィールドを確認できます(ログイン数、最後にログインした…)。
これで正しいデータベースができました。これを使用するようにProFTPDを設定する必要があります。
ProFTPDを設定する
まず、ProFTPD構成ファイルを編集します。
sudo nano /etc/proftpd/proftpd.conf
ServerNameディレクティブを目的のサーバー名に変更します。
ユーザーをホームディレクトリにジェイルする場合(ユーザーがホームディレクトリのみを表示できるようにするため)、次を追加します。
DefaultRoot ~
SQL構成を追加し、シェル検証をオフにするには、構成の下部に次のように追加します。
Include /etc/proftpd/sql.conf RequireValidShell off
次に、SQL構成ファイルを編集します。
sudo nano /etc/proftpd/sql.conf
したがって、次のようになります(ファイルにあるすべてのものを今すぐ削除することをお勧めします):
SQLBackend mysql #Passwords in MySQL are encrypted using CRYPT SQLAuthTypes OpenSSL Crypt SQLAuthenticate users groups # used to connect to the database # databasename@host database_user user_password SQLConnectInfo mysql_database@localhost mysql_user mysql_password # 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 # 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/sql.log
もちろん、「mysql_database」、「mysql_user」、および「mysql_password」を、チュートリアルの前半で選択/生成した正しい値に置き換える必要があります。 提案された命名規則に従った場合、行は次のようになります。
SQLConnectInfo ftpd@localhost ftpd password
ProFTPD編集でMySQLモジュールを有効にするには:
sudo nano /etc/proftpd/modules.conf
そして、2行のコメントを外します(または単に追加します)。
LoadModule mod_sql.c LoadModule mod_sql_mysql.c
次に、ProFTPDを再起動する必要があります。
sudo service proftpd restart
試して
これで、お気に入りのFTPクライアント(FileZillaなど)を使用して、前に追加したサンプルユーザーでサーバーに接続できます。
一般的な問題
- ユーザーがログインできない-生成されたユーザーパスワード行を正しく貼り付けたことを常に確認してください
- ユーザーがホームディレクトリに書き込めない-ホームディレクトリに正しい権限を設定する必要があります。
- 権限は、ユーザーを追加したときに入力したuidフィールドとguidフィールドに設定する必要があります。たとえば、デフォルト値を使用します。 chown 5500:5500 / path / to / home / directory /
トラブルシューティング
ProFTPD自体のログファイルを表示できます。
tail -f /var/log/proftpd/proftpd.log
そしてProFTPDのSQL部分:
tail -f /var/log/proftpd/sql.log