ownCloudで画像ファイルへの直接アクセスを禁止する

最近導入したownCloudで1つ気になっていたことがある。それは、ファイルのフルパスをURLに入力すると、ログインしていなくても画像が表示されてしまうということである。これはセキュリティ的に非常にまずい。ownCloudはディレクトリ構成が大体決まっているため、まず画像データまでのパスは結構簡単に想像が付く。それに加え、今回置いてある画像はすべてiPhoneから抜き出したものなので、ファイル名も簡単に類推されてしまうというわけだ。

しかしこの問題、1つ謎があった。例えばhttp://www.example.com/owncloud/...../hoge.jpgのようにhttpでアクセスするとブラウザ上で画像が見られるのだが、これをhttpsにすると「アクセスが禁止されています」というownCloudの画面が表示される。

つまり、ownCloudさんはhttpsでのアクセスを想定しており、これに対しては何らかの手を打ってあるが、httpでアクセスされるとどうにもならないわけだ。一体どうしてこんなことになっているのか。

ここまでが前置きである。タネ明かしをすると、まずアクセス制御は普通に.htaccessで行われている。ownCloudをインストールすると、.htaccessは勝手に設定される。

問題はApacheの設定だ。ownCloudを入れると、/etc/apache2/sites-available/default-sslというファイルが適宜書き換えられ、.htaccessが有効に働くようになる。これによりhttpsでのアクセスは適切に制限がかけられるわけだが、同じディレクトリにあるdefaultというファイルは手付かずのままである。そして、こちらが設定されていないと、httpでアクセスしたときにはせっかくの.htaccessが無効化されてしまうというわけだ。

つまり今回やるべきだったことは、/etc/apache2/sites-available/defaultに以下の内容を書き加えることである。

# Setting for ownCloud
<Directory /var/www/owncloud/>
    Options All
    AllowOverride All
</Directory>

この設定自体はdefault-sslの方に書かれているので、そこからコピペすればよい。設定の意味は詳しく知らないが、/var/www/owncloudの中ではApacheの設定を.htaccessで上書き(override)できるとかそんな意味だろう(Options Allの意味は知らない)。

httpとhttpsで動作が変化するというのは中々の盲点だったが、これで安心してownCloudを使うことができそうだ。