ProFTPD の .ftpaccess でディレクトリごとにFTPユーザの許可を与えたい、と考えたのでその方法をメモ。
やりたいこと
やりたいことを正確に書くと以下の通り。
- FTPユーザ
hoge@example.comにはドキュメントルートwww/以下に全てに権限を与える - FTPユーザ
fuga@example.comにはwww/foo/ディレクトリ 以下に全ての権限を与える - FTPユーザ
fuga@example.comのログイン時の初期ディレクトリはwww/foo/
proftpd.conf は使用できず、 .ftpaccess のみ使用できる、という状態だとします。
しかし、 .ftpaccess ではFTPユーザログイン時の初期ディレクトリを指定することができなさそうだったので、最後の条件を削除し、代わりに次のように方針を転換しました。
- FTPユーザ
hoge@example.comにはドキュメントルートwww/以下に全てに権限を与える - FTPユーザ
fuga@example.comにはwww/foo/ディレクトリ 以下に全ての権限を与える - FTPユーザ
fuga@example.comにはドキュメントルートwww/ではCWD(ディレクトリ移動),CDUP(親ディレクトリ移動),LIST(ディレクトリ一覧を取得) のみの権限を与える (サブディレクトリへ移動するため)
設定
.ftpaccess を次のように配置しました。
www/
├ .ftpaccess # ※1
└ foo/
└ .ftpaccess # ※2
ドキュメントルートと該当サブディレクトリにそれぞれ置いています。
ドキュメントルートの .ftpaccess
<Limit ALL>
AllowUser OR hoge@example.com,hoge@www.example.com
DenyUser OR fuga@example.com,fuga@www.example.com
</Limit>
<Limit CWD CDUP LIST>
AllowUser OR fuga@example.com,fuga@www.example.com
</Limit>
Limit ALLセクション:AllowUserディレクティブ で全てのコマンドを許可するユーザを指定DenyUserディレクティブ コマンドを許可しないユーザを指定- 今回、ホスト名なしと
www.付きの両方でアクセスされる可能性を考慮してORで両方書いています
- 今回、ホスト名なしと
Limit CWD CDUP LISTセクション:CWD,CDUP,LISTの3つのコマンドのみ許可するユーザをAllowUserディレクティブ で指定
サブディレクトリ foo の .ftpaccess
<Limit ALL>
AllowUser OR hoge@example.com,hoge@www.example.com,fuga@example.com,fuga@www.example.com
</Limit>
こちらは素直に全ユーザを Limit ALLセクション に入れました。
これで意図した挙動になったことを確認。
備考
この方法だと www/foo/ディレクトリ の .ftpaccess は fuga@example.com から削除できてしまうので、誤って削除されるとそれ以降何もできなくなるのがやや心配ですね……。
しかし、権限関係も弄れないので致し方なし、でしょうか。
参考
概要
ディレクティブ一覧
- ProFTPD module mod_core
Context:に.ftpaccessが記載されていれば使えるはず
AllowUserディレクティブ, DenyUserディレクティブ
Limitセクション
Directoryセクション
.ftpaccess では Directoryセクション は使用できないため、今回は各々のディレクトリに .ftpaccess を置くことにしました。