ownCloud導入はじめの一歩(仮想マシンイメージとCentOS 7のインストール手順)
構成の概要説明
連載第2回は、ownCloudと他のオンラインストレージとの比較、優位点を説明してきました。第3回では実際にownCloudを構築して利用できるところまで設定してみましょう。
その前にownCloudがどういうミドルウェアの組み合わせで動いているかを説明します。ownCloudは以下のような組み合わせで動作しています。
これは一般的にLAMP構成やLEMP構成と呼ばれるもので、
- Linux
- Apache(もしくは、Nginx)
- MySQL(もしくは、MariaDB)
- PHP
を構成要素としています。
ownCloudはPHPが動く環境であれば、Linuxのほとんどのディストリビューションで動作します。今回は仮想マシンイメージと日本でよく利用されているCentOS 7の2パターンのインストール方法を説明していきます。ownCloudのバージョンは、2016年3月にリリースされた9.0系を使用します。
インストール方法について
インストール方法はいくつかあり、ownCloud社のサイトに以下のように示されています。
Getting Started with ownCloud | ownCloud.org
https://owncloud.org/install/#instructions-server
インストール方法の種類
- tar.gzの展開によるインストール
tar.gzでまとめられたownCloudのソースコードを展開して設定するものです。細かなミドルウェアを自分で設定する必要があります。 - webインストーラー
シェルスクリプトで作成されたインストールツールを使うものです。主にWebホスティングサーバーで使用します。 - Linuxディストリビューション向けのパッケージファイル
Linuxディストリビューション向けのownCloudをパッケージングしたファイルで、ある程度自動的に設定してくれるものです。 - 仮想マシンイメージ
仮想環境で動くものでOSその他が全部入っています。ownCloudがセットアップされた状態で起動できますので最小限の手間でownCloudを動かすことができます。
簡単に利用するであれば4の仮想マシンイメージが一番でしょう。しかし、仮想環境を用意する必要があります。また、利用中にDisk領域が足りなくなった、スケールアウトしたいなど必要が生じた場合の対応が難しくなります。通常は、3のパッケージファイルを利用するのが一番よいでしょう。
仮想マシンイメージを利用したインストール
仮想マシンイメージは、以下の種類が用意されています。
- OVA
- QCOW2
- raw
- VHDX
- VMDK
- VMX
ご利用の仮想環境に応じたファイルをダウンロードしてください。これらの仮想マシンイメージは、OSがUbuntu 14.04 LTS に設定されています。
では実際に仮想マシンイメージでownCloudを動かしてみます。上記のOVAファイルを使いVirtualBoxで起動させます。
OVAファイルのダウンロード
$ wget http://download.owncloud.org/community/production/vm/Ubuntu_14.04-owncloud-9.0.2-1.1-201605101540.ova.zip
(上記のURLは2016年6月時点でのURLです。将来変更がある可能性があります。前述のURLを確認して最新のOVAファイルをダウンロードするようにしてください。)
ダウンロードした zipファイルを展開する。
$ unzip Ubuntu_14.04-owncloud-9.0.2-1.1-201605101540.ova.zip
展開された Ubuntu_14.04-owncloud-9.0.2-1.1-201605101540.ova をVirtualBoxで新規仮想マシンとして読みませて起動します。
起動した仮想マシンのIPアドレスを以降「<private ipaddress>」と記載します。実際に設定されているIPアドレスに読み替えてください。
VirtualBoxのネットワーク設定については、紙面の都合上省略しています。以下のサイトなどをご参照ください。
ネットワーク設定 | VirtualBox Mania
http://vboxmania.net/content/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E8%A8%AD%E5%AE%9A
ネットワークの設定を「ブリッジアダプター」に変更し、DHCPサーバーが動いている環境であれば自動的にIPアドレスが設定されます。
しかし、上記では一つ問題があります。ownCloudには接続URLのドメインを制限する機能があり、このドメインを制限する機能により以下のURLを入力してもうまく表示されません。
http://<private ipaddress>/owncloud/
これを解消するには、以下のファイルの編集が必要です。
/var/www/owncloud/config/config.php
そのためには、起動後の画面でコンソールからログインして作業します。
まず、owncloud login: に admin と入力し、画面上部のInitial admin passwordに表示されているパスワードを入力します。
パスワードを入力してしばらくするとキーボード設定が始まります。
ここでキーボードレイアウトを変更します。スペースを押してください。
次に「Configuration keyboard-configuration」の「Keyboard model:」で「Generic 105-key (Intl) PC」を選択してエンターを押します。
次に「Country of origin for the keyboard」で「Japanese」を選択してエンターを押します。
次に「Keyboard layout:」で「Japanese」を選択してエンター押します。
次に「Key to function as AltGr:」で「The Default for the keyboard layout」を選択してエンターを押します。
次に「Compose key:」で「No compose key」を選択してエンターを押します。
キーボード設定が終わったらタイムゾーンを変更します。スペースを押します。
「Geographic area:」で「Asia」を選択してエンターを押します。
「Time zone:」で「Tokyo」を選択してエンターを押します。
次にUbuntu OS上のadminユーザーにパスワードを設定します。
「Enter your new password for admin here:」に"新しい任意のパスワード"を入力してください。パスワードを入力すると
Your new password is:XXXXXX Is this correct? ([y]es or [N]o):
と表示されるので、「y」と入力してエンターを押してください。次回からは上記のパスワードでログインします。忘れないように記録しておいてください。
以下のコマンドプロンプトが出力されればログイン完了です。2回目以降のコンソールへのログイン時には、上記を設定する必要はありません。ctrl+cでスクリプトをキャンセルしてください。すぐに以下のコンソールが利用可能です。
admin@owncloud:~$
好きなエディターでconfig.php ファイルを編集して、起動した仮想サーバーに紐付いているIPアドレスを追記します。
$ sudo vi /var/www/owncloud/config/config.php
以下のような記述がある箇所があります。
'trusted_domains' => array ( 0 => 'localhost', ),
以下のように1行追加します。
'trusted_domains' => array ( 0 => 'localhost', 1 => '<private ipaddress>', ),
Apacheサーバーを再起動します。
$ sudo service apache2 restart
再度ブラウザーUIから以下のURLを開いて
https://<private ipaddress>/owncloud/
という画面が出たらもう少しです。これはまだSSL証明書を設定していないのでエラーが表示されています。「詳細...」を押して「例外を追加」を押してください。ダイアログが出ますので、「セキュリティ例外を承認」ボタンを押してください。
SSL証明書を追加できたら、以下の画面が表示されると思います。
adminとコンソールログイン時のパスワードを入力してownCloudにログインしてください。以下の画面が表示されればセットアップできています。
この画面は右上の「×」を押して操作を続けられます。右上の「admin」から管理画面を表示します。いくつか警告が出ているようです。続いてこちらを対応します。
APCuが古い事によるアラートは以下のように対応します。
$ sudo apt install -t trusty-backports php5-apcu
インストール終了後、Apacheを再起動します。
$ sudo service apache2 restart
管理画面をリロードしてください。アラートが消えたでしょうか。
仮想マシンイメージを使ったインストールはここまでとします。もう一つのアラート「メモリーキャッシュが設定されていません」については、パフォーマンスチューニングの項で説明したいと思います。
CentOS 7にパッケージファイルでインストール
次にインストール方法3で取り上げたパッケージファイルを使ってCentOS 7.2にownCloudをインストールしてみます。CentOS 7を使う場合に問題点が1つあります。それはデフォルトで用意されているPHPのパッケージのバージョンが5.4.16と古いことです(セキュリティパッチなどはRedHat社がバックポートしていますが基本性能はそのままです。PHP5.4はパフォーマンスが劣るのでお勧めしません)。今回はデフォルトのPHPパッケージファイルで設定して、パフォーマンスチューニングでバージョンアップすることにしましょう。
ownCloudの各ディストリビューション向けのファイルは以下のURLから見つけることができます。
https://download.owncloud.org/download/repositories/stable/owncloud/
それぞれのディストリビューションにあったパッケージ管理ツールを使用してownCloudをインストールできます。
CentOSへのインストールですので、CentOSのロゴをクリックします。すると、インストール方法が下に表示されます。CentOS 6 の設定方法もありますので間違えないよう注意してください。
SSHなどでコンソールにログインして以下の作業を行います。root権限で行ってください。
- ownCloudパッケージの鍵情報をインポートします。
# rpm --import https://download.owncloud.org/download/repositories/stable/CentOS_7/repodata/repomd.xml.key
- レポジトリファイルをダウンロードします。
# wget http://download.owncloud.org/download/repositories/stable/CentOS_7/ce:stable.repo -O /etc/yum.repos.d/ce:stable.repo
(wget コマンドがインストールされていない場合は、# yum -y install wgetでインストールしてください)
- キャッシュをクリアします。
# yum clean expire-cache
- ownCloudをインストールします。
# yum -y install owncloud mod_ssl
以上でownCloudはインストールされましたが、データベースの準備ができていません。CentOS 7は、MySQLではなくMariaDBが標準になっています。MariaDBをインストールします。
- MariaDBをインストールします。
# yum -y install mariadb-server
- データベースの文字コードをutf-8に変更します。
# vi /etc/my.conf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock character-set-server=utf8
- systemctlコマンドでMariaDBを有効にしてMariaDBを起動します。
# systemctl enable mariadb.service # systemctl start mariadb.service
- MariaDBを初期設定します。
初期設定は、初期セットアップコマンドで対話的に設定します。途中、MariaDB用のrootパスワードを設定します。ここでは新しい任意のパスワードを入力してください。ownCloudで利用する管理者のパスワードとは違うパスワードにしましょう。このパスワードは後ほど利用します。忘れないように記録しておいてください。それ以外についてはエンターを押してください。
# mysql_secure_installation /usr/bin/mysql_secure_installation: 行 379: find_mysql_client: コマンドが見つかりません NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none):[エンター] OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. Set root password? [Y/n] [エンター] New password: [ルートパスワードを入力] Re-enter new password: [ルートパスワードを入力] Password updated successfully! Reloading privilege tables.. ... Success! By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] [エンター] ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] [エンター] ... Success! By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] [エンター] - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] [エンター] ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
- Firewallを設定します。
80番ポートと443番ポートを開ければいいので以下のように設定します。
# firewall-cmd --permanent --zone=public --add-service=http # firewall-cmd --permanent --zone=public --add-service=https # firewall-cmd --reload
- SELinuxをいったん無効にします。
# setenforce Permissive
- Apacheサーバーを有効にして起動します。
# systemctl enable httpd.service # systemctl start httpd.service
上記まで終了したら、ブラウザーからサーバーのIPアドレスを開きます。
https://<private ipaddress>/owncloud/
SSL証明書のエラーが出たら、仮想マシンイメージの時と同じように例外の追加を実施します。
以下のような画面が表示されると思います。
そのまま「セットアップを完了します」を押すとSQLiteというデータベースを利用します。しかし、これはファイルベースのデータベースであるため性能の面でお勧めしません。先ほど設定したMariaDBに変更するために「ストレージとデータベース」をクリックしてください。
次のボタンが表示されます。
「データベースを設定してください」の下の「MySQL/MariaDB」をクリックしてください。
以下のような表示になります。
以下の項目を入力してください。
- 管理者アカウントのID:oc_admin
- 管理者アカウントのパスワード:<管理者パスワード>
- データベースのユーザー名:root
- データベースのパスワード:<MariaDBのrootのパスワード>
- データベース名:ownclouddb
<管理者パスワード>には、新しい任意のパスワードを設定できます。<MariaDBのrootのパスワード>は、mysql_secure_installation を実行したときのパスワードです。
以下のようになります。
すべて入力し終わったら、「セットアップを完了します」をクリックします。
上記画面が表示されていればセットアップ完了です。
SELinuxを無効にしていたものを戻します。
# setenforce Enforcing
SELinuxのコンテクストを設定します。
#semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/owncloud/data' #restorecon '/var/www/html/owncloud/data' #semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/owncloud/config' #restorecon '/var/www/html/owncloud/config' #semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/owncloud/apps' # restorecon '/var/www/html/owncloud/apps' # semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/owncloud/config/config.php' # restorecon -v '/var/www/html/owncloud/config/config.php' # semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/owncloud/.user.ini' # restorecon -v '/var/www/html/owncloud/.htaccess' # semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/owncloud/.htaccess' # restorecon -v '/var/www/html/owncloud/.user.ini'
ここまででIPアドレスで接続できるようになりました。しかし、インターネットから接続できるようにするためにはIPアドレスで接続するのはよくありません。
そこで ownCloud にドメイン設定を入れます。これによりDNSに登録されたFQDNによりサーバーを参照できます。※DNSサーバーの設定方法はここでは述べません。
ownCloudはconfig.php という設定ファイルとデータベース内にある設定テーブルに設定が記録されています。config.phpはownCloudが動くための基本的な設定が書かれています (例:DBサーバーへの接続設定やownCloudの挙動を変更する設定など)。
config.phpは以下に設置されています。
/var/www/html/owncloud/config/config.php
設定が終了した初期段階でのconfig.php設定ファイルは以下のようになっています。
<?php $CONFIG = array ( 'updatechecker' => false, 'instanceid' => 'oc2yhp5u53h3', 'passwordsalt' => 'MNO+/zMxLY9uTdLX7RQvJd4Hea8uqb', 'secret' => 'Kr3GU//agA7Xmnz42dkj/eH5BZytxO28XZREz+rd2F7KPehf', 'trusted_domains' => array ( 0 => '<private ipaddress>', ), 'datadirectory' => '/var/www/html/owncloud/data', 'overwrite.cli.url' => 'http://<private ipaddress>/owncloud', 'dbtype' => 'mysql', 'version' => '9.0.2.2', 'dbname' => 'ownclouddb', 'dbhost' => 'localhost', 'dbtableprefix' => 'oc_', 'dbuser' => 'oc_oc_admin', 'dbpassword' => 'mWJRDwMXcCmtFhBQX3XenFa66XsHM4', 'logtimezone' => 'UTC', 'installed' => true, );
instanceid,passwordsalt,secret,dbpassword についてはインストールした環境毎に違います。ご注意ください。
まず書き換える必要があるのは以下の項目です。
'trusted_domains' => array ( 0 => '<private ipaddress>', ),
ここに以下のように追記します(example.co.jpはサンプルです。お持ちのドメインに変更してください)。お好きなエディターで開いて編集してください。
'trusted_domains' => array ( 0 => '<private ipaddress>', 1 => 'example.co.jp', ),
設定終了後にはapacheを再起動しておきましょう。
$ systemctl restart httpd.service
上記で基本的なownCloudの設定が完了しました。後は、セキュリティを万全にするために、
- SSL証明書の取得
- SSL設定
- ログ保存場所の変更
- ログローテート
- Apacheのセキュリティ設定
- バックアップ
などが必要です。
ownCloudのメリットはクラウド上にファイルを保存しない事によるセキュリティの確保です。しかし、自分で構築したownCloudのメンテナンスが不十分でセキュリティ不備による情報漏えいになってしまっては、クラウドに置いておいた方がマシという事になりかねません。充分注意してアップデートは欠かさないようにしましょう。
次回は、SSL設定、ログ保存場所の変更、ログローテート、Apacheのセキュリティ設定、バックアップ、メモリーキャッシュによるパフォーマンスチューニングについて解説します。
なぜ、trusted_domains を指定する必要があるの?
これは、Hostヘッダーインジェクションを防ぐためにあります。例えば悪意のある第三者が、勝手にドメインを取得しプロキシーを立ててユーザーが発行したHTTPリクエストのヘッダー中にhost:evil.example.co.jp という偽のホスト名を入れてアクセスさせたとします。PHPで$_SERVER['SERVER_NAME']を使っている場合、この環境変数が汚染されてしまうことになります。
trusted_domainsを設定しておくとHostヘッダーがtrusted_domainsに入っていないドメイン名のリクエストは拒否することができます。