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
を置くことにしました。