のんちゃんの記憶喪失メモ

覚える気がない。

パスワードなしでscpしたい

やりたかったこと

サーバAにサーバBのファイルを渡したい。その手順を簡単にしたい。rsyncの設定時と同様、公開鍵を設定する。

設定方法

参考:https://edosha.hatenablog.jp/entry/2020/06/12/110424

2つのサーバの言い分はこんなかんじ

「ファイルを拾いたいサーバA」:ファイルをください
「ファイルを拾われるサーバB」:ファイルをあげるから公開鍵.pubをください。authorized_keys に登録します。

「サーバA」の現在の公開鍵「.pub」の様子。無いなら作成

# ll ~/.ssh/
  • rw------- 1 root root 1152 5月 31 11:30 authorized_keys
  • rw------- 1 root root 2655 3月 30 19:26 id_rsa
  • rw-r--r-- 1 root root 576 5月 31 11:25 id_rsa.pub 
  • rw-r--r-- 1 root root 1878 7月 26 15:58 known_hosts

「サーバB」の公開鍵の様子を確認。「サーバA」の公開鍵は登録されていない。

cd ~/.ssh/
cat authorized_keys  

「サーバA」にて以下コマンドで「サーバB」に公開鍵を登録

# cat ~/.ssh/id_rsa.pub | ssh root@サーバB 'cat >> .ssh/authorized_keys'
Enter passphrase for key '/root/.ssh/id_rsa':
root@サーバB's password: サーバBのROOTのパスワードを入力

サーバBの公開鍵の様子を確認。サーバAの公開鍵は登録されていた。

cd ~/.ssh/
cat authorized_keys  

scpコマンドで動作確認

「-i ~/.ssh/id_rsa.pub」で設定した公開鍵を指定する

# scp -i ~/.ssh/id_rsa.pub サーバB:/var/log/hogehoge.log /tmp/hogehoge.log
DR-invalid-credentials.log                                                         100%    0     0.0KB/s   00:00

OK

パッチを当てたらWEBサーバが重くなった

パッチを当てたらWEBサーバが重くなった

調査

以下を調査して問題なし
〇ディスク
RAID
〇ネットワーク
〇CPU、メモリ
〇TOPコマンドの処理待ち状況
〇DB
SSL証明書

ログが爆発している部分を発見。原因はhttpdサービス

# ll /var/log/httpd/
合計 93132
  • rw-r--r-- 1 root root 56764149 12月 10 14:22 error_log ★異常
  • rw-r--r-- 1 root root 613884 11月 14 03:26 error_log-1114
  • rw-r--r-- 1 root root 538505 11月 21 03:08 error_log-1121
  • rw-r--r-- 1 root root 634304 11月 28 03:27 error_log-1128
  • rw-r--r-- 1 root root 541783 12月 5 03:09 error_log-1205

改善を試みる

error_logの中身を見る

[Thu Dec 09:21:31.363902 ] [:error] [pid 31852] Does the NSS database exist?
[Thu Dec 09:21:31.364204 ] [:error] [pid 31853] NSS_Initialize failed. Certificate database: /etc/httpd/alias.
[Thu Dec 09:21:31.364240 ] [:error] [pid 31853] SSL Library Error: -8038 SEC_ERROR_NOT_INITIALIZED
[Thu Dec 09:21:31.364244 ] [:error] [pid 31853] Does the NSS database exist?
[Thu Dec 09:21:31.364939 ] [:error] [pid 31854] NSS_Initialize failed. Certificate database: /etc/httpd/alias.
[Thu Dec 09:21:31.364981 ] [:error] [pid 31854] SSL Library Error: -8038 SEC_ERROR_NOT_INITIALIZED
[Thu Dec 09:21:31.364985 ] [:error] [pid 31854] Does the NSS database exist?
[Thu Dec 09:21:32.367083 ] [:error] [pid 31855] NSS_Initialize failed. Certificate database: /etc/httpd/alias.

参考サイト
HTTPDはNSS DB証明書を見つけることができません。 https://access.redhat.com/mt/ja/solutions/963483
CentOS 5でアップデートしたところWebサーバに接続できない https://www.bigbang.mydns.jp/httpd-centos-x.htm ★こっちの方が症状に近い

↑を参考に改善を試みる

「# ll /var/log/sa/etc/httpd/alias/」の結果*.dbの権限グループに異常なし

httpdの状態確認

# servicece httpd status
Redirecting to /bin/systemctl status httpd.service
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since 月 03-30 17:56:20 JST; 1 years 8 months ago
     Docs: man:httpd(8)
           man:apachectl(8)
  Process: 28118 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
 Main PID: 24133 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
    Tasks: 7
   CGroup: /system.slice/httpd.service
           tq 1695 /usr/sbin/httpd -DFOREGROUND
           tq 1829 /usr/sbin/httpd -DFOREGROUND
           tq24133 /usr/sbin/httpd -DFOREGROUND
           tq24134 /usr/libexec/nss_pcache 2228227 off ★OFF???
           mq28120 /usr/sbin/httpd -DFOREGROUND

/etc/rc.d/init.d/httpd restartを実行し、再度状態確認

# service httpd restartstatus
Redirecting to /bin/systemctl status httpd.service
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since 金 12-10 14:48:11 JST; 3s ago
     Docs: man:httpd(8)
           man:apachectl(8)
  Process: 829 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
  Process: 28118 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
 Main PID: 836 (httpd)
   Status: "Processing requests..."
    Tasks: 9
   CGroup: /system.slice/httpd.service
           tq836 /usr/sbin/httpd -DFOREGROUND
           tq837 /usr/libexec/nss_pcache 33030147 off ★OFF???
           tq840 /usr/sbin/httpd -DFOREGROUND
           tq842 /usr/sbin/httpd -DFOREGROUND
           tq843 /usr/sbin/httpd -DFOREGROUND
           tq844 /usr/sbin/httpd -DFOREGROUND
           tq845 /usr/sbin/httpd -DFOREGROUND
           mq846 /usr/sbin/httpd -DFOREGROUND

結果

再度エラーログを確認すると大量に出ていたログが消え、WEBの速度が速くなった。
タイミング的にはnssをアップデートして以降エラーが大量に出ていることがわかったけど、なんで?ごめん、よくわからん・・・。
statusの表示に出ている「/usr/libexec/nss_pcache 33030147 off」って何?

何かあった時にざっとログを取るコマンド

cat /var/log/get_top.log
cat /var/log/dmesg | egrep -i "emerg|alert|crit|error|warn|fail" 
cat /var/log/messages | egrep -i "emerg|alert|crit|error|warn|fail" 
cat /var/log/messages | grep "今日の日付"
cat /opt/fujitsu/ServerViewSuite/RAIDManager/web/public/RAIDLog.xml | egrep -i "emerg|alert|crit|error|warn|fail"
cat /var/log/secure
sar

rsyncとlsyncdでサーバ2台をリアルタイム同期をしたい

基本情報

MASとSUBというサーバを用意し、sambaファイルサーバデータをリアルタイム同期させたい。
まずはテストから。

テストデータ作成

MAS-SUBで
mkdir /data/Share/rsynctest

MASでテストファイルを作成

# dd if=/dev/zero of=test.file bs=1M count=1;for i in {1..10};do cp test.file test_${i}.file;done
# ll /data/Share/rsynctest/
合計 11264
  • rw-r--r-- 1 root root 1048576 5月 26 16:55 test.file
  • rw-r--r-- 1 root root 1048576 5月 26 16:55 test_1.file
  • rw-r--r-- 1 root root 1048576 5月 26 16:55 test_10.file

rsyncの設定&テスト

rsyncは元々インストールされていた

参考サイト:https://www.wetch.co.jp/centos%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8C%E6%9C%9F%EF%BC%88lsyncdrsync%EF%BC%89/

ファイルのコピーはできるがパスワード入力4回求められる

# rsync -av /data/Share/rsynctest root@11.22.33.112:/data/Share
Enter passphrase for key '/root/.ssh/id_rsa': 
Enter passphrase for key '/root/.ssh/id_rsa':
Enter passphrase for key '/root/.ssh/id_rsa':
root@11.22.33.111's password:
sending incremental file list
rsynctest/
rsynctest/test.file
rsynctest/test_1.file
略
rsynctest/test_10.file


sent 11,537,890 bytes  received 229 bytes  378,298.98 bytes/sec
total size is 11,534,336  speedup is 1.00

これを回避するためMASで公開鍵を作成し、公開鍵をSUBに登録する
※双方向同期を行うためにはお互いの公開鍵鍵を持つ必要があるので
 SUBの公開鍵を作成し、公開鍵をMASに登録する作業もおこなう。

MASにて

 ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa.rsync_MAS ★id_rsaではなく専用の証明書を作ることにした。意味があるのかよくわからない
 ll /root/.ssh/
 scp /root/.ssh/id_rsa.rsync_MAS.pub root@11.22.33.112:/root/.ssh

SUBにて公開鍵を登録

  cd /root/.ssh/
  ll
 cp authorized_keys authorized_keys.bak ★一応・・
 cat id_rsa.rsync_MAS.pub
 cat authorized_keys
 cat id_rsa.rsync_MAS.pub >> authorized_keys ★authorized_keysにMASの公開鍵を追記
 cat authorized_keys

MASにて動作確認

  ssh -i ~/.ssh/id_rsa.rsync_MAS root@11.22.33.112 ★パスワードなしでSSH接続できることを確認してみた exitで抜ける
  rsync -av -e "ssh -i /root/.ssh/id_rsa.rsync_MAS" /data/Share/rsynctest root@11.22.33.112:/data/Share/ ★パスワード入力無しでファイルコピー成功

 
結果、MASの「.ssh」配下がどうなっているかというと

# ll /root/.ssh/
合計 24

  • rw------- 1 root root 2610 5月 31 11:17 id_rsa.rsync_MAS
  • rw-r--r-- 1 root root 576 5月 31 11:25 id_rsa.rsync_MAS.pub
  • rw-r--r-- 1 root root 576 5月 31 11:26 id_rsa.rsync_SUB.pub ★対向サーバの公開鍵

SUBの「.ssh」配下

# ll /root/.ssh/
合計 28
  • rw-r--r-- 1 root root 576 5月 31 11:24 id_rsa.rsync_MAS.pub ★対向サーバの公開鍵
  • rw------- 1 root root 2610 5月 31 11:17 id_rsa.rsync_SUB
  • rw-r--r-- 1 root root 576 5月 31 11:17 id_rsa.rsync_SUB.pub

Lsyncdのインストール

参考サイト:CentOS 8 では epel-release パッケージをインストールしても lsyncd パッケージが出てこない。
https://mattintosh.hatenablog.com/entry/20200408/1586272117

MAS-SUBで

 1001  dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
 1002  yum --enablerepo=epel install  lsyncd
 1005  df -h
 1006  less /etc/lsyncd.conf
       systemctl enable lsyncd.service ★Lsyncd自動起動設定もおこなう

Lsyncd.confの設定

参考サイト
「lsyncd環境設定」:https://www.wetch.co.jp/centos%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8C%E6%9C%9F%EF%BC%88lsyncdrsync%EF%BC%89/
設定の解説:https://ikm.hatenablog.jp/entry/2013/05/27/140336
initの設定:https://web.chaperone.jp/w/index.php?lsyncd
deleteの設定:https://iga-ninja.hatenablog.com/entry/2015/02/28/230014
lsync双方向同期で起こる悲劇:https://cloudpack.media/11060

おすすめの設定
 lsyncdで双方向同期するなら delete= running
 初回起動時に同期させない init = false


MAS設定ファイル抜粋

sync{
  default.rsync,
  source = "/data/Share/rsynctest",
  target = "root@11.22.33.112:/data/Share/rsynctest",
  delete = running,
  init = false,
  delay = 1,
  rsync = {
    archive = true,
    compress = true,
    rsh = "/usr/bin/ssh -i /root/.ssh/id_rsa.rsync_MAS -o UserKnownHostsFile=/root/.ssh/known_hosts" ★
  }
}

Lsyncdの監視ファイルの上限設定

Lsyncdが利用している inotifyが監視できるファイル数には上限があります。
https://gist.github.com/mly520/6928552

lsyncdを使用している場合に、監視間隔の間に大量のファイルが変更された場合、以下のようなメッセージを出力してlsyncdが停止する場合がある
https://serv-ops.com/knowledge/open.knowledge/view/15?offset=0

つまり、lsyncdはinotify(max_user_watchesの数)以上のファイル数を扱わないので
圧縮ファイルの解凍等で大量に更新があると、運が悪ければlsyncdでのミラーリングが止まる。

今の上限を確認すると

# cat /proc/sys/fs/inotify/max_user_watches
241196 

現環境について調査して、増やす必要があると感じたので増やす。「1048576」という数字は調査中に得た数字。

MASSUBにて
「fs.inotify.max_user_watches = 1048576」をsysctl.confに追記

# cp /etc/sysctl.conf /etc/sysctl.conf20220531
# vim /etc/sysctl.conf
# /sbin/sysctl -p
net.ipv4.ip_nonlocal_bind = 1
fs.inotify.max_user_watches = 1048576
# cat /proc/sys/fs/inotify/max_user_watches
1048576

Lsyncdのログをsyslogに出力させない

参考サイト:https://blog.denet.co.jp/lsyncdsystemd/

MAS-SUBにて

  724  vim /usr/lib/systemd/system/lsyncd.service ★"StandardOutput=null"を追記 lsyncdのログをsystemdへ出力しない
  727  systemctl daemon-reload
  728  systemctl restart lsyncd.service
  729  systemctl status lsyncd.service
  730  cat /var/log/lsyncd/lsyncd.log ★ファイルを操作してみてログが出力されていることを確認
 1020  cat /var/log/messages | grep syncd ★シスログに設定して以降ログが出力されないことを確認

rsyncのログも抑止できるらしいがデーモンではないからか /var/logにもmessageにも出てこない。

 /etc/rsyncd.confに”transfer logging = no”を加筆する事でログ出力を抑制する事ができる。
 https://www.program-laboratory.com/program/technic/linux_1.html

動作確認

①正常系
sambaサーバをブラウザで開いて操作
\\11.22.33.111\Share\rsynctest
\\11.22.33.112\Share\rsynctest

MASでファイルを作成したら、SUBでその内容がF5で反映されることを確認
MASでファイルを削除したら、SUBでその内容がF5で反映されることを確認
SUBでファイルを作成したら、MASでその内容がF5で反映されることを確認
SUBでファイルを削除したら、MASでその内容がF5で反映されることを確認

②異常系 MAS再起動 
MASでファイルを作成したら、SUBでその内容がF5で反映されることを確認
MAS再起動する間に、SUBでそのファイルを書き換えor削除
MAS再起動後、どうなるか????

③異常系 SUB再起動
SUB再起動する間に、MASでファイルを書き換えor削除
SUB再起動後、どうなるか????

④異常系 MASが何日も動かない
MASが止まっている間に、SUBでそのファイルを書き換えor削除を大量に
MAS起動後、どうなるか????

懸念

・lsyncとrcyncはyumupdateから外したほうが安全なのかな?

Linuxアクセス権限

.(ドット)

SELinux有効化で作られたファイル・フォルダには".(ドット)"が付く。Redhat6以降でそうなった。無視してよい。

+(プラス)

aclの設定が付いていることをと表す

s(小文字)

SUID、SGID。実行可能ファイルにのみ指定することができる。実行ファイルの所有ユーザorグループの権限で実行されるようになる。

S(大文字)

ファイルの所有者が実行パーミッションを持たない。

t

スティッキービット。ファイルの作成を許可、削除はさせない。

vim

行数を表示する

:set number

全行クリア

:%d

置換

:%s/置換前/置換後/g

vim置換
https://qiita.com/waoooon/items/8d982e49692c8145ca4b

【保存版】正規表現エスケープが必要な文字一覧表
https://qiita.com/katsukii/items/1c1550f064b4686c04d4

一単語削除

:dw

行末まで削除

:D

カーソルから指定した行分削除

:2dd

カーソルからファイルの末尾まで削除

:.,$d

n行目からカーソルまで削除

:n.,d

特定の文字列を一斉に削除

置換をすることで特定の文字列を一斉に削除するということもできる。

例えば「abc」という文字列を一斉削除したい場合

:%s/abc//g

指定した文字列が(有る/無い) 行を削除

:g/abc/d ★abcを含む行を削除する
:v/abc/d ★abcを含まない行を削除する

vimの置換で改行を(挿入/削除)

:s/\n//g ★全行に挿入
:s//\r/g ★全行に削除

よくわからなくてこんなことをして改行を含む挿入をしていた

abc を
abs
123 にしたかった。

:%s/abc/abc★123/g
:%s/★/\r/g

syslogとlogrotate

syslogをローテートさせたい

手順

cp /etc/logrotate.conf /etc/logrotate.yyyymmdd
vim /etc/logrotate.conf
logrotate -d /etc/logrotate.conf ★デバッグ

※confを変更れば反映されるのでサービス再起動は不要

参考資料

「/var/log/messages」ファイル
https://linuc.org/study/knowledge/518/

【初心者でもすぐわかる】syslogとは?とsyslogの設定方法
https://eng-entrance.com/linux-log-syslog#i-2

Linux sambaでファイル操作ログを出力する
http://kt-hiro.hatenablog.com/entry/20180518/1526647970

23.2.5. ログローテーション
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/system_administrators_guide/s2-log_rotation