カテゴリー: PC Page 23 of 50

Nextcloudのインストール後の対応:cron設定

Nextcloudのインストール後の設定で概要でのセキュリティチェックがパスしましたが、

管理>基本設定で

最終ジョブ実行は %s です。何か問題が発生しています。

と出ていますので、これの設定を行います。

動作を確認した環境

  • Ubuntu 20.04
  • Apache 2.4系
  • PHP8.1
  • Nextcloud 27.0.2

さっくりとした手順

  1. Nextcloud上で設定を変えます。
  2. 一度Cronを走らせます。
  3. Cron設定を行います。
  4. 動作を確認します。

Nextcloud設定変更

  1. Nextcloud>管理>基本設定に進みます。
  2. バックグラウンドジョブをCronに設定します。

Cron作動

NextcloudがインストールされたサーバにSSHログインし、以下を実行します。

sudo -u www-data /usr/bin/php /var/www/html/nextcloud/cron.php

# 自分がnextcloudをインストールした環境に合わせます。
# 筆者環境
# sudo -u www-data /usr/bin/php /home/www-data/nextcloud/cron.php

Cron実行確認

  1. Nextcloud>管理>基本設定に進みます。
  2. 以下のように「最終ジョブ実行は○分前です」が表示されることを確認します。

Cronログ設定

Ubuntu 20.04の初期設定はcronログの出力が無効になっているので、修正します。

cd /etc/rsyslog.d

sudo cp -pi 50-default.conf /path/to/backup/50-default.conf.$(date +%Y%m%d)
# 任意のバックアップディレクトリを指定します。

diff -u 50-default.conf /path/to/backup/50-default.conf.$(date +%Y%m%d)
# 差分がないことでバックアップされていることを確認します。
  • ファイル修正

教義・信仰に合わせたエディタで以下を修正します。

  • 修正前
#cron.*                         /var/log/cron.log
  • 修正後
cron.*                         /var/log/cron.log
  • 設定反映
sudo systemctl restart rsyslog.service

Cron登録

  • crontab起動
sudo -u www-data crontab -e
  • 追記内容
*/5 * * * * /usr/bin/php -f /var/www/nextcloud/cron.php
# 自分の環境に合わせます。
# 筆者環境
# */5 * * * * /usr/bin/php -f /home/www-data/nextcloud/cron.php
  • Cron登録確認
tail -50 /var/log/cron.log
  • BEGIN EDIT (www-data)
  • REPLACE EDIT (www-data)
  • END EDIT (www-data)

と表示されていれば、Cron登録は確認されています。

  • メール設定
  • config.phpの設定
  • メモリキャッシュの設定
  • redis-serverの組み込み
  • cron設定

が終われば、一応、初期準備は済んだと思います。

Nextcloudのインストール後の対応:config.php修正とredis-server組み込み

本記事はNextcloudに関する記事を再構成して2023年8月現在の安定版27.0.2に合わせた設定となっています。

メール設定後、Nextcloudのセキュリティ&セットアップ警告をまとめて対応します。

  • データベースは取引ファイルを見ることに使われています。パフォーマンスをあげるには、可能であればメモリーのキャッシュを設定してください。
  • ご使用のシステムには、デフォルトの電話地域が設定されていません。
    メモリーキャッシュが構成されていません。

動作を確認した環境

  • Ubuntu 20.04
  • Apache 2.4系
  • PHP8.1
  • Nextcloud 27.0.2

さっくりとした手順

  1. 追加パッケージ(redis-server)をインストールします。
  2. config.phpを追記・修正します。
  3. Apacheを再起動します。

追加パッケージのインストール

※Nextcloud 27系からキャッシュサーバの組み込みは推奨となりました。

  • redisインストール
sudo aptitude install redis-server php8.1-redis
# 必要に応じてaptを用いてください。
# 自分のPHPバージョンを付与することを忘れないようにしてください。(でないと、最新のPHPもインストールされます)
  • redisインストール確認
systemctl status redis-server.service
# active (running)を確認します
  • hosts確認
cat /etc/hosts

を実行し、

127.0.1.1       localhost

と表示されていれば、

127.0.0.1       localhost

に修正します。Ubuntu20.04系はなぜかlocalhostを127.0.1.1と設定されるケースがありました。

コンフィグ追記

  • ディレクトリ移動
cd /var/www/html/nextcloud/config && pwd
# 移動先は自身の環境に合わせます。
# そのディレクトリにいることを確認します。
  • バックアップ
sudo cp -pi config.php /path/to/backup/config.php.$(date +%Y%m%d)
# バックアップ先は任意のディレクトリを指定してください。
  • バックアップ取得確認
sudo diff -u config.php /path/to/backup/config.php.$(date +%Y%m%d)
# エラーなく実行され、差分が表示されなければバックアップはできています。
  • ファイル追記

教義、信仰に合わせたエディタで以下を追記して保存します。

注意点:最下行の);直上に追記します。

  'default_phone_region' => 'JP',
  'memcache.local' => '\OC\Memcache\APCu',
  'filelocking.enabled' => true,
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'redis' => 
   array (
     'host' => 'localhost',
     'port' => 6379,
     'timeout' => 3,
   ),
  • ファイル差分確認
sudo diff -u /path/to/backup/config.php.$(date +%Y%m%d) config.php 
# 先程保存したバックアップを指定します。
  • 差分内容
+  'default_phone_region' => 'JP',
+  'memcache.local' => '\OC\Memcache\APCu',
+  'filelocking.enabled' => true,
+  'memcache.locking' => '\\OC\\Memcache\\Redis',
+  'redis' => 
+   array (
+     'host' => 'localhost',
+     'port' => 6379,
+     'timeout' => 3,
+   ),
 );

Webサービス再起動

  • サービス再起動
sudo systemctl restart apache2.service
  • 再起動確認
systemctl status apache2.service
# active (running)を確認します。

設定反映確認

  1. Nextcloudに管理者権限でログインします。
  2. 管理>概要で以下の画面が表示されれば、設定は反映されています。

Nextcloudのインストール後の対応:メールサーバ(Gmail連携)

Nextcloudインストール後に出てくるこの警告画面を潰していきます。

メールサーバーの設定が未設定または未確認です。基本設定で設定を行ってください。その後、フォームの下にある「メールを送信」ボタンで設定を確認してください。

基本的に、Redmineと同じ方法でNextcloudはメールサーバの設定が可能になります。

前提

  • Gmailのアプリパスワードを取得していること
  • Nextcloudの個人設定でメールアドレスを登録していること

https://atelier.reisalin.com/projects/zettel/knowledgebase/articles/22

のみです。

管理>基本設定に進みます。

設定の前に

メールサーバーの設定を行います。

  • 送信モード
    • SMTP
  • 暗号化
    • NONE/STRTLS
  • 送信元アドレス
    • Gmailアドレス
  • サーバーアドレス
    • smtp.gmail.com
  • ポート
    • 587

認証情報を入力します。

上記の設定後、「認証を必要とする」にチェックを入れます。

資格情報を入力する欄が出てきます。

  • Username
    • Gmailアドレス
  • パスワード
    • 発行したアプリパスワード

を入力後、保存をクリックします。

送信チェックをします。

「メールを送信」をクリックして、Nextcloudからのメールが送信されれば成功です。

続・Ubuntu 20.04にNextclodを新規インストール。

この記事を作り直したという形です。新たにインストールしたUbuntu20.04系サーバに、一からNextcloudを入れる必要がありました。

上記の記事で不完全なところがありましたので、改めて作成いたします。

前提

以下が稼働済みです。

  • Ubuntu 20.04
  • MySQL 8.0.33
  • Apache 2.4

また、設定するドメインに即したサーバ証明書があることを前提に本記事を作成しています。

さっくりとした手順

※SSHログインし、ターミナルでの操作を行います。

  1. PHPのレポジトリを追加して、Ubuntu20.04でもPHP8.xが使えるようにします。
  2. PHPの設定を行います。
  3. Nextcloud用のDBを作成します。
  4. Nextcloudのプログラムを適切な位置に配置します。
  5. Nextcloudを動かすためのApache設定ファイルを設定します。
  6. Webブラウザで設定を行います。

PHPレポジトリを追加して必要パッケージをインストールします。

  • レポジトリ追加
sudo add-apt-repository ppa:ondrej/php
# Ubuntu20.04系ではこれを行わないとPHP7.4系しかインストールされません。
sudo aptitude update
# 追加後、パッケージのアップデート
  • PHPインストール
sudo aptitude install php8.1

sudo aptitude install php8.1-{opcache,pdo,bcmath,calendar,ctype,fileinfo,ftp,gd,intl,json,ldap,mbstring,mysql,posix,readline,sockets,bz2,tokenizer,zip,curl,iconv,phar,xml,dev}

sudo aptitude install php8.1-{imagick,gmp}

sudo systemctl restart apache2.service
# PHPモジュールをWebサーバと連携させるため反映させます
  • PHPインストール確認
php -v
PHP 8.1.21 (cli) (built: Jul  8 2023 07:09:57) (NTS)

PHPの設定を行います。

  • memcacheとAPCuの有効化
cd /etc/php/8.1/cli/conf.d
cat <<- __EOF__ | sudo tee -a /etc/php/8.1/cli/conf.d/10-opcache.ini
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1
__EOF__
cat <<- __EOF__ | sudo tee -a /etc/php/8.1/cli/conf.d/20-apcu.ini
[apcu]
apc.enabled=1
apc.shm_size=32M
apc.ttl=7200
apc.enable_cli=1
apc.serializer=php
__EOF__

  • php.ini修正
sudo cp -pi /etc/php/8.1/apache2/php.ini /path/to/backup/php.ini.$(date +%Y%m%d)
# /path/to/backupは任意のバックアップを設定してください。

diff -u /etc/php/8.1/apache2/php.ini /path/to/backup/php.ini.$(date +%Y%m%d)2
# 差分が存在しないことにより、バックアップが取れていることを確認します。

sudo sed -i 's/memory_limit = 128M/memory_limit = 512M/g' /etc/php/8.1/apache2/php.ini
# memory_limitを推奨値の512Mに置き換えます。
  • 差分確認
diff -u  /path/to/backup/php.ini.$(date +%Y%m%d) /etc/php/8.1/apache2/php.ini
# 取得したバックアップと置き換えたファイルの差分を確認します
  • 差分
-memory_limit = 128M
+memory_limit = 512M
  • apache 再起動
sudo systemctl restart apache2.service

NextcloudのDBを作成します。

  • MySQLにroot権限でログイン
mysql -u root -p
  • MySQLユーザ追加
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'password';
# パスワードはポリシーに合わせて適切なものを指定してください。

CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';
FLUSH PRIVILEGES;

EXIT;
  • 追加したNextcloud用ユーザでログイン
mysql -u nextcloud -p
# 設定したパスワードでログインできることを確認します
  • DB作成確認
SHOW DATABASES;
# 作成したデータベースnextcloudがあることを確認します

EXIT;

Nextcoludのプログラムを配置します。

cd /hoge && pwd
# 任意の作業用ディレクトリを指定します。

wget https://download.nextcloud.com/server/releases/latest.zip

unzip latest

sudo mv nextcloud /home/www-data/
# ファイルサーバとして運用するので、/home領域に設置します。

sudo chown -R www-data:www-data /home/www-data/nextcloud

Apacheの設定ファイルを作成します。

  • ログディレクトリの作成
sudo mkdir /var/log/nextcloud
sudo chown www-data:www-data /var/log/nextcloud
  • nextcloud用の設定ファイル作成
cat <<- __EOF__ | sudo tee -a /etc/apache2/sites-available/nextcloud.conf
<VirtualHost *:80>
    servername 【hoge.example.com】
    # ドメイン名を指定します
    RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# HTTPアクセスを強制的にHTTPSにリダイレクトします
</VirtualHost>

<VirtualHost *:443>
    ServerName 【hoge.example.com】
    # ドメイン名を指定します
    CustomLog /var/log/nextcloud/nextcloud_access.log combined
    ErrorLog /var/log/nextcloud/nextcloud_error.log
    DocumentRoot 【/home/www-data/nextcloud】
    # 自身の環境に合わせます
    <Directory 【/home/www-data/nextcloud】>
    # 自身の環境に合わせます
        Options -MultiViews
        AllowOverride All
        Require all granted
    </Directory>

#SSL設定
  SSLEngine on
    Protocols h2 http/1.1
  # SSLを有効化します

SSLCertificateFile 【/etc/certs/hoge.example.com.crt】
# SSL証明書を指定します
SSLCertificateKeyFile 【/etc/private/hoge.example.com.key】
# 秘密鍵を指定します

# SSLCACertificateFile 【/etc/certs/hoge.example.com.CA.crt】
# 中間証明書が発行元から別ファイルで提供されている場合は、この直上をコメントアウトして中間証明書を指定します

#セキュリティヘッダー付与

    Header always set Strict-Transport-Security "max-age=63072000"
    Header set X-Content-Type-Options "nosniff"
    Header always append X-Frame-Options "SAMEORIGIN"
    Header set X-XSS-Protection "1; mode=block"

</VirtualHost>

SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:EC6-GCM-SHA384
SSLHonorCipherOrder     off
SSLSessionTickets       off

SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
# これらのセクションはSSL暗号化強度を高めるための記述です
# </VirtualHost>の外側に書くことにご注意ください
__EOF__
  • Apache設定ファイル反映
sudo a2ensite nextcloud.conf

sudo apache2ctl configtest
# Syntax OKを確認します

sudo systemctl restart apache2.service

ブラウザ上でNextcloudのセットアップを行います。

  • ブラウザでアクセス

ブラウザで、

http://設定したドメイン

にアクセスし、以下を確認してください。

  • 以下のセットアップ画面が出ること。
  • httpがhttpsとなっていること。

以下を入力して「インストール」をクリックします。

  • ユーザ名:
    • 管理者のユーザ名
  • パスワード:
    • 管理者パスワード
  • データベースのユーザー名
    • 作成したユーザー名(nextcloud)
  • データベースのパスワード
    • 設定したデータベースのパスワード
  • データベース名
    • 作成したデータベース(nextcloud)
  • データベースのホスト名
    • localhost:3306
      • (MySQLのポート番号)

推奨アプリのインストールに関しては、好みでスキップかインストールを行ってください。

インストールが完了したら、以下のような画面が出ます。

その後の細かい設定に関しては改めて。

Nextcloud、redisサーバー組み込み後の処理。(Ubuntu20.04)

こちらの続き。Ubuntu 20.04で立ち上げたNextcloudサーバの状況を調べると、以下を確認しました。

redis-server.service: Can't open PID file /run/redis/redis-server.pid (yet?) after start

この問題の対処を行います。

参考:

https://github.com/redis/redis/issues/7361

  • ログ確認
cat /var/log/redis/redis-server.log
  • ログ抜粋

WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

  • バックアップ
sudo cp -pi /lib/systemd/system/redis-server.service /path/to/backup/redis-server.service.$(date +%Y%m%d)
# /path/to/backup は任意のバックアップディレクトリを指定します。
diff -u /lib/systemd/system/redis-server.service /path/to/backup/redis-server.service.$(date +%Y%m%d)
# 差分が無いことでバックアップを確認します。
  • 書き換え

以下のファイルを差分の通りに、教義・進行に沿ったエディタで編集します。

/lib/systemd/system/redis-server.service 

※ここでは、PIDFileを参照させない(コメントアウトする)一番簡単な方法を採りました。

 [Service]
 Type=forking
 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf
-PIDFile=/run/redis/redis-server.pid
+#PIDFile=/run/redis/redis-server.pid
sudo systemctl daemon-reload
sudo systemctl enable redis-server
sudo systemctl restart redis.service
  • 対処後確認
systemctl status redis-server.service

で、上記の

redis-server.service: Can't open PID file /run/redis/redis-server.pid (yet?) after start

が出ないことを確認です。

Nextcloudサーバにredisサーバを組み込み。

Nextcloudを27.0.1にアップデート後――管理画面で

・データベースは取引ファイルを見ることに使われています。パフォーマンスをあげるには、可能であればメモリーのキャッシュを設定してください。

が表示されたので、それに対して対応します。

前提環境

  • Ubuntu 20.04
  • Nextcloud27.0.1
  • Apache 2.4
  • PHP 8.1

さっくりとした手順

SSHでログインし、ターミナルでの操作を行います。

  1. redis関係をインストールします。
  2. Nextcloudのコンフィグを追記します。
  3. Webサービスを再起動します。

手順

追加パッケージのインストール

  • redisインストール
sudo aptitude install redis-server php8.1-redis
# 必要に応じてaptを用いてください。
# 自分のPHPバージョンを付与することを忘れないようにしてください。(でないと、最新のPHPもインストールされます)
  • redisインストール確認
systemctl status redis-server.service
# active (running)を確認します
  • hosts確認
cat /etc/hosts

を実行し、

127.0.1.1       localhost

と表示されていれば、

127.0.0.1       localhost

に修正します。Ubuntu20.04系はなぜかlocalhostを127.0.1.1と設定されるケースがありました。

コンフィグ追記

  • ディレクトリ移動
cd /var/www/html/nextcloud/config && pwd
# 移動先は自身の環境に合わせます。
# そのディレクトリにいることを確認します。
  • バックアップ
sudo cp -pi config.php /path/to/backup/config.php.$(date +%Y%m%d)
# バックアップ先は任意のディレクトリを指定してください。
  • バックアップ取得確認
sudo diff -u config.php /path/to/backup/config.php.$(date +%Y%m%d)
# エラーなく実行され、差分が表示されなければバックアップはできています。
  • ファイル追記

教義、信仰に合わせたエディタで以下を追記して保存します。

注意点:最下行の);直上に追記します。

  'filelocking.enabled' => true,
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'redis' => 
   array (
     'host' => 'localhost',
     'port' => 6379,
     'timeout' => 3,
   ),
  • ファイル差分確認
sudo diff -u /path/to/backup/config.php.$(date +%Y%m%d) config.php 
# 先程保存したバックアップを指定します。
  • 差分内容
+  'filelocking.enabled' => true,
+  'memcache.locking' => '\\OC\\Memcache\\Redis',
+  'redis' => 
+  array (
+    'host' => 'localhost',
+    'port' => 6379,
+    'timeout' => 3,
+  ),
 );

Webサービス再起動

  • サービス再起動
sudo systemctl restart apache2.service
  • 再起動確認
systemctl status apache2.service
# active (running)を確認します。

設定反映確認

  1. Nextcloudに管理者権限でログインします。
  2. 管理>概要で以下の画面が表示されれば、設定は反映されています。

Nextcloudサーバでcronが止まったときの対処。(自動アップデートされたPHPの復旧)

環境

Ubuntu20.04/Apache 2.4でNextcloudを27にアップデート後、以下のメッセージがありました。

・最後のバックグラウンドジョブの実行は17時間前を実行しました。何かがおかしいようです。バックグラウンドジョブの設定を確認してください。

この問題を解決していきます。

状況確認

  • cronジョブを確認
sudo -u www-data php /var/www/html/nextcloud/cron.php 
# Nextcloudがインストールされているディレクトリ配下にあります
  • 実行結果
Doctrine\DBAL\Exception: Failed to connect to the database: An exception occurred in the driver: could not find driver in /var/www/html/nextcloud/lib/private/DB/Connection.php:140
Stack trace:
#0 /var/www/html/nextcloud/3rdparty/doctrine/dbal/src/Connection.php(1531): OC\DB\Connection->connect()
#1 /var/www/html/nextcloud/3rdparty/doctrine/dbal/src/Connection.php(1029): Doctrine\DBAL\Connection->getWrappedConnection()
#2 /var/www/html/nextcloud/lib/private/DB/Connection.php(262): Doctrine\DBAL\Connection->executeQuery()
#3 /var/www/html/nextcloud/3rdparty/doctrine/dbal/src/Query/QueryBuilder.php(345): OC\DB\Connection->executeQuery()
#4 /var/www/html/nextcloud/lib/private/DB/QueryBuilder/QueryBuilder.php(280): Doctrine\DBAL\Query\QueryBuilder->execute()
(後略)

この症状をWebで見てみたら、同じような症状を発見。

もしやと思ってphpinfoで調べたら、やっぱりlaravelをインストした時はphp8で、
アプデの時に8.1がインストされたようです。

php -v
PHP 8.2.8 (cli) (built: Jul  8 2023 07:09:59) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.8, Copyright (c) Zend Technologies

サーバの設定変更時にPHPのバージョンアップが走り、新たなPHPにPHPドライバーが走っていなかったようです。

まずはこの問題をただすため、上記URLを参考に以前使っていたバージョンに戻します。

PHPバージョンダウン

sudo update-alternatives --config php
alternative php (/usr/bin/php を提供) には 2 個の選択肢があります。

  選択肢    パス           優先度  状態
------------------------------------------------------------
* 0            /usr/bin/php8.2   82        自動モード
  1            /usr/bin/php8.1   81        手動モード
  2            /usr/bin/php8.2   82        手動モード


現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください: 1
update-alternatives: /usr/bin/php (php) を提供するためにマニュアルモードで /usr/bin/php8.1 を使います

sudo update-alternatives --config phpを実行して、選択肢「1」を実行。

  • Webサービス再起動
sudo systemctl restart apache2.service
  • バージョンダウン確認
php -v
PHP 8.1.21 (cli) (built: Jul  8 2023 07:09:57) (NTS)

これで元に戻っていることを確認。

  • cron再実行
sudo -u www-data php /var/www/html/nextcloud/cron.php 
# Nextcloudがインストールされているディレクトリ配下にあります

エラーなくcron.phpが実行されることを確認しました。

復旧確認

Nextcloudに管理者権限でログインし、管理>概要へと進みます。

エラーはなくなりました。もう一つの警告画面はまた改めて対処します。

同一サーバ内でRedmineのドメインを変更するときの設定。(apacheバーチャルファイル編集)

ちょっとした事情で、既に稼働しているRedmineのドメインを変更しました。以下、作業メモです。

環境

  • Ubuntu 20.04
  • Apache 2.4系
  • Redmine 4.2系

前提

  • apacheのバーチャルサイトでRedmineを設定していること。
  • 新しく割り当てるドメインが、稼働サーバと同じであること。
  • 新しいドメインの適切な証明書を取得し、所定の箇所に格納していること。

ここでは、aaa.hoge.comをbbb.hoge.comに変える手順を行います。

さっくりとした手順

  1. バーチャルサイトの設定ファイルをコピーします。(aaa→bbb)
  2. 新たなドメインの設定ファイルを編集します。
  3. 以前の設定ファイルを無効化します。
  4. 新たな設定ファイルを有効化します。
  5. apacheの再起動を行います。
  6. Redmineの設定変更を行います。

手順

設定ファイルコピー

cd /etc/apache2/sites-available && pwd
# 自分の環境に合わせます。

sudo cp -pi aaa.hoge.com.conf bbb.hoge.com.conf
# 設定ファイルは自身の環境に合わせます。

ファイル編集

以下の差分の通り修正します。信仰・教義に沿ったエディタで編集してください。

 <VirtualHost _default_:80>
-servername aaa.hoge.com
+servername bbb.hoge.com

 <VirtualHost _default_:443>
-    servername aaa.hoge.com
+    servername bbb.hoge.com

-SSLCertificateFile /etc/certs/aaa.hoge.com.crt
-SSLCertificateKeyFile /etc/private/aaa.hoge.com.key
+SSLCertificateFile /etc/certs/bbb.hoge.com.crt
+SSLCertificateKeyFile /etc/private/bbb.hoge.com.key
# 証明書と秘密鍵の適切な格納場所を指定します。
# ホスト名のみ変更し、ワイルドカード証明書を利用するのであれば証明書の部分は修正する必要はありません。

変更前設定ファイルの無効化

sudo a2dissite aaa.hoge.com.conf
# サービス再起動を求められますが、最後にまとめて行います。

変更後設定ファイルの有効化

sudo a2ensite bbb.hoge.com.conf

サービス再起動

  • 設定ファイル構文チェック
sudo apache2ctl configtest
# Syntax OKを確認します。
  • サービス再起動
sudo systemctl restart apache2.service

変更後の設定変更

  1. ブラウザで、変更後のドメインにアクセスします。
  2. 管理者権限でログインします。
    • ドメイン以外の設定は変えていないので、ログインは行えます。
    • ビルトインの2段階認証を利用している場合変更前のワンタイムパスワードを利用してください。
  3. 設定→管理に移動します。
  4. 概要タブのホスト名とパスを変更後のものに合わせます。

Ubuntu20.04のOpenSSLを1.1.1から3.1.1にアップデート。

概要

2023/09/11にサポート終了を迎えるOpenSSL1.1.1。

2023年6月現在の最新安定版である3.1.1にアップデートを行います。

https://www.openssl.org/blog/blog/2023/06/15/1.1.1-EOL-Reminder/

環境

  • OS:Ubuntu 20.04
openssl version -a
OpenSSL 1.1.1f  31 Mar 2020
built on: Wed May 24 17:14:51 2023 UTC
platform: debian-amd64
options:  bn(64,64) rc4(16x,int) des(int) blowfish(ptr) 
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -Wa,--noexecstack -g -O2 -fdebug-prefix-map=/build/openssl-mSG92N/openssl-1.1.1f=. -fstack-protector-strong -Wformat -Werror=format-security -DOPENSSL_TLS_SECURITY_LEVEL=2 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG -Wdate-time -D_FORTIFY_SOURCE=2
OPENSSLDIR: "/usr/lib/ssl"
ENGINESDIR: "/usr/lib/x86_64-linux-gnu/engines-1.1"
Seeding source: os-specific

参考とした手順

https://nextgentips.com/2022/03/23/how-to-install-openssl-3-on-ubuntu-20-04/

さっくりとした手順

  1. システム全体のバックアップ
  2. 必要なライブラリをインストールします。
  3. githubレポジトリから最新安定版のソースコードをダウンロードします。
  4. ソースからインストールしていきます。
  5. 設定を行います。(コンフィグを反映させ、パスを通します)
  6. バージョンアップを確認します。

実施した手順

全体のバックアップを取得します。

  • Webアクセスの根幹となるプログラムであること
  • 重要なデータが格納されている

ことから、AWS Lightsailのスナップショットを利用して全体のバックアップを取りました。

必要なライブラリのインストール

sudo aptitude install build-essential checkinstall zlib1g-dev
# 筆者はaptitudeを用いています。必要に応じてaptを使ってください。

ソースコードの取得

sudo su -
# 以下、管理者権限で実施します

cd /hoge
# 任意のディレクトリを指定します

git clone https://github.com/openssl/openssl -b openssl-3.1.1
# 2023/06/20時点での最新安定版を指定します

cd openssl

ソースからインストール

./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib

make
# makeは時間がかかります。状況を時折確認しながら待ちましょう。

make test

make install

インストール後の設定

  • 設定ファイル追記
cat <<- __EOF__ | tee -a /etc/ld.so.conf.d/openssl-3.1.1.conf
/usr/local/ssl/lib64
__EOF__
  • 設定反映
ldconfig -v
  • 既存プログラムの退避
mv /usr/bin/c_rehash /path/to/backup/c_rehash.$(date +%Y%m%d)

mv /usr/bin/openssl /path/to/backup/openssl.$(date +%Y%m%d)
# 任意の退避ディレクトリを指定します
  • パスを通す
cat <<- __EOF__ | tee -a /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/ssl/bin"
__EOF__
  • 通したパスを反映
source /etc/environment

echo $PATH
# PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/ssl/bin"
# と表示されることを確認します

バージョンアップ後の確認

openssl version -a
OpenSSL 3.1.1 30 May 2023 (Library: OpenSSL 3.1.1 30 May 2023)
built on: Tue Jun 20 01:47:24 2023 UTC
platform: linux-x86_64
options:  bn(64,64)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_BUILDING_OPENSSL -DZLIB -DNDEBUG
OPENSSLDIR: "/usr/local/ssl"
ENGINESDIR: "/usr/local/ssl/lib64/engines-3"
MODULESDIR: "/usr/local/ssl/lib64/ossl-modules"
Seeding source: os-specific
CPUINFO: OPENSSL_ia32cap=0x7ffaf3ffffebffff:0x27ab

これで、Ubuntu20.04でもOpenSSL3.1.1を利用することが可能になりました。

必要に応じて

  • システムの再起動を行います。
  • 既存サービスが正常に動くことを確認します。

作業日

2023/06/22

nginxでリバースプロキシ化しているgrowiサイトにセキュリティヘッダーを付与。

はじめに

現在、growiのリバースプロキシとしてnginxを利用しています。

そこで、先だってご紹介したapache利用のサイトと同じようにセキュリティヘッダーを付与しました。

環境

  • Ubuntu 20.04
  • Growi v6.1.4
  • nginx 1.24.0

前提

  • サーバへの適切な証明書は準備済みです。
  • 既にGrowiが稼働しているものとします。(hoge.example.com)

コンフィグファイル

以下、教義・信仰に沿ったエディタで編集します。自分の環境に合わせてください。

  • ファイル名:/etc/nginx/sites-available/growi
upstream hoge {
       server 192.168.1.101:3000;
       #growiが稼働しているアドレス
}

server {
## http設定(常時SSL化を行います)
        listen 80 http2;
        server_name hoge.example.com;
        server_tokens off;
        return  301 https://$host$request_uri;
        access_log /var/log/nginx/hoge.example.com/access.log;
        error_log /var/log/nginx/hoge.example.com/error.log warn;
}

server {
## https設定
        listen 443 ssl http2;
        server_name hoge.example.com;
        server_tokens off;
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_session_tickets off;
        ssl_dhparam /etc/nginx/dhparam;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
        ssl_prefer_server_ciphers off;

        #SecurityHeader
        add_header Strict-Transport-Security 'max-age=63072000';
        add_header X-Content-Type-Options "nosniff";
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-XSS-Protection "1; mode=block";

        ssl_certificate /etc/certs/hoge.example.com.crt;
        ssl_certificate_key /etc/private/hoge.example.com.key;

        ssl_stapling on;
        ssl_stapling_verify on;

        access_log /var/log/nginx/hoge.example.com/ssl_access.log;
        error_log /var/log/nginx/hoge.example.com/ssl_error.log warn;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_max_temp_file_size 10240m;
        client_max_body_size 10240m;
        proxy_redirect off;

       set $proxy_target  'hoge';

       location / {
          proxy_pass http://$proxy_target;
       }

       location /socket.io/ {
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "Upgrade";
          proxy_cache_bypass $http_upgrade;

        #SecurityHeader
        add_header Strict-Transport-Security 'max-age=63072000';
        add_header X-Content-Type-Options "nosniff";
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-XSS-Protection "1; mode=block";

          proxy_pass http://$proxy_target/socket.io/;
       }
}
  • 差分内容
+        #SecurityHeader
         add_header Strict-Transport-Security 'max-age=63072000';
+        add_header X-Content-Type-Options "nosniff";
+        add_header X-Frame-Options "SAMEORIGIN";
+        add_header X-XSS-Protection "1; mode=block";

           proxy_cache_bypass $http_upgrade;
+
+        #SecurityHeader
+        add_header Strict-Transport-Security 'max-age=63072000';
+        add_header X-Content-Type-Options "nosniff";
+        add_header X-Frame-Options "SAMEORIGIN";
+        add_header X-XSS-Protection "1; mode=block";
+
           proxy_pass http://$proxy_target/socket.io/;

コンフィグファイル反映

sudo nginx -t
# nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
# nginx: configuration file /etc/nginx/nginx.conf test is successful
# と出れば正常です

sudo systemctl restart nginx

セキュリティヘッダー付与確認

curlを用いて、開発者ツールよりも手っ取り早くヘッダ付与を確認します。

curl -I 上記、設定を行ったURL
strict-transport-security: max-age=63072000
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block

のように表示されればOKです。

Page 23 of 50

Powered by WordPress & Theme by Anders Norén