結果だけでなく過程も見てください

たい焼きさんの日々の奮闘を綴る日記です。

proftpdで読めないディレクトリを不可視にする方法


FTPサーバのディレクトリ構造は以下の通り。

[ftproot]
 ├[staff]
 ├[ftpdata]
 :

各ユーザは、ログインするとftprootに入ります。
その下にstaffディレクトリ、ftpdataディレクトリ、
その他色々ディレクトリがあり、staffフォルダはFTPサーバの
superユーザのみアクセスできるようにします。

また、ftpdata等のディレクトリも安全のためftpグループに
所属するユーザのみアクセスできるようにします。


FTPサーバ用のユーザは以下の通り。


【ユーザ1】
ユーザ名:superftpuser
FTPスペースのすべてのディレクトリにアクセスできる。


【ユーザ2】
ユーザ名:ftpuser
staffフォルダにはアクセスできない(というかディレクトリ自体見えない)


必要なグループを定義します。

groupadd superftp
groupadd ftp


必要なユーザを定義します。パスワード設定も忘れずに。

useradd superftpuser -G superftp,ftp
useradd ftpuser -G ftp


制限したいディレクトリの権限を変更します。

chmod 750 /ftproot/ftpdata
chgrp /ftproot/ftpdata ftp

chmod 750 /ftproot/staff
chgrp /ftproot/staff superftp

chmod 750 /ftproot
chgrp /ftproot ftp


proftpd.confの設定もしちゃいましょう。
読めないディレクトリは不可視にします。

<Directory /*>
  HideNoAccess On
</Directory>

不可視にしたいだけなら↑の設定だけでいいじゃんと言われそうですが、
実際に上の設定だけだと、見えないだけでファイルを直接指定されると
アクセスできてしまいます。そのため、権限でもアクセスさせないように
するのです。


設定は以上です。
スタンドアロンproftpdを動かしている場合は再起動しましょう。


superftpuserでアクセスした場合は以下のように見えるはずです。

[ftproot]
 ├[staff]
 ├[ftpdata]
 :


で、ftpuserでアクセスした場合は以下のように見えるはずです。

[ftproot]
 ├[ftpdata]
 :


/ftproot/staffに直接アクセスしても

550 /staff Permission denied


と言われてアクセスできません。
欠点としては、上のメッセージではstaffというディレクトリが
存在すること自体はわかってしまうということです。
できればNo such file or directoryなどのメッセージを返して
欲しいですね。


これはLinuxシステムの権限を利用してアクセス制限をしているためで、
proftpd側で制限(つまりproftpd.confで制限)すれば
No such file or directoryを返すようにしてくれます。


それは次回・・・やるかなぁ^^;
個人的には上の方法で十分かなと思ってしまっているので・・・。