序章

この記事では、ユーザーとグループ向けにMySQLバックエンドを使用してUbuntuでProFTPDを完全に設定する方法について説明します。

警告:FTPは本質的に安全ではありません! SSHで実装されたFTPの安全な代替手段であるSFTPを使用するようにProFTPdを構成することを検討してください。

前提条件

このチュートリアルでは、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フィールドに権限を設定する必要があります
    • たとえば、デフォルト値を使用すると、次のようになります。
      sudo chown 5500:5500 /path/to/home/directory/

トラブルシューティング

ProFTPD自体のログファイルを表示できます。

tail -f /var/log/proftpd/proftpd.log

そしてProFTPDのSQL部分:

tail -f /var/log/proftpd/sql.log