XAMPPのProFTPDを使い、テストFTPサーバを構築する

gulpのFTPサーバを使ったタスクをテストするために、サーバーが必要になりました。レンタルサーバーの別ディレクトリではなく、XAMPPのFTPサーバーであるProFTPDを使用して、Macの中でFTPサーバーを動作させてそこでテストしようと思います。

ディレクトリの追加

XAMPPのlocalhostのディレクトリに、新しいディレクトリを作ります。 これはデフォルトのユーザーであるdaemon以外で使うディレクトリを作りたかったからです。 グループユーザーでも読み書きができるよう、権限は775に設定します。
cd /Applications/XAMPP/xamppfiles/htdocs
mkdir <username>
sudo chmod 775 <username>

アカウント・グループの追加

FTPのユーザーを追加するのですが、ここでは/Applications/XAMPP/xamppfiles/bin/ftpasswdを使います。 ftpasswdを使うと、ユーザーやグループの設定情報ファイルを作成することができます。

必須パラメータ

- -name
アカウント名です。
- -file
設定情報ファイルの書き出し先およびファイル名です。
- -home
ログインしたときに表示させるディレクトリです。
- -passwd
設定するパスワードです。
- -shell
シェルの場所です。
- -uid
ユーザーIDです。
- -group
グループの設定を行います。
設定情報ファイルのパスは、/Applications/XAMPP/xamppfiles/etc/proftpd.confのある場所に作ることにします。 ログインしたときに表示させるディレクトリは先ほど作ったディレクトリとします。 シェルの場所は、Macでは/bin/bashを指定します。

UIDを調べる

ユーザーIDは、Macにログインしているユーザーと等しくします。これはアップロードしたファイルの所有者をMacのユーザーとし、読み書きできるようにするためです。
cd users/<Macのユーザー名>/
dscl . -read /users/<Macのユーザー名> uid
dsAttrTypeNative:uid: 501
501のようです。 FTPアカウントを追加する 必要な情報がそろったので、コマンドを実行します。
/Applications/XAMPP/xamppfiles/bin/ftpasswd --name <FTPアカウント名> --home /Applications/XAMPP/xamppfiles/htdocs/<FTPアカウント名> --file /Applications/XAMPP/xamppfiles/etc/ftpd.passwd --passwd <FTPパスワード> --shell /usr/bin/false --uid 501

グループを追加する

Macのログインユーザーはstaffというグループに所属しています。 そこで、ftpasswdでstaffというグループを追加します。 UIDと同様に、GIDを調べると
cd users/<Macのユーザー名>/
dscl . -read /users/<Macのユーザー名> gid
dsAttrTypeNative:gid: 20
20のようです。 そこで、以下のように設定します。
/Applications/XAMPP/xamppfiles/bin/ftpasswd --group --file /Applications/XAMPP/xamppfiles/etc/ftpd.group --name <グループ名> --gid 20

proftpd.confの記述を追加

/Applications/XAMPP/xamppfiles/etc/に、ftpd.groupとftpd.passwdができています。 この設定ファイルを読み込ませる設定を行います。 さらに、<FTPアカウント名>でログインできるようにします。
AuthUserFile                    /Applications/XAMPP/xamppfiles/etc/ftpd.passwd
AuthGroupFile                   /Applications/XAMPP/xamppfiles/etc/ftpd.group
AuthOrder                       mod_auth_file.c
#VALID LOGINS
<Limit LOGIN>
AllowUser <FTPアカウント名>
DenyALL
</Limit>
# only for the web servers content
DefaultRoot /Applications/XAMPP/xamppfiles/htdocs
DefaultRoot /Applications/XAMPP/xamppfiles/htdocs/<FTPアカウント名> staff

ProFTPDの再起動

設定が終わったらXAMPPを再起動します。

FTPクライアントでの動作確認

FTPクライアントを使用し、先ほど作成したユーザーでlocalhostに接続できれば成功です。

daemonが使えない

この設定では、デフォルトのdaemonが使えません。ほかのプログラムでdaemonを使う場合は、ユーザー:daemon、グループ:daemonを追加します。 uid:/etc/passwdに記載があります。
daemon:*:1:1:System Services:/var/root:/usr/bin/false
1のようです。 gid:/etc/groupに記載があります。
daemon:*:1:root
1のようです。 そこで、以下のように設定します。homeディレクトリは、localhostのルートとします。パスワードはxamppですが、できれば変えておいた方がいいでしょう。
/Applications/XAMPP/xamppfiles/bin/ftpasswd --name daemon --home /Applications/XAMPP/xamppfiles/htdocs --file /Applications/XAMPP/xamppfiles/etc/ftpd.passwd --passwd xampp --shell /usr/bin/false --uid 1
/Applications/XAMPP/xamppfiles/bin/ftpasswd --group --file /Applications/XAMPP/xamppfiles/etc/ftpd.group --name daemon --gid 1
これらを設定して、ProFTPDを再起動すれば、daemonでもFTPログインができるはずです。 ここまで苦労してたどり着いたのですが、先はまだ長いです。 gulpでアップロードする設定をこれから作ろうと思います。