ownCloud 10.3 での主な変更点

ownCloud 10.3 がリリースされました。
主な変更点や注意点については下記となります。

  • PHP7.3がサポートされました。
  • PHP7.0のサポートが廃止されます(10.3.1で予定)
  • バックグラウンドジョブ(システムcron)の指定方法が変更されます。

※cron.php が削除され、occコマンドによる実行となります。
 設定移行期間として、しばらくは cron.php も使用できるようです。

/path/to/your/owncloud/cron.php から
/path/to/your/owncloud/occ system:cron 
へ変更となります。
  • galleryとfiles_videoplayerアプリに代わり、Media Viewerアプリが登場し、galleryとfiles_videoplayerアプリは廃止されます。
  • Redisでのセッション処理が改善(OAuth2認証の動作改善)されました。
  • OpenStack SWIFTオブジェクトストレージのサポートが正式に削除されました。
  • files_externalから、S3オブジェクトストレージが独立し、files_external_s3というアプリで提供されるようになりました。
  • 新しいHTTP APIが追加されました。

詳しくは ownCloudリリースノート を参照 してください。

その他の変更点や詳細については チェンジログ より確認ができます。

docker for macでwordpress+mysqlな環境を構築する

手持ちの mac book で ownCloud や wordpress の ローカル開発環境を構築したい。

virtual box 環境でもいいんだけど、使い捨てにできるコンテナを使いたいので、勉強もかねて未だによく分かっていない docker を使ってみることにした。

これでお仕事もドッカンドッカン進むようになるはず。
ドッカーなだけに。

※この記事は進捗があり次第、随時アップデートされていく形式です。

“docker for macでwordpress+mysqlな環境を構築する” の続きを読む

Fail2banでownCloudへのブルートフォースアタックを阻止する

ownCloudへのブルートフォースアタックは、TOTPによる2段階認証を導入することで制限が可能です。

ただし、それぞれのアカウントで 2段階認証の設定をしなければならないので、すべてのアカウント対してログイン画面へのブルートフォースアタックを完全に防ぐことは難しいです。
2段階認証を設定しない人とかたぶんいるでしょうし。

今回は、複数回のログイン試行の失敗ログを検知し、動的に一定時間システムへのアクセス制限を行う方法について、まとめてみます。

ちなみに、派生版の Nextcloud には、複数回のログイン試行があった際に、接続をブロックする機能が既に実装されていますので、この対策は必要ないかもしれません。

“Fail2banでownCloudへのブルートフォースアタックを阻止する” の続きを読む

Nginx の SSL証明書更新方法

SSL証明書(サーバ証明書)の期限が近づいたので証明書の更新をしました。
その時の手順についてのメモです。

概要

  • サーバ証明書と中間証明書を結合したものをSSL証明書として使います。
  • 新旧のSSL証明書を入替える方法(リネーム)で更新します。
  • Nginx 10.3.1 の環境です。

既存のSSL証明書のパスの確認

nginxのコンフィグを確認し、既存のSSL証明書のパスを確認します。
通常は、/etc/nginx/conf.d/ 配下に、バーチャルホスト毎に
conf ファイルが作成されているので中身を確認します。

ssl_certificate /etc/pki/tls/certs/server.crt;
ssl_certificate_key /etc/pki/tls/private/server.key;

ssl_certificate は、SSL証明書のパスを設定します。
Nginxの場合、SSL証明書と中間証明書を結合したものを ssl_certificate に設定します。
このあたりはApacheとはちょっと違います。

ssl_certificate_key は、秘密鍵のパスを設定します。
前回と同じ秘密鍵を使用した場合は変更不要です。

・SSL証明書の保存ディレクトリ
/etc/pki/tls/certs/

・秘密鍵の保存ディレクトリ
/etc/pki/tls/private/

SSL証明書の更新作業

古いSSL証明書を退避します。

# cd /etc/pki/tls/certs/
# mv server.cer server.cer.作業日の日付

新しいSSL証明書と、中間証明書を結合します。

# cat 新しい証明書.crt 中間CA証明書.cer > server.cer

nginxサービスを再起動します

# systemctl restart nginx

SSL証明書の確認

https:// で問題なく接続ができることと、SSL証明書の期限が延長されていることを確認します。

SSL証明書の確認は、Google chrome の場合は、
F12キー => Securityタブ => View certificate から確認できます。

SSL証明書の確認方法

ownCloud 9.1 files-antivirus の設定手順まとめ

やること

  • clamdをインストールし、ウィルス定義ファイルの自動更新を有効にします
  • インストール済みの ownCloud に、files-antivirus アプリを設定します
  • ownCloudにファイルをアップロードしてスキャンの動作確認をします

制限事項

  • CentOS7(または 6)でのまとめです
  • ownCloud9.1.4 でのインストール手順です(他バージョンでもだいたい同じ)
  • 暗号化環境の場合は、暗号化済みのファイルはスキャンできません
  • 暗号化環境の場合は、ファイルアップロード時のみウィルスチェックが可能です
  • 暗号化環境で files-antivirus アプリを導入すると、ownCloud 9.1.4 環境では、暗号化済みファイルをスキャンできないエラーメッセージが大量のログとして記録され続けるようです

設定例

  1. clamAVインストールのために、EPELリポジトリをインストールします
  2. yum install epel-release
    
  3. clamAV関連パッケージのインストール
  4. yum install \
    clamav \
    clamav-scanner \
    clamav-scanner-systemd \
    clamav-server \
    clamav-server-systemd \
    clamav-update
    
  5. clamAVの設定ファイルを設定します。(デフォルトで大丈夫です)
  6. vi /etc/freshclam.conf
    vi /etc/clamd.d/scan.conf
    
  7. ソケットの場所を確認しておきます
  8. /etc/clamd.d/scan.conf 内の、LocalSocket を確認します。

    less /etc/clamd.d/scan.conf
    LocalSocket /var/run/clamd.scan/clamd.sock
    

    または、netstatコマンドでも確認できます。

    netstat -a|grep clam
    unix  2      [ ACC ]     STREAM     LISTENING     12247152 /var/run/clamd.scan/clamd.sock
    
  9. freshclam コマンドで、ウィルス定義データベースのアップデートが可能か確認します
  10. freshclam
    
    Database updated (6223827 signatures) from database.clamav.net (IP: 218.44.253.75)
    

    上記のように、update が完了すればOKです。

  11. ウィルス定義データベースのアップデート処理を、cron へ登録します。
  12. 下記の例では、毎時37分にウィルス定義データベースのアップデートをチェックします。

    echo '37  *  *  *  *  /usr/bin/freshclam --quiet' > /etc/cron.d/freshclam
    
  13. clamd を起動します
  14. systemctl enable clamd@scan.service
    systemctl start clamd@scan.service
    
  15. ownCloud で files antivirs アプリを有効にします
  16. 画面左上アプリから、Antivirus App for files を有効にします。

    files_antivirusアプリの有効化

  17. files antivirs を設定します
  18. 管理画面 => アンチウィルスの設定を開きます。

    files_antivirusアプリの設定例

    モード:Daemon(ソケット)
    ソケット:手順4で確認したソケットの場所
    を設定します

    その他の項目は、適宜調整してください。

  19. テストファイルをアップロードする
  20. WebUI(ブラウザ経由)からドラッグドロップでファイルを追加してみます。
    リアルタイムスキャンの処理待ちのタイムラグが感じられるかもしれません。

  21. ownCloudのログを確認します
  22. Permission denied が出る場合は、ownCloudを動かしているユーザ(webユーザ)が、clamdソケットへのアクセス権がないためと思われるので、権限を付与してあげる必要があります。

    {"reqId":"\/nKxLDUaZlikGBsdwrB5","remoteAddr":"192.168.1.8","app":"PHP","message":"stream_socket_client(): unable to connect to unix:\/\/\/var\/run\/clamd.scan\/clamd.sock (Permission denied) at \/var\/www\/html\/owncloud_9.1.4_enc\/apps\/files_antivirus\/lib\/scanner\/external.php#27","level":3,"time":"2017-04-10T01:58:15+00:00","method":"POST","url":"\/index.php\/apps\/files\/ajax\/upload.php","user":"admin"}
    {"reqId":"\/nKxLDUaZlikGBsdwrB5","remoteAddr":"192.168.1.8","app":"no app in context","message":"OCA\\Files_Antivirus\\AvirWrapper OCA\\Files_Antivirus\\AvirWrapper::fopen Cannot connect to \"\/var\/run\/clamd.scan\/clamd.sock\": Permission denied (code 13)","level":2,"time":"2017-04-10T01:58:15+00:00","method":"POST","url":"\/index.php\/apps\/files\/ajax\/upload.php","user":"admin"}
    
  23. WEBサーバの実行権限に、Clamdの権限を付与します
  24. clamscan グループへ Nginxのアカウントを追加します
    Apache な人は、Nginx 部分を読みかえてください。

    cat /etc/group
    clamscan:x:989:
    

    Nginx アカウントの状態確認

    id nginx
    uid=996(nginx) gid=994(nginx) groups=994(nginx)
    

    ユーザ nginx をグループ clamscan に追加

    gpasswd -a nginx clamscan
    

    Nginx アカウントの状態確認

    id nginx
    uid=996(nginx) gid=994(nginx) groups=994(nginx),989(clamscan)
    
  25. 再度テストファイルをアップロードして正常にスキャンが行われれば完了です
  26. {"reqId":"kM1cZkCorCiKgtoCcJ9N","remoteAddr":"192.168.1.8","app":"files_antivirus","message":"Response :: stream: OK\n","level":0,"time":"2017-04-10T02:33:28+00:00","method":"POST","url":"\/index.php\/apps\/files\/ajax\/upload.php","user":"admin"}
    

Nextcloudのファイル自動削除機能(Retention)の動作について

Nextcloudのファイル自動削除機能を使ってみましたので、分かったことなどをメモします。

ファイルの自動削除機能は、Retention アプリを有効にすることにより、管理画面から設定が可能です。

ownCloudでは、Enterprise Edition (有償版)で使える機能のようです。

Nextcloud側にはまだドキュメントが用意されていないようですが、ownCloudのEnterprise版のマニュアルを参照すると、少し機能説明が載っています。
ただし、Nextcloudでもまったく同じ仕様で実装されているかはわかりません。

ownCloud | Advanced File Tagging With the Workflow App (Enterprise only)

マニュアルをみる感じでは、TagBase と UserBase のモードがあるらしいですが、今回は TagBase の動作について確認します。

タグベースモードの仕様について

ある特定のシステムタグが付与されたファイルが存在する場合、タグに対して設定した経過時間を過ぎた時に、そのタグが付与されたファイルが削除される仕組みです。

ファイルへのシステムタグの付与は、オートタギング機能か、手動で設定をする必要があります。

下記は、Nextcloud 11.0.1 時点での確認できた挙動です。

  • ファイルの削除タイミングはおそらく日ごとに1回
  • ファイルの経過時間の判定は、mtime を見ている
  • ファイルの更新が行われると mtime も更新されるため期限とならずに削除されない
  • 削除されたファイルはゴミ箱(アプリ)へ保存されずに異次元へと消える
  • 削除されたファイルのログは残らない(cronの実行ジョブのみ)

また、バグというか仕様上仕方がないというか、Retention のルールを削除する前に、ルールを設定中のシステムタグを削除してしまうと、retention の jobは消えずに残ってしまうため、バックグラウンドジョブ実行の度に、そんなシステムタグは存在しないというエラーが出力され続けるようになります。

この場合は、直接データベースを操作して oc_jobs テーブル内のキューを削除する必要があります。

タイムスタンプの仕様について

もう1点残念な仕様がありまして、Nextcloudや、ownCloudはファイルのタイムスタンプに、mtime を参照しています。

atime … 最終アクセス日時 (access time)
mtime … 最終変更日時 (modify time)
ctime … 最終ステータス変更日時 (change time)

mtime は、ファイルを変更した時に更新されます。
正確には write(2) または truncate(2) した場合に変更されるようです。

たとえば、Windows端末などから、Nextcloudへファイルを追加した時は、mtime は更新されません。

Windowsで10ヶ月前に更新されたファイルをアップロードした場合は、Nextcloud上でも10ヶ月前のファイルです。
(これはバックエンドにファイルサーバを接続した時を考慮した仕様だと思います。)

このファイルに Retentionアプリで、1ヶ月の有効期限を設定した場合、次回のチェックのタイミングでファイルは異次元へと旅立ちます。

ファイル名の変更(rename)やパーミッションの変更(chmod)などでも mtime は更新されないようなので、ファイルの期限(時限)設定の使いかたには少しコツが必要そうです。

テキストエディタで直接編集を行えば、タイムスタンプ(mtime)は更新されます。

Shuttle DH170 で省スペース省電力の自作PCを作成しました

DH170ベアボーンキット

Shuttle DH170 で省スペース省電力の自作PCを作成しました。

Shuttle DH170 はベアボーンタイプの自作PCキットです。

Shuttle XPC ベアボーンPC DH170

新品価格
¥25,980から
(2017/6/1 15:21時点)

ベアボーンというのは、パソコン筐体と電源、マザーボードがセットになっている状態で販売されているものです。
ですので、あとは好みのCPUと、メモリと、SSD(HDD)を選んで買って入れればパソコンが出来上がります。

ベアボーンキットのフタをひらくと、こんな感じになっています。

DH170ベアボーンキット

2つあるファンの下にある黒色のトレーに、2.5インチのSSD/HDD を積みます。
2.5インチSSDやファンの下層に、マザーボードがあるので、そこにCPUやメモリをセットすればOKです。

メカにそれほど詳しくなくても自作PCの作成ができるので、素人にも手が出しやすいです。

ただ、CPUとメモリとSSDだけを選べばと言ったものの、これが結構悩むんですよね。
選んでいる時は楽しい時間でもありますが。

自分は以下のパーツ構成にしました。
価格は購入時の金額です。

  • ベアボーン : Shuttle DH170 (¥27,183)
  • CPU : Core i5-6500 3.2GHz (¥20,940)
  • メモリ : CT2KIT102464BF160B (¥8,002)
  • SSD : SanDisk Exteme PRO 480GB(¥18,924)

Intel CPU Core i5-6500 3.2GHz 6Mキャッシュ 4コア/4スレッド LGA1151 BX80662I56500 【BOX】

新品価格
¥21,600から
(2017/6/1 15:37時点)

Crucial [Micron製] DDR3L ノート用メモリー 8GB x2 ( 1600MT/s / PC3-12800 / CL11 / 204pin / 1.35V/1.5V / SODIMM ) 永久保証 CT2KIT102464BF160B

新品価格
¥14,187から
(2017/6/1 15:59時点)

SanDisk SSD Extreme PRO 480GB [国内正規品] メーカー10年保証付 SDSSDXPS-480G-J25

新品価格
¥26,749から
(2017/6/1 16:07時点)

購入時の価格は、合計で約7万5千円でした。
このほかに、WindowsOSのライセンス費用は別途必要です。

CPUに core i3-6100 を選択したり、SSD の種類や容量を下げればもう少しお安く仕上がりそうですね。

ちなみにM.2規格の対応スロットが搭載されているので、
M.2規格のSSDを入れれば、2.5インチの領域に、追加のHDDやSSDも乗せることができます。

自分の用途では、ストレージはそれほど必要ないので、2.5インチSSDを1機搭載にしました。
容量が足りない場合は外部のストレージ使えばよいです。

ただSSDそのものはあまりケチらないほうがよいと思います。
安物のSSDだとプチフリーズが発生したりしてストレスが溜まります。
あと理論値上は長時間寿命とかありますが、1年程度でヘタるものがとても多いような気がします。

Exteme PRO(通称エキプロ)は少しお高いですが抜群に安定しています。

現在はVESAマウントで、ディスプレイの背面に固定して使ってます。
デスク周りがスッキリして嬉しいです。

DH170のVESAマウント

DH170のVESAマウント2

筐体が小さいので田舎への長期帰省中や、オフィスの移動時にも持ち運びが簡単なので便利です。

Shuttle のベアボーン使いやすいです!

NextcloudでのWEBログイン時に、2要素認証(Two Factor Authentication)を使ってみる

Nextcloud 11 での Webログイン時に、2要素認証によるログインを行うように設定してみます。

  1. Nextcloud での 2要素認証について
  2. Nextcloud 11.0.2 時点では、認証の種類は次の2つが対応しているようです。

    • Two Factor TOTP Provider (ソフトウェアトークン)
    • Two Factor U2F (ハードウェアのトークン)

    ハードウェアトークンというのは、下記のようなUSBデバイスを使って認証を行う方式のようです。
    ハードウェア方式は、また別途やり方を調べてみたいと思います。

    今回はソフトウェアトークンの設定方法についてまとめます。

    TOTP というのは、時間ベースで発行されるトークンです。

    発行されたトークンは、一定時間を過ぎると無効となり、また新しいトークンが生成される方式です。
    一定時間有効なので、一度きりの使用では無効にならず、時間内であれば何度でも使用が可能です。

    ※Nextcloud 11 では、30秒毎にトークンの表示が切り替わりますが、
     トークン自体は、約2分程度有効なようでした。

    では、設定していきます。

    2要素認証を導入される方は、Nextcloudをそれなりに使い込んでいるかと思いますので、細かい手順については割愛します。

  3. 必要なアプリを有効にする
  4. アプリの追加画面(アプリストア)=> 認証タブから、
    twofactor_totp アプリ: 1.1.0 を有効にします。

    また、twofactor_backupcodes: 1.0.0 が
    有効になっていることも確認します。(デフォルトで有効)

  5. 第2因子バックアップコードの生成(保険)
  6. まず、個人画面(settings/personal)=> 第2因子バックアップコードから、バックアップコードを生成しておきます。

    スマートフォンの破損や紛失などで、2要素認証が行えなくなった時にも、バックアップコードでログインすることが可能です。

    ただし印刷や手帳などに書き留めておくなどの保管が必要です。
    バックアップコードは一度に10個表示され、それぞれ1度の使用で無効化されていきます。

    バックアップコードが不要な場合は、この手順は必要ありません。

    またバックアップコードよる認証を無効にしたい場合は、
    twofactor_backupcodes アプリを無効にすればよいです。

  7. TOTP認証を有効にする
  8. 次に、個人画面(settings/personal)、TOTP second-factor auth にて、TOTP有効化にチェックします。

    TOTPが有効になると、設定用のQRコードが表示されます。

    設定用のQRコードは、一度しか表示されないので、QRコードが消えてしまった場合は、
    TOTPの無効化 => 有効化 を再度試します。

    TOTP2要素認証の設定

  9. TOTP対応アプリでQRコードを読み取る
  10. TOTP対応アプリで設定用QRコードを読み取ります。

    スマートフォンの場合は、Google Playストア(Android)や、App Store(iOS)などで、
    「TOTP認証」と入力すれば、対応アプリがたくさん出てきますので、お好きなものをどうぞ。

    自分は、IIJ SmartKey を使ってみました。

    TOTP対応アプリ

    TOTP対応アプリでQRコードを読み込み設定を保存すると、
    30秒ごとに数字6桁のトークンが表示されますので、
    この数字を Nextcloudのログイン時に入力します。

    IIJ SmartKeyによるトークン表示

    通常のユーザアカウント名とパスワードでの認証後、
    TOTPトークンによる追加認証の画面が表示されます。

    TOTP2要素認証画面

    トークンを間違えたり、トークンの有効期限が過ぎると、認証エラーとなります。

    TOTP2要素認証エラー

  11. バックアップコードによるログイン
  12. 何らかの理由により、2要素認証によるログインができなくなった場合、
    第2因子バックアップコードによるログインも可能です。
    コードは一度の使用で無効化されます。

    バックアップコードによるログイン

  13. 管理者操作による救済方法
  14. ユーザが2段階認証に必要なパスコードを取得できず、
    バックアップコードによるログインも不可能となった場合には、
    管理者による操作で、対象アカウントの2段階認証を無効にすることができます。

    occ コマンドの twofactorauth を実行します。

    sudo -u apache ./occ twofactorauth:disable testuser
    

    再度、対象ユーザの2段階認証の設定を行いたい場合は、
    occコマンドにて有効化する必要があります。

    sudo -u nginx ./occ twofactorauth:enable testuser