.ftpaccess で制限をかけた領域へ WinSCP でアクセスすると Permission denied エラー

経緯

ProFTPD の .ftpaccess でディレクトリごとにFTPユーザの許可を与えたい の記事で記載した .ftpaccess で制限をかけた領域へ WinSCP でログインしようとすると、以下のエラーが発生しました。

リモートディレクトリ名の取得時にエラーが発生しました。

PWD: Permission denied

一方、同じ領域へ FFFTP でアクセスすると一見問題なく繋がっているように見えます。実際、アップロードなどの操作もできます。

……という現象に遭遇したのでメモ。

原因

原因は必要なコマンドの権限がないことでした。

ただし、 FFFTP と WinSCP で実装上の差異がある模様。

  • FFFTP: クリティカルなエラーでない限りは、エラーが発生しても次のコマンドを発行して処理を進めてしまう
    • そのため、一見問題なく動作するように見える
  • WinSCP: エラーが発生した時点で止まってしまう

このスタンスの差が、「 WinSCP でログインするとエラーで怒られて操作できないが、 FFFTP では操作できる」という現象に繋がったようです。

とはいえ、 FFFTP もエラーそのものは発生しており、画面下のログウインドウを確認すると以下のような行が見受けられました。

>FEAT
550 FEAT: Operation not permitted

対処

以上より、対処方法はシンプルで必要なコマンドの権限を付けてあげること。

具体的には Limit ディレクティブに以下のようにコマンドを追加委sます。

<Limit CWD CDUP LIST>

↓

<Limit CWD CDUP LIST FEAT PWD XPWD MLSD>

全体としては

<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 FEAT PWD XPWD MLSD>
  AllowUser OR fuga@example.com,fuga@www.example.com
</Limit>

という形になります。

これで対処完了です。

参考

症状としては類似事例。ただし解決に至っておらず、 .ftpaaccess について言及もないため、その絡みかどうかも不明。

この記事を書いた人

アルム=バンド

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