ProFTPD の .ftpaccess でディレクトリごとにFTPユーザの許可を与えたい

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/ディレクトリ の .ftpaccessfuga@example.com から削除できてしまうので、誤って削除されるとそれ以降何もできなくなるのがやや心配ですね……。

しかし、権限関係も弄れないので致し方なし、でしょうか。

参考

概要

ディレクティブ一覧

AllowUserディレクティブ, DenyUserディレクティブ

Limitセクション

Directoryセクション

.ftpaccess では Directoryセクション は使用できないため、今回は各々のディレクトリに .ftpaccess を置くことにしました。

その他

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。