ownCloudの内部構造と設定方法

2016年8月2日(火)
矢野 哲朗

ownCloudの内部構造について

今回は、ownCloudの内部構造の説明と前回お伝えし切れなかった細かな設定内容、そして皆さんが気になっているであろうownCloudのパフォーマンスチューニングについて解説したいと思います。

内部構造

まずownCloudの内部は以下のような構造になっています。

ownCloudの内部構造

ownCloudの内部構造

これは一番下にOSがあり、WebサーバーやDBサーバー、セッションサーバーがその上で動いていて、PHPからアクセスするという図になっています。そしてownCloudは、そのPHPの実行基盤の上にownCloudのフレームワークとなるcoreが稼働しています。ownCloudのフレームワークのcoreの上でownCloudのアプリケーションが動いています。

上記のApplicationの枠の中は以下のようになっており、ownCloudの様々な機能が一つ一つ別のアプリケーションとして実装されています。

ownCloudのアプリケーション

ownCloudの機能を提供するアプリケーション

ownCloudの機能を提供するアプリケーション

これにより、ownCloudは機能を様々に拡張できる仕組みを備えています。この拡張できる仕組みはownCloudに大きな柔軟性をもたらしています。通常のオンラインストレージサービスとの違いはここにもあります。インターネットサービスとしてのオンラインストレージサービスはユーザー毎のカスタマイズは提供されません。画一的なインターフェースや機能を提供することにより、インターネットサービスとして低価格やオペレーションのしやすさを確保しています。

しかし、ユーザーや企業によりニーズや使い方が違います。すべての会社に対してすべて要求に沿うような機能、使い勝手を提供することはできません。そこがインターネットサービスとしてのオンラインストレージの欠点にもなっています。ところが、オンプレミスやユーザー個別のクラウドにセットアップするownCloudではこの拡張性を活用して必要な機能を追加したり削除したりできるので、ニーズに合ったオンラインストレージを構築できるのです。

設定やデータの保存先

ownCloudの構造はわかりましたが、ownCloudのデータはどこに入っているのでしょうか? ownCloudに入っている情報は、ひとくちにデータと言っても様々な種類があります。

  1. ユーザーが保存した情報
  2. ownCloudがシステムとして動くために必要な情報
  3. ownCloudを動かす為に必要なミドルウェアの設定情報

の3種類です。

上記の3種類のデータが、

  1. 設定ファイル
  2. データベース
  3. ファイルシステム
  4. 外部ストレージ、外部サーバー

に保存されています。

これらの情報の設定場所は以下の図で表すことができます。

ownCloudデータ保存場所

ownCloudデータ保存場所

左のセッションデータは、ownCloudにログインした後に自動的に生成されるデータでログインしている間に必要なものです。この情報がなくなるとログアウトした状態になり再度ログインを求められます。

DBサーバーのデータは、ユーザー情報や、ファイルのメタ情報、ownCloudのアプリの情報が入っています。特にユーザー情報とファイルのメタ情報は重要です。ユーザー情報はパスワードのハッシュ情報が入っています。ファイルのメタ情報はファイルに関する「所有者」や「ファイルのハッシュ情報」、「更新日付」「ファイル名」「ファイルパス」等が入っています。

ファイルシステムには、ユーザーがアップロードしたファイルが入っています。その他にもゴミ箱ファイルや、履歴ファイル、画像のサムネイルファイル、暗号化を利用した場合の鍵ファイルも保存されます。

通常のセットアップでは、ユーザーデータは /var/www/html/owncloud/data/ に保存されますが、別のところに移動することも可能です。

次に、.htaccess と .user.ini です。これは、Apacheの設定とPHPの設定を保存しています。

では、これらの情報を以下のように分類して設定を見ていくことにします。この時点ではパフォーマンス的な観点ではなく、セキュリティや運用といった観点で設定を行います。

  • config.php
  • ウェブサーバーのSSL設定
  • Firewallの設定
  • SELinux

一番重要なのが、ownCloud のconfig.php です。これは、ownCloudのアプリケーションのディレクトリ配下の config というディレクトリに入っています。この config.php でDB接続設定や、メモリキャッシュ設定、ログ出力先、メール設定などを設定します。

次に必要なのが、ウェブサーバーの設定です。前回のインストールでは、Apacheを使いましたが、本来はもう少し設定しなければならないことがあります。これ以外にもセキュリティを高めるために、FirewallやSELinuxなども設定しておいた方がいいでしょう。

config.php について

それでは、config.php から設定を見ていくことにしましょう。前回、CentOSにインストールしたマシンの config.php を見てみましょう。CentOSにRPMでインストールした場合は、以下になります。

/var/www/html/owncloud/config/config.php

config.phpにはいくつかの情報が既に入っています。これは、ブラウザーUIからownCloudを初期設定した時に生成されて入るものです。自動的に生成されるものもありますし、入力情報がそのままconfig.phpに転記されているものもあります。

ここで、config.php の大事さについて一番最初に説明しておきます。config.php には、パスワードソルトというものが入っています。これはパスワードをハッシュ化するときに、パスワードに追加するものです。これにより同じパスワードでもハッシュの値が違うものになりますので、総当たりによるパスワードクラックに対する耐性が上がります。

"パスワード文字列"+"パスワードソルト" ⇒ ハッシュ化

ここで "パスワードソルト" が失われるといくら正しいパスワードを入力していてもログインできなくなります。そうなった場合は、ユーザーのパスワードを全部付け直しという荒技もありますが、そういう事態は極力避けるべきでしょう。バックアップ取得対象として忘れないようにしてください。

もう一つの重要な情報は、データベースへの接続パスワードが書かれていると言うことです。データベースの中には、ownCloudの設定情報が入っていますがデータベースに接続するためのパスワードをそこには書くことができません。データベースへの接続パスワードは外に書いておかなければなりません。当然、データベースへの接続パスワードは暗号化もされていませんので平分で見ることができてしまいます。接続IDとパスワードがあれば誰でも接続できてしまいます。

config.php は上記のような重要な情報が入っていますので取り扱いには注意をお願いいたします。

デフォルトでは以下のような設定値が入っています。

config.php設定内容項目

設定項目名設定内容デフォルト値
updatecheckerownCloudのアップデートがあるか管理画面で知らせるTrue
instanceidownCloudのインストールを一意に示すID自動生成
passwordsaltユーザーのパスワードハッシュ化に利用するソルト自動生成
secretownCloud暗号フレームワークで利用する文字列自動生成
trusted_domainsホストヘッダーインジェクション対策用のドメイン名
ownCloudを動かすドメイン名、IPアドレスを記載
設定時のIPアドレス
datadirectoryownCloudのユーザー毎のファイルを保管するディレクトリの大元のディレクトリ初期設定画面で選択したもの
overwrite.cli.urloccコマンドで接続するownCloudのURLを指定http://<owncloudのIPアドレス>
dbtypeownCloudで利用するデータベースのサーバの種類初期設定画面で選択したもの以下のものがある
sqlite (SQLite3)
mysql (MySQL/MariaDB)
pgsql (PostgreSQL)
oci (Oracle エンタープライズ版のみ)
versionownCloudのインストールされているバージョンインストール時に自動設定
dbnameデータベース名初期設定画面で入力したもの
dbhostデータベースサーバーのホスト名初期設定画面で入力したもの
dbtableprefixデータベースのテーブル名の前置文字列oc_
dbuserデータベース接続ID初期設定画面で入力したもの
dbpasswordデータベース接続パスワード初期設定画面で入力したもの
loglevelログの出力レベル0 = Debug
1 = Info
2 = Warning
3 = Error
4 = Fatal
installed初期設定が完了しているかどうかのフラグtrue
maintenanceメンテナンス中かどうかの設定
これがtrueの場合ユーザーがログインできなくなります。
false

その他の設定については config.php と同じフォルダに config.sample.php がありますので参考にしてください。ディストリビューションによっては入ってない場合もあります。その場合は、GitHubの config.sample.php を参考にされると良いでしょう。

デフォルトの設定は上記の通りですが、ログに関する設定を変更しておきましょう。

'logdateformat' => 'Y-m-d H:i:s',
'logtimezone' => 'Asia/Tokyo',
'loglevel' => 1,

です。行末の(,)を忘れないようにしてください。

上記でownCloudのログの日付が日本時間になり、ログの時刻フォーマットが "年ー月-日 時:分:秒" になります。

次に各ミドルウェアの設定を詳細に見ていくことにしましょう。

ApacheのSSL設定

SSL証明書

言うまでもないことですが、インターネット上ではデータの盗み見がどこでされていても不思議ではありません。インターネットからアクセスできるようにownCloudをセットアップする場合は必ずSSL証明書を設定しましょう。ドメインさえあれば、*1Let's Encryptで無料のSSL証明書を取得できるようになっています。

[*1] Let's Encrypt - Free SSL/TLS Certificates https://letsencrypt.org/

SSL設定

Apacheの設定ではあまりすることはありませんが、SSL証明書の設定についてはデフォルトではSSLv3が有効であるなど良くない設定がありますので修正します。

※1) SSL/TLS暗号設定ガイドライン~安全なウェブサイトのために(暗号設定対策編)~:IPA 独立行政法人 情報処理推進機構https://www.ipa.go.jp/security/vuln/ssl_crypt_config.html

vi /etc/httpd/conf.d/ssl.conf
SSLProtocol all -SSLv2 -SSLv3

SSLv3は現在問題がある事が分かっていますので対応プロトコルから外す必要があります。

SSLHonorCipherOrder on
SSLCompression      off
SSLSessionTickets   off

サーバー側から暗号化スイートの順番を指定します。予期せぬ脆弱な暗号の選択を避けます。

SSLCipherSuite "EECDH+AESGCM:EECDH+AES:EDH+AES:-EDH+AESGCM:!DSS"

を最低限設定しましょう。

ログ保存場所の変更

ownCloudのログの保存場所は、config.php で設定します。ログの保存場所を作成して出力先を変更します。

# mkdir /var/log/owncloud/
# chown -R apache /var/log/owncloud/
# vi config.php
  'logfile' => '/var/log/owncloud/owncloud.log',

設定を有効にするためにApacheを再起動します。

systemctl restart httpd

ログイン画面でパスワードをワザと間違えるとログが出力されます。 /var/log/owncloud/owncloud.log にファイルができていることを確認してください。

ログローテート

ログの出力先は変更しましたが、そのままではログファイルがずっと貯まってしまうのでログをローテートしておきましょう。

Apacheのセキュリティ設定

同様に、SSLの設定で HTTP Strict Transport Security (HSTS)の設定をしましょう。ssl.conf の最後の</VirtualHost>の前に以下の設定を追加してください。

      Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"

サブドメインでのアクセスを含まない場合は includeSubDomainsを削除してください。

バックアップ

バックアップは、以下の3つものをバックアップしてください。

  1. owncloudの config.php 設定ファイル
  2. DBのダンプ
  3. datadirectoryで示したディレクトリ

ここでは記載しませんが、バックアップはスクリプトでバックアップするようにして保存期間なども10日ぐらいで指定するとよいでしょう。

以上で、設定の基本的なところとセキュリティ設定、バックアップの方針について説明しました。次回はownCloudの動作を軽くするチューニングポイントについてお伝えする予定です。

株式会社スタイルズ ownCloudエバンジェリスト
ownCloudによる安全で自由なファイルのやり取りができるように目指している。Version 4.0から日々、地雷を踏んできた。これからのデータ時代に必要なソフトウェアと認識し、最新情報の収集や翻訳作業にいそしんでいる。最近、Jupyter Notebookに挑戦中。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています