はじめに¶
cdsl-vm-2では外部からのアクセスをNginxで受け取るたびにアクセスログが生成される.アクセスログを卒業課題や創成課題で利用できるようにNASへ保存する.
概要¶
コピー元のcdsl-vm-2¶
- rsyncを使いNASからcdsl-vm-2へインターネット経由で接続し,ログを取得する.
- ログの取得ではrsyncの増分バックアップを利用する.
- ログバックアップのための専用ユーザ log-backup をcdsl-vm-2に追加する. -不正アクセスされた場合の影響を抑えるため, log-backupのシェルをrbashにする.
- rbashではrsyncコマンドのみを許可する.
- バックアップ対象のファイルは,
/var/www/nginx/に配置されたアクセスログのうちaccess.*.log.1に一致するファイルである.- これはログローテーションにより作成されたファイルである.
- このファイルをバックアップ対象とすることで,ログローテーションのタイミングとバックアップのタイミングがずれても確実に重複のないバックアップが実現できる.
- バックアップファイルの例は,access.log.1 や access.rudder.log.1である.
コピー先のNAS(natadecoco)¶
- コマンドのスケジュール実行はタスクスケジューラ を使う.
- コピー元(cdsl-vm-2)からコピー先(natadecoco)へファイルをrsyncでコピーする.
- バックアップ作業(コピー元→コピー先)はDaily(1日あたり1回)とする.
- バックアップ作業は00:00(JST)に開始する.
- バックアップ方式は,増分バックアップとする.
- バックアップの配置先のディレクトリ名は,
log-backup-YYYYmmDDHHMMSSである.- 例)2022年1月30日02:01:02の場合は,
log-backup-20220130020102になる.
- 例)2022年1月30日02:01:02の場合は,
- バックアップデータの保存先のパスは
/volume1/cdsl-vm-2-nginx-log-backupとする.- 例)2022年1月30日02:01:02の場合
手順¶
cdsl-vm-2での作業¶
(1) バックアップ用のユーザ log-backup を追加する.
koyama@cdsl-vm-2:~$ sudo useradd -m -s /bin/rbash log-backup
koyama@cdsl-vm-2:~$ cd /home/log-backup/
koyama@cdsl-vm-2:/home/log-backup$ ls
(2) log-backupユーザのbashrcを変更する.
koyama@cdsl-vm-2:~$ sudo -i
root@cdsl-vm-2:~# cd /home/log-backup/
root@cdsl-vm-2:/home/log-backup# ls
root@cdsl-vm-2:/home/log-backup# ls -al
total 20
drwxr-xr-x 2 log-backup log-backup 4096 Apr 2 21:30 .
drwxr-xr-x 8 root root 4096 Apr 2 21:30 ..
-rw-r--r-- 1 log-backup log-backup 220 Feb 25 2020 .bash_logout
-rw-r--r-- 1 log-backup log-backup 3771 Feb 25 2020 .bashrc
-rw-r--r-- 1 log-backup log-backup 807 Feb 25 2020 .profile
root@cdsl-vm-2:/home/log-backup# mv .bashrc .old.bashrc
root@cdsl-vm-2:/home/log-backup# echo 'export PATH=$HOME/.bin' > .bashrc
(3) rbash環境でrsyncコマンドを使えるようにする.
root@cdsl-vm-2:/home/log-backup# mkdir .bin
root@cdsl-vm-2:/home/log-backup# cd .bin/
root@cdsl-vm-2:/home/log-backup/.bin# ln -s $(which rsync) .
root@cdsl-vm-2:/home/log-backup/.bin# ll
total 8
drwxr-xr-x 2 root root 4096 Apr 2 21:31 ./
drwxr-xr-x 3 log-backup log-backup 4096 Apr 2 21:31 ../
lrwxrwxrwx 1 root root 14 Apr 2 21:31 rsync -> /usr/bin/rsync*
(4) SSH用の公開鍵と秘密鍵のペアを作る.
root@cdsl-vm-2:/home/log-backup/.ssh# ssh-keygen -t ed25519 -f $PWD/id_ed25519
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/log-backup/.ssh/id_ed25519
Your public key has been saved in /home/log-backup/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:xmdROuPrFs6PwyZ4rp8Ox5sKFgr7yhcCep6YNu07Xfs root@cdsl-vm-2
The key's randomart image is:
+--[ED25519 256]--+
| . |
| o |
| = |
|. . . + |
|+ . S + |
|.+.o . + o.. |
|.=+.= o.++.. |
|++o= o.+o=B. |
|oo=oo oBOEoo. |
+----[SHA256]-----+
root@cdsl-vm-2:/home/log-backup/.ssh# ls
id_ed25519 id_ed25519.pub
(5) 公開鍵をSSHの認証に使うために認証用鍵の一覧へコピーする.
root@cdsl-vm-2:/home/log-backup/.ssh# cp id_ed25519.pub authorized_keys
(6) 公開鍵と秘密鍵の権限,所有者を変更する.
root@cdsl-vm-2:/home/log-backup/.ssh# ls -la
total 20
drwxr-xr-x 2 root root 4096 Apr 2 21:39 .
drwxr-xr-x 4 log-backup log-backup 4096 Apr 2 21:38 ..
-rw-r--r-- 1 root root 96 Apr 2 21:39 authorized_keys
-rw------- 1 root root 411 Apr 2 21:39 id_ed25519
-rw-r--r-- 1 root root 96 Apr 2 21:39 id_ed25519.pub
root@cdsl-vm-2:/home/log-backup/.ssh# chown log-backup: *
root@cdsl-vm-2:/home/log-backup/.ssh# ll
total 20
drwxr-xr-x 2 root root 4096 Apr 2 21:39 ./
drwxr-xr-x 4 log-backup log-backup 4096 Apr 2 21:38 ../
-rw-r--r-- 1 log-backup log-backup 96 Apr 2 21:39 authorized_keys
-rw------- 1 log-backup log-backup 411 Apr 2 21:39 id_ed25519
-rw-r--r-- 1 log-backup log-backup 96 Apr 2 21:39 id_ed25519.pub
自分のPCで作業¶
作成した秘密鍵でSSHできるかを確かめる.ここでは id_ed25519 が秘密鍵ファイルである.なお,秘密鍵の権限は600にしておく.
$ ssh -i ./id_ed25519 log-backup@34.84.68.226
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
log-backup@cdsl-vm-2:~$
log-backup@cdsl-vm-2:~$ ls
-rbash: /usr/lib/command-not-found: restricted: cannot specify `/' in command names
log-backup@cdsl-vm-2:~$
(1) バックアップスクリプトを作成する.
以下のスクリプトを nginx-log-backup.sh として保存する.なお,id_ed25519とnginx-log-backup.shは同一のディレクトリに配置される.
#!/bin/bash -eux
cd $(dirname $0)
MYDATE=$(date +%Y%m%d%H%M%S)
LATEST_BACKUP_DIR=$(ls -dr log-backup-* | head -n 1)
rsync -azvvP -e 'ssh -i ./id_ed25519' \
--compare-dest="../$LATEST_BACKUP_DIR" \
'log-backup@34.84.68.226:/var/log/nginx/access.*.log.1' $PWD/log-backup-$MYDATE ;
(2) スクリプトの実行権限を付与する.
chmod +x nginx-log-backup.sh
(3) 初回バックアップを作成する.次回のバックアップはこのバックアップと最新のファイルを比較する.
rsync -azvvP -e 'ssh -i ./id_ed25519' \
'log-backup@34.84.68.226:/var/log/nginx/access.*.log.1' $PWD/log-backup-$(date +%Y%m%d%H%M%S) ;
以下のようなディレクトリが作成できていればよい.
$ ls log-backup-20230402141041/
access.doktor.log.1 access.rudder.log.1 access.wp.log.1
NASでの作業¶
(1) タスクスケジューラーの設定を追加する.
- 全般
- タスク名:cdsl-vm-2 nginx log backup
- ユーザ: cdsl
- 有効:チェックを付ける
- スケジュール
- 実行日数: 毎日
- 初回実行時刻: 00:00
- スケジュールサイクル:毎日
- 最終実行時刻:00:00
- タスク設定
- ユーザ指定のスクリプト
/volume1/cdsl-vm-2-nginx-log-backup/nginx-log-backup.sh
- ユーザ指定のスクリプト
以下はタスクスケジューラーに登録したあとの様子である.

(2) 共有フォルダを作成する.
- 共有ドライブ名:cdsl-vm-2-nginx-log-backup
- 説明:cdsl-vm-2のnginxのログをバックアップ

(3) File Stationからcdsl-vm-2-nginx-log-backupにアクセスし,バックアップスクリプトとSSH用の秘密鍵をアップロードする.アップロードするファイルの一覧は以下である.
- id_ed25519
- nginx-log-backup.sh
アップロードしたあとの様子が以下である.

(4) NASにSSHで接続する.バックアップ用ディレクトリへ移動する.
cdsl@natadecoco:~$ cd /volume1/cdsl-vm-2-nginx-log-backup/
cdsl@natadecoco:~$ ls
@eaDir id_ed25519 nginx-log-backup.sh '#recycle'
(5) SSH用の秘密鍵の権限を600にする.
cdsl@natadecoco:/volume1/cdsl-vm-2-nginx-log-backup$ chmod 600 id_ed25519
(6) SSHのためにフィンガープリントを追加する.また鍵でのログインができるか確かめる.
cdsl@natadecoco:/volume1/cdsl-vm-2-nginx-log-backup$ ssh -i ./id_ed25519 log-backup@34.84.68.226
Last login: Sun Apr 2 21:42:21 2023 from 163.215.6.1
log-backup@cdsl-vm-2:~$ logout
-rbash: /usr/bin/clear_console: restricted: cannot specify `/' in command names
Connection to 34.84.68.226 closed.
(7) rsyncで初回バックアップを作成する.
cdsl@natadecoco:/volume1/cdsl-vm-2-nginx-log-backup$ rsync -azvvP -e 'ssh -i ./id_ed25519' 'log-backup@34.84.68.226:/var/log/nginx/access.*.log.1' $PWD/log-backup-$(date +%Y%m%d%H%M%S)
opening connection using: ssh -i ./id_ed25519 -l log-backup 34.84.68.226 rsync --server --sender -vvlogDtprze.iLsfxC . "/var/log/nginx/access.*.log.1" (12 args)
receiving incremental file list
created directory /volume1/cdsl-vm-2-nginx-log-backup/log-backup-20230403072346
delta-transmission enabled
access.doktor.log.1
10,071 100% 9.60MB/s 0:00:00 (total: 0%) (xfr#1, to-chk=2/3)
access.rudder.log.1
349 100% 340.82kB/s 0:00:00 (total: 0%) (xfr#2, to-chk=1/3)
access.wp.log.1
1,424,854 100% 90.59MB/s 0:00:00 (total: 100%) (xfr#3, to-chk=0/3)
total: matches=0 hash_hits=0 false_alarms=0 data=1435274
sent 81 bytes received 117,495 bytes 235,152.00 bytes/sec
total size is 1,435,274 speedup is 12.21
(8) NASのWeb管理画面からタスクスケジューラーの実行結果を確認する.

以下は正常に動作した場合の実行結果の例である.
++ dirname /volume1/cdsl-vm-2-nginx-log-backup/nginx-log-backup.sh
+ cd /volume1/cdsl-vm-2-nginx-log-backup
++ date +%Y%m%d%H%M%S
+ MYDATE=20230403072528
++ ls -dr log-backup-20230403072346 log-backup-20230403072415
++ head -n 1
+ LATEST_BACKUP_DIR=log-backup-20230403072415
+ rsync -azvvP -e 'ssh -i ./id_ed25519' --compare-dest=../log-backup-20230403072415 'log-backup@34.84.68.226:/var/log/nginx/access.*.log.1' /volume1/cdsl-vm-2-nginx-log-backup/log-backup-20230403072528
opening connection using: ssh -i ./id_ed25519 -l log-backup 34.84.68.226 rsync --server --sender -vvlogDtprze.iLsfxC . "/var/log/nginx/access.*.log.1" (12 args)
receiving incremental file list
created directory /volume1/cdsl-vm-2-nginx-log-backup/log-backup-20230403072528
delta-transmission enabled
access.doktor.log.1
0 0% 0.00kB/s 0:00:00 (total: 0%)
10,071 100% 9.60MB/s 0:00:00 (total: 0%) (xfr#1, to-chk=2/3)
access.rudder.log.1
0 0% 0.00kB/s 0:00:00 (total: 0%)
349 100% 340.82kB/s 0:00:00 (total: 0%) (xfr#2, to-chk=1/3)
access.wp.log.1
0 0% 0.00kB/s 0:00:00 (total: 0%)
1,424,854 100% 123.53MB/s 0:00:00 (total: 100%) (xfr#3, to-chk=0/3)
total: matches=0 hash_hits=0 false_alarms=0 data=1435274
sent 81 bytes received 117,495 bytes 78,384.00 bytes/sec
total size is 1,435,274 speedup is 12.21
(9) バックアップができているか File Station で確認する.

バックアップできていた.
