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 のベアボーン使いやすいです!