www.smiyasaka.com は、 2019 年2月から SSL 化し 通信を暗号化した方式で発信をしています。
●   CentOS 8.0.1905 httpd-2.4.41 のインストールと自宅サーバ構築   ● アクセス数 昨日 9 今日 5
  累計 235   

   CentOS-8-x86_64-1905-dvd1.isoを使用し、自宅サーバを構築しました。
CentOS 8.0 は、デフォルトで httpd-2.4.37-12 がサポートされていますが、 apache の機能 Alias
 ( ドキュメントルート以外のアクセス ) が動作しない事と、 UserGroup管理者 にすると 
起動時エラーになるので 2019.08.12 付けで httpd-2.4.41 がリリースされた最新版を使用し、極力
 CentOS 7.XX と同じ設定をする方針で構築しています。

openssl は、デフォルトの openssl-1.1.1 をそのまま使用します。理由については、該当箇所に記
述しています。
まだ、設定方法が未定の項目については、「 ※※ 準備中 ※※ 」と表記しています。

    ここでのサーバ構築は、ファイアウォール・SELinux とも有効の設定で行っています。
        ( "コピペ" で簡単にサーバ構築が出来るよう心掛けた作りにしています。)
=================================================================================
	目	次
  [○○○○]のクリックで、その項目の内容が目次の下に表示、再度クリックで非表示になります。
    本文を総て先読み非表示(折り畳み方式)し、目次のクリックで表紙する方式を採用しています。
                
---------------------------------------------------------------------------------
---------------------------------------------------------------------------------
=================================================================================
  0.  インストールした PC のスペック等
=================================================================================
ファイル転送プログラム vsftpd は、Tera Term の転送機能を使用して windows PC 側から直接転送
し、インストールします。
vsftpd インストール後 ダウンロードしたファイルを サーバ機に ffftp で書き込み、 各種設定は、
Windows PC ( Tera Term を使用 )からの遠隔操作で web サーバを構築していきます。

ディレクトリ等の名前は、私のサーバ機の環境での名前を使用していますので、利用するときには、
あなたの環境に合わせて変更してください。
   ( /var/www/html/www.smiyasaka.com は、httpd.conf での、DocumentRoot のパスです。
                      /home/miyasakaは、ホームディレクトリです。 )
サーバ機( OS バージョン CentOS 7.7.1908  64bit )の CPU 利用率 8.80 % CPU 温度 +35 です。
              2019.12.06 付けでカーネル( OS のバージョン )が、更新されました。
             ( カーネルのバージョン Kernel 3.10.0-1062.9.1.el7.x86_64 です。)

     2017.05.26から、新規に下記スペックの PC にインストールし、使用しています。
     -------------------------------------------------------------------------
     私の自宅サーバ機のスペック
           型    式 : mouse LM-mini76S-S1-MA CPU : Intel Celeron 3855U 2コア/1.60GHz
              消費電力 : 約 10W      メ モ リ : 8GB   SSD : 128GB
              インターネット回線 : STNet 光回線(ギガビット対応)
              USBカメラ : Logicool UVC対応 C270sCW 120万画素(固定焦点)
              LANカメラ : PCi CS-W05N 30万画素
     -------------------------------------------------------------------------



=================================================================================
  1. CentOS 8.0.1905-x86_64  のインストール
=================================================================================

2019年 9月24日付けで CentOS 8.0.1905 がリリースされています。
インストールは、CentOS-8-x86_64-1905-dvd1.isoで行います。

インストールの方法は、基本的には、CentOS 7.X と同じですが、若干表示形式が変更され、時刻と日
付の設定が必要になりました。
更にインストール媒体の作成で iso の容量が約 7 GB あるため DVD DL (8.5GB) や USB(16GB) が必
要になります。

ダウンロードは、[ CentOS 8.0.1905 は、ここをクリック] してください。

ソフトウエアの選択は、「最小限のインストール」を選択して行っています。
httpd のバージョンは、デフォルトで httpd-2.4.37-12 ですがインストールは、されていません。

[ CentOS 8.0.1905 DVD からインストール手順 ] の詳細は、[ここをクリック]してください。



=================================================================================
  2. CentOS 8 再起動後のコンソールからの各種設定( SELinux を含む )
=================================================================================
ここの設定だけは、サーバ機のコンソールから、GNOME(テキスト入力モード)で行ってください。

○ ログインは、[ root ]と[ root のパスワード ]で行います。

@ 日本語コードの変更 ( tara Term の日本語文字化け対策 )
    
    日本語コードの確認は、echo $LANG

    日本語コードの変更は、ロケール( locale )の値を編集します。

    vi /etc/locale.conf

  言語  国   文字コード
    ↓ ↓   ↓
    ja_JP.UTF-8 ---> ja_JP.eucJP

    または、localectl set-locale LANG="ja_JP.eucJP" で変更する。

A SELinux を無効にしてサーバ機を構築する時は、C に進んでください。
    SELinux を有効にしてサーバ機を構築する時は、B に進んでください。

B SELinux を有効にしてサーバ機を構築する時は、下記をクリックして各種設定を行ってください。

    [ CentOS 8 SELinux のアクセス制限を有効にした時の設定手順 ] の詳細は、
                               [ここをクリック]してください。

C  Windows側から、Tera Term でアクセスするポート番号を設定する。
     下記コマンドで sshd の設定ファイルを編集します。
    vi /etc/ssh/sshd_config

    #Port 22の前の # を削除して、「 Port 2222 」に変更します。

    ポート番号 22 のままで良い場合は、設定なし、SELinux 有効のままで  Tera Term でログイン
    が可能です。

C-1 Port 2222 を有効化( 追加 )する。

    ( --permanent は、再起動後も設定を有効にする指定。忘れない様にしてください。)

    firewall-cmd --zone=public --add-port=2222/tcp --permanent

    success が表示すれば OK

    firewall のコマンドで --zone=public は、省略してもデフォルトで zone は、public になっ
    ているで zone=public で設定されます。

C-2 設定を読込みこませて、有効にします。

    firewall-cmd --reload

    success が表示すれば OK

※※ 参考情報 ※※  キーボードから長いコマンドを入力するのが面倒な方へのアドバイス。

 ポート番号を「 2222 」に変更しないで初期値のまま( 22 ) Tera Term にログインしてしまいます。
 後は、各設定をコピペですれば良いのです。 SELinux 有効のままで  Tera Term には、ログインが
 可能です。
 ポート番号を「 2222 」に変更したい時には、変更後再ログインするだけでOKです。

D sshdの再起動

  再起動するので、sshd の再起動は、不要です。また、デフォルトでサービスが有効になっています。

E SELinux を無効にする設定。

    この変更を忘れると Tera Term から接続できなくなってしまいますから、注意してください。

    vi /etc/sysconfig/selinux

    SELINUX=enforcing  ----> SELINUX=disabled に変更する。

※※ 参考情報 ※※  
 後から、SELinux を有効にしたくなり、ここを permissive または、enforcing に設定し直して
 再起動すると SELinux のポリシー情報が無いためにエラーになり再起動できなくなります。
 注意してください。

F  不足パッケージのインストール

  CentOS 8 からは、yum が dnf に変更になっています。 yum のままでもOKです。

  「ベース」と「その他の開発」を groupinstall でインストールします。> 
  パッケージ数は、「ベース」+「その他の開発」: 519個です。

  ※※ 注意 ※※ yum -y update を先にすると Base のインストールがエラーになりますので注意
 してください。つまり、カーネルのバージョンを先に最新バージョンにしないことです。

  dnf -y groupinstall "Base" "Additional Development"

  groupinstall は、時間がかかるので、追加処理として update 後、シャットダウンするコマンド
  を追加します。

  dnf -y groupinstall "Base" "Additional Development" && dnf -y update && poweroff

G ファイアウォール( firewalld )の動作状況の確認

  下記コマンドで、ファイアウォールが有効な状態か確認しておきます。

  systemctl status firewalld

  下記の様に表示すればファイアウォールは、有効になっています。

  firewalld.service - firewalld - dynamic firewall daemon
     Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
     Active: active (running) since 月 2014-09-** 06:01:06 JST; 5min ago
   Main PID: 567 (firewalld)
          以下省略

H システムのアップデート後、再起動をします。

  yum -y update && reboot または、poweroff

  停止したい時は、poweroff にしてください。

I 再起動後、セキュリティ強化の為、sshd のアクセス制限を設定します。

   ( TCP Wrapper による SSH 接続のアクセス制御 )

  この設定は、必要とする方のみ行ってけてた下さい。
  私の場合、サーバ機の管理・設定は、ローカルの PC 以外しないので設定しています。

  hosts.allowとhosts.denyの設定( IPアドレスの制限 )

 この設定は、hosts.allow が優先されます。つまり、全てを拒否し、hosts.allow で指定された IP
 アドレスは、許可になります。

I-1 /etc/hosts.deny に、 sshd:ALL ( すべての接続を拒否 )と書込みます。

   vi /etc/hosts.deny で sshd:ALL  または、

   echo "sshd:ALL" >> /etc/hosts.deny

I-2 /etc/hosts.allow で接続を許可するIPアドレスを指定します。

   vi /etc/hosts.allow で sshd:192.168.0. または、

   echo "sshd:192.168.0." >> /etc/hosts.allow

   192.168.0. は、私の環境下ですべてのローカルIPアドレスを許可する設定です。

---------------------------------------------------------------------------------
Tera Term の文字化けを防ぐため、漢字コードをサーバ機側と同じ漢字コード EUC に必ず設定し、
「設定の保存」をしてください。    接続すTCPポートは、私の場合 2222 に変更しています。

再起動後は、設定は、windows側から、Tera Term を使用して各種設定を行います。
Tera Term の漢字-送受信コードは、EUC を指定して使用してください。

Tera Termの設定・使い方の参考になるサイト   Tera Term のセットアップ方法
Tera Term は、窓の杜ライブラリでダウンロードできます。

=================================================================================
  3. 事前にダウンロードするファイル一覧と探し方
=================================================================================
rpm パッケージのダウンロードは、このサイト[ RPM Search ]で検索するとほとんどのパーケージが
入手できます。

下記のパッケージ名をクリックするとダウロード出来るサイトへジャンプします。

           CentOS 8 の rpm パッケージは、el8.x86_64.rpm の名前が付きます。

---------------------------------------------------------------
ftp
 ftp-0.17-78.el8.x86_64.rpm
---------------------------------------------------------------
httpd
 httpd-2.4.41.tar.gz
 apr-1.7.0.tar.gz  
 apr-util-1.6.1.tar.gz
 nghttp2-1.XX.X.tar.gz
 brotli-1.0.X.tar.gz
---------------------------------------------------------------
fswebcam
 fswebcam-20100622.tar.gz
---------------------------------------------------------------
sendmail
 procmail-3.22-47.el8.x86_64.rpm.html
 sendmail-8.15.2-31.el8.x86_64.rpm
---------------------------------------------------------------
logwatch
 logwatch-7.4.3-9.el8.noarch.rpm
 mailx-12.5-29.el8.x86_64.rpm
 perl-Date-Manip-6.60-2.el8.noarch.rpm
 perl-Sys-CPU-0.61-14.el8.x86_64.rpm
 perl-Sys-MemInfo-0.99-6.el8.x86_64.rpm
---------------------------------------------------------------
clamav  Fedora のパッケージを使用します。
 clamav-0.101.4-1.el8.x86_64.rpm
 clamav-update-0.101.4-1.el8.x86_64.rpm
 clamav-lib-0.101.4-1.el8.x86_64.rpm
 clamav-data-0.101.4-1.el8.noarch.rpm
 clamav-filesystem-0.101.4-1.el8.noarch.rpm
---------------------------------------------------------------
chkrootkit
 chkrootkit.tar.gz
---------------------------------------------------------------
 nkf-2.1.5.tar.gz
---------------------------------------------------------------
sensors
 lm_sensors-3.4.0-17.20180522git70f7e08.el8.x86_64.rpm


=================================================================================
  4. セキュリティ対策のため停止したサービス
=================================================================================
暫定的に停止したサービスは、下記のとおりです。
( 試しに、不要と思われるサービスを停止 及び 再起動後も停止にしています。)

     サービス名          機能
     atd             # 単発的にスケジュール化した コマンド を実行させるデーモンです。
     auditd          # 監査メッセージのログファイルを出力するデーモン。
     kdump           # システムがクラッシュした時、原因を特定するためのdumpファイルを
                       保存してくれるサービス。
     lvm2-monitor    #  論理ボリュームマネージャー(LVM) 利用時の障害監視のためのデーモン。
     mdmonitor       # ソフトウェアRAID 監視サービ
     rngd            # ハードウェア を元に乱数を発生させるためのデーモンです。
     smartd          # ハードディクスのS.M.A.R.T.による自己診断機能情報を取得する。
     tuned           # CPUガバナーを利用して強制的にCPUを最大パフォーマンスで動作させる。

下記は、サービスを一括停止するプログラムです。
------------------------------------------------------------
#!/bin/sh
systemctl stop atd.service
systemctl disable atd.service
systemctl stop auditd.service
systemctl disable auditd.service
systemctl stop kdump.service
systemctl disable kdump.service
systemctl stop lvm2-monitor.service
systemctl disable lvm2-monitor.service
systemctl stop mdmonitor.service
systemctl disable mdmonitor.service
systemctl stop rngd.service
systemctl disable rngd.service
systemctl stop smartd.service
systemctl disable smartd.service
systemctl stop tuned.service
systemctl disable tuned.service
systemctl stop dm-event.socket
systemctl disable dm-event.socket
echo "サービス_STOP 完了"
-------------------------------------------------------------
属性を変更して、実行します。

chmod 755 service_stop.sh;sh service_stop.sh


=================================================================================
  5. ファイアウォール( firewalld )と Systemd
=================================================================================

私が設定したファイアウォール( firewalld )の内容は、下記の通りです。
---------------------------------------------------------------------------------
zone public ( public.xml ) のファイアウォール設定項目を直接編集しています。
---------------------------------------------------------------------------------

システム起動時に設定されるファイアウォールの設定は、zone public ( public.xml ) のファイルの
内容で設定されるので、このファイルを直接編集すれば、個別に設定することが不要になります。

( このファイル( public.xml )は、--add-service,  --add-port--permanent を指定した時に設
   定内容が反映されます。)

public のファイアウォールの設定データは、/etc/firewalld/zones/public.xmlに保存されています。
この内容を修正して dhcpv6-client, ssh削除ntp, http, ftp, https追加をするように編集
してみます。
 
public.xml のオリジナルデータは、下記の通りです。
 
  vi /etc/firewalld/zones/public.xml
    ---------------------------------------------------------------------------
    <?xml version="1.0" encoding="utf-8"?>
    <zone>
      <short>Public</short>
      <description>For use in public areas. You do not trust the other
      computers on networks to not harm your computer. Only selected incoming
      connections are accepted.</description>
      <service name="ssh"/>
      <service name="dhcpv6-client"/>         <----- ここを修正
      <port protocol="tcp" port="2222"/>         <----- 追加したポート
    </zone>
    ---------------------------------------------------------------------------
 
  下記の様に編集します。
 
    <service name="dhcpv6-client"/>
       ↓  ↓  ↓
    <service name="ntp"/>      <---- 123/tcp の有効化
    <service name="http"/>     <----  80/tcp の有効化
    <service name="ftp"/>      <----  21/tcp の有効化
    <service name="https"/>    <---- 443/tcp の有効化

上記の操作を sed コマンドで一括処理してみました。
                    (必ず、バックアップを取ってから実行します。)

    cp /etc/firewalld/zones/public.xml  /etc/firewalld/zones/public_bak.xml
    sed -i -e"s/ssh/http/g
    s/<service name=\"dhcpv6-client\"\/>/<service name=\"https\"\/>\n\
    <service name=\"ntp\"\/>\n\
    <service name=\"ftp\"\/>/g" /etc/firewalld/zones/public.xml

    編集保存したら、firewall-cmd --reload で設定を反映します。

下記コマンドで変更内容を確認します。

cat  /etc/firewalld/zones/public.xml

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust ……… accepted.</description>
  <service name="http"/>
  <service name="https"/>
  <service name="ntp"/>
  <service name="ftp"/>
  <service name="cockpit"/>
  <port port="2222" protocol="tcp"/>
</zone>

上記設定で ファイアウォールの設定は、下記の様になります。
----------------------------------------------------------
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp2s0
  sources:
  services:  ftp http https ntp
  ports: 2222/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
---------------------------------------------------------------------------------

=================================================================================
  
=================================================================================


                                 ※※ 準備中 ※※


=================================================================================
  6. Tera Termでvsftpd( FTPサーバ )を転送しインストール
=================================================================================
ここでは、先人の知恵を借りて、vsftpd のインストールと設定に挑戦してみました。
設定は、管理者のみ・LAN 内のみの接続にしています。また、個人使用の為、ログは取りません。

※ 役に立つ情報 ※
  私は、サーバ再構築の際保存したある vsftpd.conf を上書きして設定しています。
  ffftp が使えないので、Tera Term の転送機能を利用して行います。
  その方法は、[ CentOS 7.7 6-1. Tera Termでproftpd( FTPサーバ )を転送しインストール ]で解説
  しています。

@ vsftpd のインストールと設定

----------------------------------------------------------------------------------------
vsftpd-3.0.3-28.el8.x86_64.rpmは、Tera Term の転送機能を利用してホームディレクトリに読込み
 cp コマンドで  /usr/local/src/ へ コピーします。

cp /home/miyasaka/vsftpd-3.0.3-28.el8.x86_64.rpm /usr/local/src/

Tera Term の転送機能の利用方法の詳細は、CentOS 7 自宅サーバ構築 の6-1.Tera Termでproftpd
( FTPサーバ )を転送しインストールの @で紹介しています。
----------------------------------------------------------------------------------------

   cd /usr/local/src/; \
   rpm -ivh vsftpd-3.0.3-28.el8.x86_64.rpm

   yum でのインストールは、下記の通りです。

   yum -y install vsftpd

A vsftpd の設定

   編集前の vsftpd.conf を .bak を付けて保存しておきます。

   cp /etc/vsftpd/vsftpd.conf /home/miyasaka/vsftpd.conf.bak
------------------------------------------------------------------------------------
  編集済の vsftpd.conf が有る場合には、Tera Term の転送機能を利用してホームディレクトリに読
  込み 
  cp コマンドで上書きします。

   cp /home/miyasaka/vsftpd.conf /etc/vsftpd/
------------------------------------------------------------------------------------
   下記の操作を sed コマンドで一括処理してみました。下記を実行します。
( sed -i は、上書き編集、/○○○/s/^#// は、文字列○○○がある行の先頭の # を削除、\$a\ は、
  最終行[\$]の行末[a]に \ 以降の文字列を追加・\ は、先頭の改行、\n は、文字列中の改行
  \n\ の \ は、継続行の指示です。)

cp /etc/vsftpd/vsftpd.conf /home/miyasaka/vsftpd.conf.bak; \
sed -i -e "/anonymous_enable=/s/YES/NO/
/xferlog_enable=/s/YES/NO/
#   先頭の # を削除
/#ascii_upload_enable/s/^#//
/#ascii_download_enable/s/^#//
/#chroot_local_user/s/^#//
/#chroot_list_enable/s/^#//
/#chroot_list_file/s/^#//
/#ls_recurse_enable/s/^#//
/listen=/s/NO/YES/
/listen_ipv6=/s/YES/NO/
##### ここからは、最終行後に追加です。
\$a\local_root=public_html\n\
use_localtime=YES\n\
text_userdb_names=Yes\n\
force_dot_files=YES\n\
pasv_min_port=50010\n\
pasv_max_port=50010" /etc/vsftpd/vsftpd.conf

   vi /etc/vsftpd/vsftpd.conf

   12行目 匿名ログイン禁止

   anonymous_enable=NO

   40行目:転送記録をログに残す

   xferlog_enable=NO

   82,83行目 コメント解除 ( アスキーモードでの転送を許可 )

   ascii_upload_enable=YES
   ascii_download_enable=YES

   100,101行目:コメント解除 ( chroot有効 )

   chroot_local_user=YES
   chroot_list_enable=YES

   103行目 コメント解除 ( chroot リストファイル指定 )

   chroot_list_file=/etc/vsftpd/chroot_list

   109行目 コメント解除 ( ディレクトリごと一括での転送有効 )

   ls_recurse_enable=YES

   114行目 変更 ( IPv4を有効にする )

   listen=YES

   123行目 変更 ( IPv6 は、無視させる )

   listen_ipv6=NO

  ### 最終行へ追記 ###

  # PAM認証のサービス名指定 ( これを設定しないと接続できない為、設定しておく。)

  pam_service_name=vsftpd

  # アクセスユーザーリストファイルの使用
  # NO  : 「/etc/vsftpd/user_list」内の指定ユーザに関わらず接続が許可される。

  userlist_enable=NO

  # tcp_wrappers( IPアドレスの制限 )を使用する

  tcp_wrappers=YES

  # ルートディレクトリ指定 (指定しない場合はホームディレクトリがルートディレクトリとなる)

  local_root=public_html

  # ローカルタイムを使う

  use_localtime=YES

  # Windows( ffftp )側で所有者名の表示

  text_userdb_names=Yes

  # Windows( ffftp )側で . ファイルの表示

  force_dot_files=YES

  # PASVモードでの接続のためのポート番号を設定します。
  # PASVモードは、デフォルトで有効になっています。
  # ポート番号の設定は、任意の番号で良いのですが、自宅サーバ機なので同時アクセスは、ない
  # ので min、max も同じにしています。
  # CentOS7 では、無くても動作しましたが、CentOS8では、設定しないと動作しません。

  pasv_min_port=50010    ←   pasvモード通信用 任意のポート番号
  pasv_max_port=50010    ←   pasvモード通信用 任意のポート番号

-------------------------------------------------------------------------------------

B B-1 Port 50010 を有効化( 追加 )する。

      ( --permanent は、再起動後も設定を有効にする指定。忘れない様にしてください。)

      firewall-cmd --zone=public --add-port=50010/tcp --permanent

      success が表示すれば OK

      ある範囲のポートの有効化は、(一例) --add-port=50010-50020/tcp とかになります。

   B-2 設定を読込みこませて、有効にします。

      firewall-cmd --reload

      success が表示すれば OK
C 上層への ディレクトリへのアクセスを許可するユーザーを追加

   vi /etc/vsftpd/chroot_list  または、

   echo "miyasaka" >> /etc/vsftpd/chroot_list

   私の場合 miyasaka を書込みました。

D hosts.allowとhosts.denyの設定( IPアドレスの制限 )

   この設定は、hosts.allow が優先されます。つまり、全てを拒否し、hosts.allow で指定された 
   IPアドレスは、許可になります。

  D-1 /etc/hosts.deny に、 vsftpd:ALL ( すべての接続を拒否 )と書込みます。

   vi /etc/hosts.deny

   vsftpd:ALL

   または、

   echo "vsftpd:ALL" >> /etc/hosts.deny

  D-2 /etc/hosts.allow で接続を許可するIPアドレスを指定します。

   vi /etc/hosts.allow

   vsftpd:192.168.0.

   または、

   echo "vsftpd:192.168.0." >> /etc/hosts.allow

   192.168.0.0/24 は、私の環境下ですべてのローカルIPアドレスを許可する設定です。

E vsftpd を自動起動を有効にし、起動する。

   systemctl enable vsftpd; \
   systemctl start vsftpd

   # が表示すれば OK です。

F B 〜 E のコマンドをまとめて実行させると下記の様になります。

        echo "miyasaka" >> /etc/vsftpd/chroot_list; \
        echo "vsftpd:ALL" >> /etc/hosts.deny; \
        echo "vsftpd:192.168.0." >> /etc/hosts.allow; \
        systemctl start vsftpd; \
        systemctl enable vsftpd

G  SELinux 有効化では、下記を設定しないと FFFTP での読み書きができない。
    以下まとめて設定します。

    setsebool -P ftpd_full_access 1

H ここで、windows 側の ffftp で接続できるか確認します。


=================================================================================
  7. 
=================================================================================

                                 ※※ 準備中 ※※

=================================================================================
  8. サーバの時刻を日本標準時に同期させる
=================================================================================

(設定方法等は、先人の知恵を借りて行いました。)

@ vi /etc/chrony.conf を入力して、設定ファイルを下記の様に変更します。
  3行目あたり

  pool 2.centos.pool.ntp.org iburst

  こうなっている部分を以下のように変更します。
   ↓
  server ntp1.jst.mfeed.ad.jp
  server ntp2.jst.mfeed.ad.jp

※ 参考 ※  1行毎直すのが面倒な時には、sed コマンドで下記の様にすると同じ事ができます。

cp /etc/chrony.conf /home/miyasaka/chrony.conf.bak; \
sed -i -e "/pool/s/^/#/
/pool/aserver ntp1\.jst\.mfeed\.ad\.jp\n\
server ntp2.\jst.mfeed\.ad\.jp" /etc/chrony.conf

A chrony を再起動します。 ( chrony のサービス名は、chronyd です。)

  systemctl restart chronyd.service

  # が表示すば、OKです。

B 再起動後も chrony を有効にします。

  systemctl enable chronyd.service

  # が表示すば、OKです。

C chronyd のステータス( 動作 )の確認。

  chronyc sources

  下記の様に表示します。

  MS Name/IP address         Stratum Poll Reach LastRx Last sample
  ===============================================================================
  ^+ ntp1.jst.mfeed.ad.jp          2   9   377   125   -462us[ -462us] +/-   93ms
  ^* ntp2.jst.mfeed.ad.jp          2  10   377  1019   +140us[ +265us] +/-   97ms


以下のように*印がついていたら同期ができています。
                               (起動してから同期までに10分ぐらいかかります。)


=================================================================================
  9. リポジトリを導入する
=================================================================================
dnf でインストールします。

  dnf -y install epel-release

使用方法は、下記の通りです。

  dnf --enablerepo=elrepo install [パッケージ名]


=================================================================================
  10-1. apache2( httpd-2.4.41 )のインストールと設定
=================================================================================

@ httpd-2.4.41 を展開して apr を展開したファイルをフォルダ ./httpd-2.4.41/srclib/ へ書き
   込む。

   1. httpd-2.4.41 を展開する。

   tar xzvf httpd-2.4.41.tar.gz; \
   chown -R root. httpd-2.4.41; \
   cd ./httpd-2.4.41/srclib

   2. apr を展開する。

   tar xzvf apr-1.7.0.tar.gz; \
   chown -R root. apr-1.7.0/; \
   mv apr-1.7.0 apr; \
   tar xzvf apr-util-1.6.1.tar.gz; \
   chown -R root. apr-util-1.6.1/; \
   mv apr-util-1.6.1/ apr-util

A configure( make 用にソースファイルの配置をする ) の実行

   cd /usr/local/src/httpd-2.4.41; \
   ./configure \
   --with-included-apr \
   --enable-rewrite \          <---- リクエストされた URL の動的書き換えを行うモジュール
   --enable-so \               <---- モジュールの有効化
   --enable-deflate=shared     <---- 圧縮する処理を追加

    SSL を有効にしたい時には、[./configure \]の後に[--enable-ssl \]を追加します。
    mod_ssl.so が追加されます。

  -------------------------------------------------------------------------------
  ・enable-rewrite        : Rewriteサポート(mod_rewrite)
    Apache側で要求されたURLを書き換えたり、リダイレクトしたりしてくれるモジュール
  ・enable-so             : mod_soモジュールを静的に組み込む
  ・enable-deflate=shared : データの転送を圧縮するモジュールを組み込む
  -------------------------------------------------------------------------------

以下で、終われば、OK
------------------------------------------------------------------------------------
config.status: creating support/split-logfile
config.status: creating build/rules.mk
config.status: creating build/pkg/pkginfo
config.status: creating build/config_vars.sh
config.status: creating include/ap_config_auto.h
config.status: executing default commands
configure: summary of build options:

    Server Version: 2.4.41
    Install prefix: /usr/local/apache2
    C compiler:     gcc -std=gnu99
    CFLAGS:          -g -O2 -pthread
    CPPFLAGS:        -DLINUX -D_REENTRANT -D_GNU_SOURCE
    LDFLAGS:
    LIBS:
    C preprocessor: gcc -E

------------------------------------------------------------------------------------
B make( コンパイル ) & install

   make && make install

以下で、終われば、OK
------------------------------------------------------------------------------------
Installing CGIs
mkdir /usr/local/apache2/cgi-bin
Installing header files
Installing build system files
Installing man pages and online manual
mkdir /usr/local/apache2/man
mkdir /usr/local/apache2/man/man1
mkdir /usr/local/apache2/man/man8
mkdir /usr/local/apache2/manual
make[1]: ディレクトリ `/usr/local/src/httpd-2.4.41' から出ます
------------------------------------------------------------------------------------
C 私のサーバの環境でした、httpd.confの設定は、下記のとおりです。


※  注意  ※

   ○○○○.conf ファイルは、編集前にバックアップを取るようにしましょう。

   ex,  httpd.confの場合( 私のサーバ機の場合 )

  cp /usr/local/apache2/conf/httpd.conf /home/miyasaka/httpd.conf.bak

 下記は、修正箇所の一覧ですが、ディレクトリは、私のサーバ機の環境での設定値です。
 機能は、「cgi, SSI, が、.htmlで使用可能・cgi, SSI のファイルは、ホームページファイルと同一
 ディレクトリで可能にする・png, jpg ファイル以外は、圧縮して転送する」を設定しています。
 なお、ドメインは一つしか使用しないのでバーチャルドホストの設定は、していません。
 圧縮設定は、最後に追加していますが、圧縮ログの出力は、コメントアウトしていませんのでローカ
 ルで確認後コメントアウトしてください。Al1as を使用して定点カメラ関係のデータとプログラムを
 別ドキュメントルート上で実行させています。不要な方は、削除してください。
 sed 文を簡略化するために、アクセスログの設定と圧縮処理の設定を conf ファイルとして作成し、
 本文の conf から、Include conf/extra/○○○○.conf で読み込ませるようにしています。conf フ
 ァイルの作成方法は、少し下に表示 している「 httpd-2.4.41 httpd.conf の編集項目 」の中で解
 説しています。

 下記は、httpd.conf の編集を sed コマンドで一括編集をした時の sed コマンドのリストです。
 ( sed コマンドをより理解するため無駄ですが挑戦してみました。)
 Linux の正規表現等が良く理解できました。( 自己満足 )

 [ sed コマンドによる httpd-2.4.41 の httpd.conf の一括編集 ] の詳細は、
                                                            [ここをクリック]してください。

 [ httpd-2.4.41 httpd.conf の編集項目 ] の詳細は、[ここをクリック]してください。

------------------------------------------------------------------------------------------

 Alias を使用して、別 DocumentRoot を作り CGI, SSI, html を動作させる方法を下記に紹介し
 ます。

 この方法は、当ホームページのトップページ内の指定した「日」および「月」の保存した定点カメラ
 の映像表示で使用しています。なお、デフォルトの httpd-2.4.37-12 では、私が試したところ、
 Alias の機能は、動作しませんでした。  

  [ Alias で別 DocumentRoot を作り CGI, SSI, html を動かす ] の詳細は、
                             [ここをクリック]してください。

------------------------------------------------------------------------------------------
 編集済の httpd.conf は、再構築時使用すると便利なので windows PC へ保存します。
 なお、ファイルの属性・所有者を変更しないと windows PC へ保存できないので変更します。
 ( ディレクトリ・ユーザ名は、私のサーバ機の場合の設定です。)

  cp /usr/local/apache2/conf/httpd.conf /home/miyasaka/; \
  chown -R miyasaka:miyasaka /home/miyasaka/httpd.conf; \
  chmod 644 /home/miyasaka/httpd.conf
------------------------------------------------------------------------------------------

Fホームページの書き込み先のフォルダを作成・所有者の変更・属性変更をします。
   ( /var/www/html/www.smiyasaka.com は、私の場合の DocumentRoot です。)

   mkdir -p /var/www/html/www.smiyasaka.com; \
   chown -R miyasaka:miyasaka /var/www/; \
   chmod 777 /var/www/html/www.smiyasaka.com

G httpd.confの設定に間違いが無いか確認します。

   /usr/local/apache2/bin/apachectl configtest

「 Syntax OK 」と表示されればOKです。

 ※※  注意  ※※
 configtest を実行する時に、DocumentRoot で指定したディレクトリが無いと下記エラーが出ますの
 でディレクトリを作成してから、configtest を実行してください。> 

              DocumentRoot must be a directory

H apache2を systemctl start で起動する。

   デフォルトで httpd.servce が用意されていますが httpd.servce では、apache の実行ファイルの
   パスが /usr/sbin/httpd に成っている為使用できませんので新規に作成します。

   systemctl start apache2 のコマンドが使えるように設定する。

   以下に、新規にサービス( systemctl ○○○○.servce )を作成登録する方法を紹介します。
   apache2 の起動をサービスとして登録し、起動・システム再起動時の自動起動に使用しています。

   [ systemctl service の新規作成 ] の詳細は、[ここをクリック]してください。

I アクセスログ・エラーログ・圧縮の確認用ログは、/usr/local/apache2/logs のディレクトリに
  書込まれます。
 
J ここで、 httpd.conf へ設定したドキュメントのルート( DocumentRoot と 別ディレクトリ)へ
   ホームページのファイルデータを書き込みます。

   下記は、ホームページ表示テスト用のプログラムです。 SSI・CGI もテストするようにしています。

   [ ホームページテストプログラム ] の詳細は、[ここをクリック]してください。

   私の場合は、自宅サーバの現用機で、毎日下記のファイルを圧縮してバックアップファイルとし

        1.ホームページのhtml・cgi・SSI・写真のファイルとデータ
        2.システム管理用に作成した perl・sh等の各種プログラム
        3.webalizerが解析した apacheのアクセスデータ(htmlデータ)
        4.apache のログデータ(1カ月分)
        5.root宛てメールデータ(10日分)
        6.SSL 用の認証鍵データ

 作成しているので、専用の転送プログラムと展開プログラムで簡単に、前日の24時の時点に数分で
 復元できるようにシステムを構築しています。

K 動作確認は、予備機のローカルIPアドレスを別の PC から入力して確認します。
   予備機を現用機とした時には、[ ホームページが外部へ公開 ] されているかの確認が出来るサイ
   トで行います。下記をクリックするとそのサイトへジャンプします。
                     [サーバー監視/ネットワーク監視サービス]


=================================================================================
  10-2. SELinux を有効にした時の apache2 のポリシー設定
=================================================================================

※※※ 参考情報 ※※※  
 以下の設定が面倒な時は、ブール値 httpd_unified を on してみてください。
 [ httpd_t に対して httpd の全タイプへの完全アクセスが許可されます (実行、 読み込み、 書
   き込み)。]
私のこのホームページで試したら、ほぼ動作しました。
動作しない SSI・CGI プログラムは、ポリシーを httpd_unconfined_script_exec_t に設定したら
動作しました。
ちなみに動作しないプログラムには、OS のコマンドが入っていました。  [ 私のサーバ機で検証 ]

  ○ httpd に設定したポリシー値

      ホームページ本体は、設定不要( 初期値 : httpd_sys_content_t )
      SSI・CGI プログラム         ---> httpd_sys_script_exec_t
      Read・Write するデータ      ---> httpd_sys_rw_content_t
      sh プログラム               ---> httpd_unconfined_script_exec_t
      SSI・CGI プログラム等で
          動作しないプログラム    ---> httpd_unconfined_script_exec_t

  ○ .html のプログラムファイルは、初期設定値 httpd_sys_content_t のままにしています。

      ※※ 参考情報 ※※  
               上記の設定が面倒な時は、ブール値 httpd_unified を on してみてください。

  ○ httpd のブール値は、下記を on にしています。

    httpd_enable_cgi --> on        ← cgi の動作を有効にする。
    httpd_enable_homedirs --> on   ← ホームディレクトリへのアクセスを有効にする。
    httpd_sys_script_anon_write --> on ← pubuic_content_rw_t タイプのラベルが付いたファイ
                                        ルへの書き込みアクセスを HTTPスクリプトに許可するか
                   どうかを定義

    httpd_ssi_exec  --> off    ← Web ページ内の SSI (server side include) 要素を実行可能
                                 にするかどうかを定義。 これを on するかは、動作結果を見て
                 決めて見てください。

                                        httpd-2.4.XX でも off のままで OK です。

---------------------------------------------------------------------------------

私のホームページでは、SELinux を有効にするにあたってプログラムの配置を変更しました。理由は、
SELinux のポリシーの設定を明確にし、一括設定をできるようにする為です。
変更設定は、コマンド semanage fcontext でポリシーを宣言してコマンド restorecon でポリシーを
恒久的に設定しています。

変更点 1. perl のブログラムをすべて1つのホルダー内に格納。
       プログラムは、すべて CGI 及び SSI実行可能なポリシー httpd_sys_script_exec_t に設定。
        一部プログラム内で Linux のコマンドを実行しているプログラムは、SELinux 保護無効の
        ポリシー 
        httpd_unconfined_script_exec_t に設定。

設定例

semanage fcontext -a -t httpd_sys_script_exec_t "/var/www/html/www.smiyasaka.com/SSI(/.*)?"
restorecon -R -vF /var/www/html/www.smiyasaka.com/SSI/
semanage fcontext -a -t httpd_unconfined_script_exec_t\
/var/www/html/www.smiyasaka.com/SSI/cgi_test.cgi
restorecon -vF /var/www/html/www.smiyasaka.com/SSI/cgi_test.cgi

変更点 2. テキストファイル(.txt)を> すべて1つのホルダー内に格納。
  ファイルは、すべてホームページからの読み書き有効なポリシー httpd_sys_rw_content_t に設定。

設定例

semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/www.smiyasaka.com/TXT(/.*)?"
restorecon -R -vF /var/www/html/www.smiyasaka.com/TXT/

※※ 参考情報 1 ※※  semanage fcontext でのポリシーの設定について。
 ポリシーは、パスの上位から、下位に向かって行いましょう。 つまり、上位のディレクトリをまと
 めて設定し、次に 下位のファイル単位でポリシーを設定します。

※※ 参考情報 2 ※※ 
               SELinux 有効化でのバックアップの作成について。

バックアップは、コマンド tarで圧縮ファイルを作成しますが、その時、下記の様にオプション
--selinuxを付けるとバックアップの各ファイルに設定されている SELinux のコンテキスト( SELinux
ポリシー )も一緒にバックアップされ るので復元先でも各ファイルは、バックアップ元と同じ ト
SELinux のコンテキスになります。
なお、解凍先でコマンド semanage fcontext -l -C でポリシーの設定内容を見ても何の表示もありま
せん。
このサーバ 機では、何も設定して無い為です。但し、httpd-2.4.XX でバックアップした HTMLファイ
ルを httpd-2.4.6 の HTMLファイルとして解凍しても SELinux のコンテキスト等は、引継ぎされませ
んので再設定が必要です。

  /bin/tar --selinux -zcvf ○○○○.tar.gz △△△△

  △△△△ : バックアップとして、まとめたいファイルを指定。複数ある時には、半角スペースを入
             れて続けて指定します。具体的には、下記のようにします。

        例   BackUP_Dir="/var/html/www/home_page"
             BackUP_Dir="${BackUP_Dir} /home/miyasaka/home_page_date"
                         ・            ↑ 半角スペースを入れる事  ○○○○ : 圧縮後のファイル名を指定。○○○○の前に保存先ディレクトリを指定します。
        例   /home/BackUP_Dir/back_www_data20180225.tar.gz ${BackUP_Dir}  バックアップは、
             毎日行うので日付を入れておくと良いと思います。

---------------------------------------------------------------------------------

※ semanage fcontext と restorecon オプションの説明 ※

semanage fcontext -a -t    <----- ポリシーの宣言

「-a」オプションを指定して、コンテキストの設定の追加を行うようにしています。
「-t」オプションで、タイプ「httpd_sys_script_exec_t」のコンテキストを設定するようにしてい
 ます。
 ディレクトリの指定は、正規表現を用いる。
 例 "/www(/.*)?" : ディレクトリ /www を指定  「-d」オプションで、ポリシーの削除を指定します。

restorecon -vF             <----- 強制的にポリシーを恒久的に設定する。

「-R」オプションを指定して、ディレクトリの下層にもコンテキストの設定が行われるようにします。
      単独ファイル時には、宣言しない。
「-v」オプションを指定して、コンテキストの変更内容がコマンド実行結果に表示されるようにしま
 す。 
「/var/www/……/」は、設定対象のディレクトリになります。
「-F」オプションを指定して、強制的に変更を適用します。指定しないと変わらない時があるので指
 定します。

semanage fcontext -l -C    <----- 自分で設定したポリシーの設定内容を見る


=================================================================================
  10-3. nghttp2 を使用して SSL プロトコル HTTP/1.1, HTTP/2 対応の設定
================================================================================= 

  ※※※ 設定の前提条件 ※※※

デフォルトでインストール済のパッケージ nghttp2 のバージョンは、httpd の configure の時点で
バージョンが、古いと怒られるので 、最新バージョン( nghttp2-1.39.2 )をダウンロードして使用
します。
openssl は、デフォルトでインストール済のパッケージを使用します。本当は、最新版の openssl 
を使用したいのですが、新規にいストールするとその後の Linux の動作( レスポンス )が極端に悪
くなるので諦めました。

※※※ 注意事項 ※※※

下記の設定で使用している www.smiyasaka.comsmiyasaka.com は、私のドメイン名です。
コマンドをコピーする時には、あなたのドメインに変更して使用してください。

1. 無償の Let's Encrypt の認証鍵を使用しますが、CentOS 8.0 では、サポートされているらしい
   のですが、私のスキルでは、まだ、解明できてないので、私のサーバ機で取得ている「 認証鍵の
   証明 書」を使用して設定します。
   Let's Encrypt の認証鍵データは、私のサーバ機で取得しているデータを使用して動作確認をし
   ます。

   2019年10現在 certbot-auto を使用してインストール・設定をすることは、わかりました。
   実際のテストは、私のドメインでアクセスできるサーバ機でしないといけないので、時期を見てテ
   ストしてみたいです。
   CentOS 7 のサポート終了が、2024年 6月 30日 なので、CentOS 8 への移行は、まだ先になりそう
   です。

2. HTTP/2 のパッケージ nghttp2 をインストールする。
   ソースパッケージは、下記 URL から、最新バージョンをダウンロードします。

  https://github.com/tatsuhiro-t/nghttp2/releases/

    2019年 11 月 現在、
    nghttp2 のパージョンは、1.40.0 に成っています。


  〇 nghttp2 のソースからのインストール

    openssl は、デフォルテでインストールされているパッケージ( openssl-1.1.1-8.el8.x86_64 )
    を使用します。

    cd /usr/local/src; \
    tar xvfz nghttp2-1.40.0.tar.gz; \
    cd nghttp2-1.40.0/; \
    ./configure

    コンパイル後下記の様に表示するか確認してください。

                 ( 上記省略 )
        Test:
          CUnit:          no (CFLAGS='' LIBS='')
          Failmalloc:     yes
        Libs:
          OpenSSL:        yes (CFLAGS=' ' LIBS='-lssl -lcrypto  ')  <----  特にここが yes
                                                                           に成っている事。
          Libxml2:        yes (CFLAGS='' LIBS='-lxml2  ')
          Libev:          no (CFLAGS='' LIBS='')
          Libc-ares       yes (CFLAGS=' ' LIBS='-lcares  ')
          Libevent(SSL):  no (CFLAGS='' LIBS='')
          Jansson:        no (CFLAGS='' LIBS='')
          Jemalloc:       no (LIBS='')
          Zlib:           yes (CFLAGS=' ' LIBS='-lz  ')
          Systemd:        yes (CFLAGS=' ' LIBS='-lsystemd  ')
                 ( 下記 16 行省略 )

    OK なら、インストールします。

    make && make install

    CentOS に /usr/local/lib の [ 共有ライブラリ(.so) ] を参照させる為に下記操作を
    します。
    必要なライブラリをシステムに認識させるには/etc/ld.so.confに/usr/local/libを追記し、
    ルート権限で ldconfig を実行します。

    echo /usr/local/lib >> /etc/ld.so.conf; \
    ldconfig            <-------  設定ファイルを反映させる。

※※ 参考情報 ※※ 

 上記のパス反映を忘れると、httpd エラーチェックで libnghttp2.so が参照できない旨のエラーが
 出ます。

---------------------------------------------------------------------------------

3. httpd-2.4.41 の再インストール

   プロトコル HTTP/2 対応化のための  mod_http2.so の組込は、個別のインストールでなく、再
   インストールで対応します。

   @ 下記コマンドでインストールしている apache2 を削除します。

   systemctl stop apache2; \
   systemctl disable apache2; \
   rm -rf /usr/local/apache2; \
   rm -rf /usr/local/src/httpd-2.4.41

   A mod_http2.so を追加する為の再インストール

    [省略]  詳細は、10-1 項を参照してください。

    cd /usr/local/src/httpd-2.4.41;\
    ./configure \
    --enable-ssl \
    --enable-ssl-staticlib-deps \       <-------  OS 標準の openssl のライブラリが、動的に
                                                   リンクされることを防ぐため。つまり、
                                                   Apacheの実行ファイルと一緒に SSL 
                                                   モジュールを組み込む為です。
    --enable-http2 \                    <-------  mod_http2.so の追加
    -with-included-apr \
    --enable-rewrite \
    --enable-so \
    --enable-deflate=shared

---------------------------------------------------------------------------------
  以下の様に、SSL, http2 がビルドされます。
---------------------------------------------------------------------------------
         ( 途中省略 )
    creating modules/slotmem/Makefile
    creating modules/ssl/Makefile
    creating modules/test/Makefile
    creating os/unix/Makefile
    creating modules/http2/Makefile
    creating modules/md/Makefile

          ( 途中省略 )

    config.status:     creating docs/conf/extra/httpd-multilang-errordoc.conf
    config.status:     creating docs/conf/extra/httpd-ssl.conf
    config.status:     creating docs/conf/extra/httpd-userdir.conf
    config.status:     creating docs/conf/extra/httpd-vhosts.conf

          ( 途中省略 )

    configure: summary of build options:

        Server Version: 2.4.41
        Install prefix: /usr/local/apache2
        C compiler:     gcc -std=gnu99
        CFLAGS:          -g -O2 -pthread
        CPPFLAGS:        -DLINUX -D_REENTRANT -D_GNU_SOURCE
        LDFLAGS:
        LIBS:
        C preprocessor: gcc -E

---------------------------------------------------------------------------------
   〇 httpd-2.4.41 の make と install を実行する。

   make && make install

---------------------------------------------------------------------------------

4. httpd-2.4.41 の SSL の設定 httpd-ssl.confファイルの編集

   DocumentRoot、ServerName、ErrorLog、CustomLog 等は、httpd.conf と同じ設定をします。

   原本は、保存しておきます。 以下設定で SSL プロトコル TLS1.3 が、有効になりました。
   ( 「 SSL Server Test 」のサイトで確認できました。下記 11 項の 写真。)

   cp /usr/local/apache2/conf/extra/httpd-ssl.conf /home/miyasaka/httpd-ssl.conf.bak

   vi /usr/local/apache2/conf/extra/httpd-ssl.conf

---------------------------------------------------------------------------------

    52  SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES
           ↓    ↓
        SSLCipherSuite "TLS_AES_256_GCM_SHA384 \
        TLS_CHACHA20_POLY1305_SHA256 \        <-------  \ マークは、行の継続指示記号です。
        ECDHE-RSA-AES128-GCM-SHA256 \
        ECDHE-RSA-AES256-GCM-SHA384 \
        ECDHE-RSA-AES256-SHA \
        ECDHE-RSA-AES256-SHA384 \
        DHE-RSA-AES256-GCM-SHA384 \
        DHE-RSA-AES256-SHA \
        DHE-RSA-AES256-SHA256"

    60  SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES
           ↓    ↓
        SSLProxyCipherSuite "TLS_AES_256_GCM_SHA384 \
        TLS_CHACHA20_POLY1305_SHA256 \
        ECDHE-RSA-AES128-GCM-SHA256 \
        ECDHE-RSA-AES256-GCM-SHA384 \
        ECDHE-RSA-AES256-SHA \
        ECDHE-RSA-AES256-SHA384 \
        DHE-RSA-AES256-GCM-SHA384 \
        DHE-RSA-AES256-SHA \
        DHE-RSA-AES256-SHA256"

    79  SSLProtocol all -SSLv3
           ↓    ↓
        SSLProtocol -all +TLSv1.2 +TLSv1.31

        SSL プロトコル のすべてを無効にして、TLSv1.2 ・TLS1.3 を有効にする。

    80  SSLProxyProtocol all -SSLv3
           ↓    ↓
        SSLProxyProtocol -all +TLSv1.2 +TLSv1.3

        SSL プロトコル のすべてを無効にして、TLSv1.2 ・TLS1.3 を有効にする。

   124  DocumentRoot "/usr/local/apache2/htdocs"
           ↓    ↓
        DocumentRoot "/var/www/html/www.smiyasaka.com"

   125  ServerName www.example.com:443
           ↓    ↓
        ServerName (サーバ機のホスト名):443 
     
   126  ServerAdmin you@example.com
           ↓    ↓
        ServerAdmin (メールアドレス)

   127  ErrorLog "/usr/local/apache2/logs/error_log"
           ↓    ↓
        ErrorLog "| /usr/local/apache2/bin/rotatelogs /usr/local/apache2/logs/
                  (長いので二行表示です)   www.smiyasaka.com_error_log_%Y%m%d 86400 540"

    132行目 SSLEngine on の次の行に下記を追加

    #----  HTTP/1.1 HTTP/2 add ----
    <IfModule http2_module>
          ProtocolsHonorOrder On
          Protocols h2 http/1.1
    </IfModule>

    h2 とは、TLS暗号化接続によるHTTP/2プロトコル
    http/1.1 とは、従来のHTTP/1.1プロトコル。   非暗号化接続および、TLS(SSL)暗号化接続の
    両方で利用可

   133行目に以下を追加する

      Header set Strict-Transport-Security "max-age=315360000;includeSubDomains"
      Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
      Header always set X-Frame-Options SAMEORIGIN


     上記の設定は、HSTS (HTTP Strict Transport Security) の導入・常時 SSL 化になります。
                   
     これは、HTTPで接続した際に、強制的にHTTPSへリダイレクトし、以降のそのドメインへの
     接続はすべてHTTPSとする機能です。       315,360,000 秒 というのは 3,650 日間 (10年間)

   144  SSLCertificateFile "/usr/local/apache2/conf/server.crt"
           ↓    ↓
        # 証明書を指定する
        SSLCertificateFile "/etc/letsencrypt/live/www.smiyasaka.com/cert.pem"

   154  SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"
           ↓    ↓
        # 秘密鍵を指定する
        SSLCertificateKeyFile "/etc/letsencrypt/live/www.smiyasaka.com/privkey.pem"

   165  #SSLCertificateChainFile "/usr/local/apache2/conf/server-ca.crt"
           ↓    ↓
        # 取得した中間証明書を指定
        SSLCertificateChainFile /etc/letsencrypt/live/www.smiyasaka.com/chain.pem

   249  <Files ~ "\.(cgi|shtml|phtml|php)$">
           ↓    ↓
        <FilesMatch "\.(cgi|shtml|html)$"$gt;
 
   252  <Directory "/var/www/cgi-bin"> 〜 <Directory> までコメントアウトします。
   
   287  #CustomLog "/usr/local/apache2/logs/ssl_request_log" \
   288  #          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
           ↓    ↓
        Include conf/extra/httpd-log.conf         <------- ログ条件設定用 conf

       ( httpd-log.conf の作成方法は、[ここをクリック]してください。)

        #
        Include conf/extra/httpd-zgip.conf        <-------  新規に作成します。
        #--------------------------------------------------
        # セキュリティ対策のため、最終行に追加しておきます。
        # サーバ署名(バージョンとサーバ名)のOFF
        ServerSignature Off
        #

        ※※     ここからは、SSL でも圧縮処理をしたい時に追加してください。※※

    〇 httpd-zgip.conf の新規作成 ( 設定が長いので別 conf ファイルにしています。)

       空の httpd-zgip.conf ファイルを作成します。

       touch /usr/local/apache2/conf/extra/httpd-zgip.conf

       vi コマンドで下記モジュール( mod_deflate )の設定条件を書き込みます。

       vi /usr/local/apache2/conf/extra/httpd-zgip.conf

        <IfModule mod_deflate.c>
        #---------------------------------------------------------------
        # 転送データの圧縮設定(画像以外全て圧縮する)
        #            実際の圧縮率は、1 も 3 も大差ありません
        #---------------------------------------------------------------
        # 圧縮レベル 1 に設定
             DeflateCompressionLevel 1
        #
            # 全てを圧縮する設定
            SetOutputFilter DEFLATE
            #
            # gzip圧縮に対応していない古いブラウザを除外
            # Netscape 4.x has some problems...
        # 送信先ブラウザがNetscape 4.xの場合はtext/htmlのみ圧縮
            BrowserMatch ^Mozilla/4 gzip-only-text/html
            # Netscape 4.06-4.08 have some more problems
        # 送信先ブラウザがNetscape 4.06-4.08の場合は圧縮しない
            BrowserMatch ^Mozilla/4\.0[678] no-gzip
            # MSIE masquerades as Netscape, but it is fine
        # 送信先ブラウザがMSIEの場合は全て圧縮する
            BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
            #
            # 画像以外全て圧縮する
            # Don't compress images
            SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
            #
            # Make sure proxies don't deliver the wrong content
        # プロキシサーバーが圧縮未対応ブラウザへ圧縮ファイルを送信しないようにする
            Header append Vary User-Agent env=!dont-vary
        # html や css, js, javescript などは個別指定
            AddOutputFilterByType DEFLATE text/plain
            AddOutputFilterByType DEFLATE text/html
            AddOutputFilterByType DEFLATE text/xml
            AddOutputFilterByType DEFLATE text/css
            AddOutputFilterByType DEFLATE text/js
            AddOutputFilterByType DEFLATE text/javascript
            AddOutputFilterByType DEFLATE application/xhtml+xml
            AddOutputFilterByType DEFLATE application/xml
            AddOutputFilterByType DEFLATE application/rss+xml
            AddOutputFilterByType DEFLATE application/atom_xml
            AddOutputFilterByType DEFLATE application/js
            AddOutputFilterByType DEFLATE application/javascript
            AddOutputFilterByType DEFLATE application/x-javascript
            AddOutputFilterByType DEFLATE application/x-httpd-php
        #
          # 圧縮率の確認用ログ設定
          # 不要になったら、# で無効にしておく事。
          # Deflateが有効になっているか確認するログの出力
          #
          DeflateFilterNote Input instream
          DeflateFilterNote Output outstream
          DeflateFilterNote Ratio ratio
          LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%) %{User-agent}i' deflate
          CustomLog logs/deflate_log deflate
        </IfModule>

httpd-SSL.conf の編集を sed コマンドで一括編集をした時の sed コマンドのリスを公開しています。
興味のある方は、[ここをクリック]してください。別ページで表示します。
   ( sed コマンドをより理解するため無駄ですが挑戦してみました。)
   Linux の正規表現等が良く理解できました。( 自己満足 )
---------------------------------------------------------------------------------

5. httpd-2.4.41 httpd.conf 設定ファイルの SSL( h2 ) 追加設定

   なお、mod_deflate での圧縮設定部分は、削除して設定してください。

   10-1 項の設定が完了してから、下記4ヶ所の # を削除してコメント文解除する。

   vi /usr/local/apache2/conf/httpd.conf

   〇 mod_socache_shmcbを有効化する。

    88 #LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
                 ↓    ↓
       LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

      尚、mod_socache_shmcb.soは、httpdに含まれています。

   〇 mod_ssl.so の読み込みを行う。

   133 #LoadModule ssl_module modules/mod_ssl.so
                 ↓    ↓
       LoadModule ssl_module modules/mod_ssl.so

   〇 mod_http2.so を有効化するため、コメントアウトを解除します。

   134 #LoadModule http2_module modules/mod_http2.so
                 ↓    ↓
        LoadModule http2_module modules/mod_http2.so

   〇 https:// のアクセスを https:// に変換させる処理の追加。

   152 #LoadModule rewrite_module modules/mod_rewrite.so
                 ↓    ↓
        LoadModule rewrite_module modules/mod_rewrite.so

   〇 「httpd-ssl.conf」の読み込みを行う。

   494 #Include conf/extra/httpd-ssl.conf
                 ↓    ↓
        Include conf/extra/httpd-ssl.conf

    上記の操作を sed コマンドで一括処理してみました。

sed -i -e "/mod_socache_shmcb\.so/s/^#//
/mod_ssl\.so/s/^#//
/mod_http2\.so/s/^#//
/mod_rewrite\.so/s/^#//
/httpd-ssl\.conf/s/^#//" /usr/local/apache2/conf/httpd.conf

---------------------------------------------------------------------------------

6. http:// のアクセスを https:// に自動変換させる処理( 301リダイレクト )の追加

   .htaccess ファイルを作成し、下記コマンドを書込み、ドキュメントルート上に書込みます。

   --------------------------------------------------------------
   <IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteCond %{HTTPS} off
   RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
   </IfModule>
   --------------------------------------------------------------

---------------------------------------------------------------------------------

7. エラーのチェック

   /usr/local/apache2/bin/apachectl configtest

  「 Syntax OK 」と表示されればOKです。

---------------------------------------------------------------------------------

8. apache2.service の変更して reload を追加します。

   vi /usr/lib/systemd/system/apache2.service 
   ------------------------------------------------------
   [Unit]
   Description=httpd-2.4.41 daemon

   [Service]
   Type=forking
   ExecStart=/usr/local/apache2/bin/apachectl start
   ExecReload=/usr/local/apache2/bin/apachectl graceful <-------  安全な再起動を追加します。
   ExecStop=/usr/local/apache2/bin/apachectl stop

   [Install]
   WantedBy=multi-user.target
   -------------------------------------------------------

   systemctl start apache2    <-------  起動
  systemctl reload apache2   <-------  安全な再起動
   systemctl stop apache2     <-------  停止

---------------------------------------------------------------------------------

9. SELinux 対策  httpd からの秘密鍵の Read / Write を有効にする。

semanage fcontext -a -t httpd_sys_rw_content_t\
 "/etc/letsencrypt/live/www.smiyasaka.com(/.*)?"; \
restorecon -R -vF /etc/letsencrypt/live/www.smiyasaka.com/

           上記設定の確認

   ls -Z /etc/letsencrypt/live/www.smiyasaka.com/

---------------------------------------------------------------------------------

10. apache2 を起動して https://(サーバ機の LAN 内 IP アドレス)でアクセス

   systemctl start apache2

   Windows PC の Web で、サーバ機の LAN 内 IP アドレスを使いアクセスする。

   (サーバ機の LAN 内 IP アドレス)
   
 この結果、セキュリティの警告が表示すれば OK です。
 アクセス先の URL が、 https://(サーバ機の LAN 内 IP アドレス)に成っている事を確認してくだ
 さい。

 自分のホームページの表示は、セキュリティの警告画面で [ リスクを理解して続行 ]等をクリック
 して表示させます。
 私の PC の場合、セキュリティアプリは、カスペルスキーですが、数回 [ 続行 ]をクリックしない
 と表示しませんで した。( IPアドレスでの証明を取っていないためだと思います。)

---------------------------------------------------------------------------------

11. 証明書の更新

    CentOS 8.0 のバージョンでは、まだ、確認していないのでわかり次第 更新いたします。

------------------------------------------------------------------------------------------

12. エラーのチェック

   /usr/local/apache2/bin/apachectl configtest

  「 Syntax OK 」と表示されればOKです。

---------------------------------------------------------------------------------

13. apache2 を起動して https://(サーバ機の LAN 内 IP アドレス)でアクセス

   systemctl start apache2

   Windows PC の Web で、サーバ機の LAN 内 IP アドレスを使いアクセスする。

   https://(サーバ機の LAN 内 IP アドレス)
   
   この結果、セキュリティの警告が表示すれば OK です。

   プロトコルの検証は、IE で検証するとよくわかります。
   ホームページが表示している状態で 画面上で[ 右クリック ] ---> [ 要素の検査(L) ] をクリッ
   ク、しばらくすると「 (IP アドレス) - F12 開発者ツール 」が表示します。次に上部メニュー
   [ ネットワーク ]をクリックします。
   名前/パス の隣にプロトコルの欄があり、そこが HTTP/2 HTTP2 h2 とかに成っていれば成功です。
   なお、HTTPS は、プロトコル HTTP/1.1 です。
   他の Web サイトでの検証方法も同様にして確認できますが、google と firefox では、[ ネット
   ワーク]の表示の項目欄で [右クリックからプロトコルを選択] が必要です。

---------------------------------------------------------------------------------
※ 追伸 ※ 
    この方法での構築が良いのかの判定は、私のスキルでは出来ませんすが、まずは動作したので紹
    介しています。

---------------------------------------------------------------------------------

14. セキュリティアプリで LAN 内 IP アドレスでのサーバへのアクセスがブロックされる時の対策

私の PC では、カスペルスキーを使用していますが、 LAN 内 IP アドレスでのアクセスがブロック
され表示出来なくなってしまいました。( Windows edge, IE11, firefox, Safari でブロックされ
ていました。)その対策として、カスペルスキーのセキュリティ条件を下記の手順で変更しました。
その結果、[ このサイトは、安全ではありません ]の画面の下にある [ 詳細 ] ---> [ webペ
ージへ移動 ]のクリックで見られるようになりました。

セキュリティ設定の変更手順

  カスペルスキーのトップ画面の左下にある [ 設定マーク (ギヤマーク) ] ---> [ 詳細 ] ---> 
[ ネットワーク設定 ]をクリックして、[ 暗号化された接続のスキャン ] の設定を [ 暗号化された
接続のスキャンしない ] ---> [ 続行 ]  ( 変更の確認 )に変更してカスペルスキーを閉じます。

---------------------------------------------------------------------------------

=================================================================================
  10-4. 圧縮パッケージ Brotli を使用しての圧縮処理の追加
================================================================================= 

圧縮パッケージ Brotli を使用しての圧縮処理の追加をしてみました。この追加処理は、10-3 項まで
の構築が終了している事が前提となります。

  @ 圧縮アルゴリズムフォーマット( br )パッケージ Brotli のインストール

 openssl, nghttp2 の最新版をインストール・ 設定ファイルを反映させてから、Brotliのインストー
 ルをしてください。

     〇 Brotli のコンパイルに cmake を使いますので、dnf でインストールしておきます。

        dnf -y install cmake

     〇 Brotli のインストール

        cd /usr/local/src; \
        tar xvzf brotli-1.0.7.tar.gz; \
        cd brotli-1.0.7/; \
        mkdir out && cd out; \
        ../configure-cmake

        上記終了したら、 make  --->  make test ---> make install を実行します。

     〇 Brotliのライブラリが「/usr/local/lib」以下にインストールされるので、ライブラリの
        パスに追加しておきます。これを忘れると動作しませんので注意です。

        echo /usr/local/lib > /etc/ld.so.conf.d/usr-local-lib.conf; \
        ldconfig

   A インストール済の httpd-2.4.41 を削除します。

        systemctl stop apache2; \
        systemctl disable apache2; \
        rm -rf /usr/local/apache2; \
        rm -rf /usr/local/src/httpd-2.4.41

   B httpd-2.4.41 の再インストール

        cd /usr/local/src; \
        tar xzvf httpd-2.4.41.tar.gz; \
        chown -R root. httpd-2.4.41; \
        cd ./httpd-2.4.41/srclib/

        APRとAPR-Utilのソースコードを
        Apacheのソースコード内 httpd-2.4.41/srclib/ に展開する。

        tar xzvf /usr/local/src/apr-1.7.0.tar.gz; \
        chown -R root. apr-1.7.0/; \
        mv apr-1.7.0 apr; \
        tar xzvf /usr/local/src/apr-util-1.6.1.tar.gz; \
        chown -R root. apr-util-1.6.1/; \
        mv apr-util-1.6.1/ apr-util

        SSL と HTTP/2、Brotli モジュールを有効にしてインストールします。

        cd /usr/local/src/httpd-2.4.41;\
        ./configure \
        --enable-ssl \
        --enable-ssl-staticlib-deps \
        --enable-http2 \
        --enable-brotli \                <-------  Brotli の組み込み
        --with-brotli=/usr/local/lib \   <-------  Brotli のパス
        --with-included-apr \
        --enable-rewrite \
        --enable-so

        上記終了したら、 make  ---> make install を実行します。

   C  /usr/local/apache2/conf/httpd.conf への設定の追加

      httpd.conf 編集後の全文は、[ここをクリック]してください。

      106行目の # を削除してコメント文解除する。

      #LoadModule brotli_module modules/mod_brotli.so

      288 行目あたり   圧縮処理を無効にします。

      Include conf/extra/httpd-zgip.conf 
               ↓    ↓
      #nclude conf/extra/httpd-zgip.conf

   D  /usr/local/apache2/conf/extra/httpd-ssl.conf への設定の追加

       httpd-ssl.conf 編集後の全文は、[ここをクリック]してくだい。

       132行目 SSLEngine on の後に下記を追加する。

       Include conf/extra/httpd-Brotli.conf        <-------  新規に作成します。

       Include conf/extra/httpd-zgip.conf は、コメントアウトしといてください。

    〇 httpd-Brotli.conf の新規作成 ( 設定が長いので別 conf ファイルにしています。)

       空の httpd-Brotli.conf ファイルを作成します。

       touch /usr/local/apache2/conf/extra/httpd-Brotli.conf

       vi コマンドで下記モジュール( brotli_module )の設定条件を書き込みます。

       vi /usr/local/apache2/conf/extra/httpd-Brotli.conf

  下記の設定で html、js、css ファイルが圧縮アルゴリズムフォーマット( br )で圧縮されます。

<ifModule brotli_module>
      #---------------------------------------------------
      #                 Brotli 圧縮設定
      #---------------------------------------------------
      #
      ## 圧縮レベル: 0-11 (default: 11)
      BrotliCompressionQuality 5
      #
      ## BrotliWindowSize: 10-24 (default: 22)
      BrotliCompressionWindow 18
      #
      AddOutputFilterByType BROTLI_COMPRESS text/html text/plain\
        text/css text/xml text/javascript\
        application/json application/javascript\
        application/x-javascript\
        application/xml\
        application/xml+rss
      #
      SetOutputFilter BROTLI_COMPRESS
      SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-brotli
      #
      BrotliFilterNote Input instream
      BrotliFilterNote Output outstream
      BrotliFilterNote Ratio ratio
      #
      # 圧縮率の確認用ログ設定
      # 不要になったら、# で無効にしておく事。
      # BROTLI_COMPRESSが有効になっているか確認するログの出力
      #
      LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%) %{User-agent}i' brotli
      CustomLog "logs/Brotil_access_log" brotli
      #---------------------------------------------------
</ifModule brotli_module>

   E apache を起動します。

       systemctl start apache2

   F apache を起動後、下記コマンドで組み込みモジュールを確認してみてください。

      /usr/local/apache2/bin/apachectl -M

        (省略)
      deflate_module (shared)
      brotli_module (shared)   <------- Brotli モジュール
      mime_module (shared)
       (省略)
      ssl_module (shared)
      http2_module (shared)
       (省略)

   G 圧縮ログでの圧縮率の確認

       圧縮結果のログデータは、管理者か゜root の為、ffftp でダウンロードできないので、ユー
       ザー権限に変更します。

       chown -R miyasaka:miyasaka /usr/local/apache2/logs/Brotil_access_log; \
       chmod -R 666 /usr/local/apache2/logs/Brotil_access_log

       保存場所  ---->  /usr/local/apache2/logs/Brotil_access_log

       圧縮した時の圧縮ログデータは、このようになりました。( notepad 等で見ます。)
     (出力バイト数)↓ ↓(入力)↓( 元データに対するデータの大きさ[ % ] ) を意味します。
      "GET / HTTP/2.0" 5781/31172 (18%) Mozilla/5.0 (Windows NT 10.0) ……………………

      圧縮率の計算は、( BrotliCompressionQuality 5 の時 )
                {(入力バイト数)-(出力バイト数)}÷(入力バイト数)×100 %になるので
      上記1行目の場合、( 31172 - 5781 ) ÷ 31172 × 100 = 81.45 % になります。

      下記は、試しに圧縮レベルを 1 〜 5 に変化した時の圧縮率の結果です。

      BrotliCompressionQuality 1  ----> "GET / HTTP/2.0" 12619/31172 (40%)  …………………

      BrotliCompressionQuality 2  ----> "GET / HTTP/2.0" 6759/31172 (21%)  …………………

      BrotliCompressionQuality 3  ----> "GET / HTTP/2.0" 6613/31172 (21%)  …………………

      BrotliCompressionQuality 4  ----> "GET / HTTP/2.0" 6214/31172 (19%)  …………………

      BrotliCompressionQuality 5  ----> "GET / HTTP/2.0" 5781/31172 (18%)  …………………

   H web での圧縮処理の確認
 web ページでホームページを表示し、画面上右ク
 リックで[ 要素の検査 ]を選択 ---> 表示
 画面のメニューバーの[ ネットワーク ]を選
 択する。次にファイル一覧の jpg, png 以外の
 〇〇〇〇.html, 〇〇〇〇.js, 〇〇〇〇.css
 等のファイルの名前をクリックすると画面右側に
 右の写真のような情報が取得できます。
 
 -------------------------------------------
 content-encoding:br    

 br は、Brotli の圧縮アルゴリズムフォーマット

 content-type:text/html

 圧縮対象ファイル html
 -------------------------------------------

応答ヘッダーの情報
B
---------------------------------------------------------------------------------
Brotliを使用時に圧縮されたかの確認ができるwebサイトが存在していましたので紹介します。
 下記 URL をクリックしてあなたのホームページの URL を入れるだけです。
             tools.paulcalvano.com

  私のドメインでアクセスした結果は、下記の通りです。  入力するドメインには、必ず、
  https:// を付 けてください。  下記でわかる通り、圧縮率は、80%ほどになっているようです。

             B

=================================================================================
  11. fswebcom-20100622.tar.gz のインストールと定点カメラの設定
=================================================================================

  fswebcam-20100622 のバージョンをインストールしすが、タイトル文字が正しく表示しませんが
  使用します。

  fswebcomを使った定点カメラの設定方法については、定点カメラの実現方法のページで詳細に
  解説していますので参考にしてください。

  ○ fswebcam-20100622.tar.gz のインストール手順

   

  @ fswebcam-20100622 の展開と configure

     tar zxvf fswebcam-20100622.tar.gz;\
     cd ./fswebcam-20100622; \
     ./configure --prefix=/usr

     以下で、終われば、OK 
   -------------------------------------------------------
     checking for working mmap... yes
     checking for gdImageCreateTrueColor in -lgd... yes
     checking for gdImageStringFT in -lgd... yes
     checking for gdImageJpeg in -lgd... yes
     checking for gdImagePngEx in -lgd... yes

        Buffer type ........... 16 bit
        PNG support ........... yes
        JPEG support .......... yes
        Freetype 2.x support .. yes
        V4L1 support .......... yes
        V4L2 support .......... yes

     configure: creating ./config.status
     config.status: creating Makefile
     config.status: creating config.h

  A make と インストール

     make && make install

    make では、下記の様なエラーがでますがそのままインストールします。
    ------------------------------------------------------
cc -g -O2 -DHAVE_CONFIG_H -c src_v4l2.c -o src_v4l2.o
src_v4l2.c: 関数 'src_v4l2_show_control' 内:
src_v4l2.c:338:32: 警告: 'strncat' specified bound 3 equals source length 
     [-Wstringop-overflow=]
     if(m < queryctrl->maximum) strncat(t, " | ", 3);

    
 以下で、終われば、インストールOK です。
    ------------------------------------------------------
     mkdir -p /usr/bin
     mkdir -p /usr/share/man/man1
     install -m 755 fswebcam /usr/bin
     install -m 644 fswebcam.1.gz /usr/share/man/man1

  B Logicool C270 の UVC 対応 USB カメラの輝度・明るさの調整は、下記の様に設定しています。

     -s Brightness=65%
     -s Contrast=15%        <----  明るさは、ここまで下げないと綺麗な画像になりません。

  C Logicool C270 のカメラが認識された時の認識データは、 CentOS 7.0 では

         cat /proc/bus/usb/devices ----> cat /sys/kernel/debug/usb/devices

     に変わっていますので、変更する必要があります。

     cat /sys/kernel/debug/usb/devices で下記の様になります。

     S:  SerialNumber=E981E810
(E981E810 は、USBカメラのシリアル番号なので同一機種でも、カメラを入れ替えれば変わります。)

  D 私が気に入ったフォントが無いので、別バージョンの Linux でダウンロードしたフォントデー
     タをホームページのエリヤに保存して使用しています。
     私が使用しているフォントは、VL-Gothic-Regular.ttfです。( 下記が書体の見本です。)
     必要な方は、http://www.smiyasaka.com/VL-Gothic-Regular.ttf でダウンロード出来ますの
     で使用してください。
tenki and time
                                 
 
 

=================================================================================
  12. clamav-0.101.4-1 ( アンチウィルスソフト )のインストール [ 2019.10.25 現在 ]
=================================================================================
○ clamav-0.101.4-1 のインストール・設定手順

 2019年 10月現在 警告の出ない最新版です。
 freshclam の自動実行は、/etc/cron.d/clamav-update で行わせ、clamscan の自動実行は、実行
 用のプログラムを作成して /etc/cron.daily/ に登録し行わせる設定にしています。 ( デーモン
 動作をさせない設定です。)

 @ dnf でインストールします。

    cd /usr/local/src; \

    dnf --enablerepo=epel -y install clamav clamav-update

    インストール済み:
      clamav-0.101.4-1.el8.x86_64              clamav-update-0.101.4-1.el8.x86_64
      clamav-filesystem-0.101.4-1.el8.noarch   clamav-lib-0.101.4-1.el8.x86_64

    完了しました!

   〇 ダウンロードパッケージのインストール

      下記順序でインストールします。

      cd /usr/local/src; \
      rpm -Uvh clamav-filesystem-0.101.4-1.el8.noarch.rpm; \
      rpm -Uvh clamav-data-0.101.4-1.el8.noarch.rpm; \
      rpm -Uvh clamav-lib-0.101.4-1.el8.x86_64.rpm; \
      rpm -Uvh clamav-update-0.101.4-1.el8.x86_64.rpm; \
      rpm -Uvh clamav-0.101.4-1.el8.x86_64.rpm

 A ユーザ : clamupdate とグループ : clamupdate は、上記のインストールで作成されます。
    更にユーザ(clamav)とグループ(clamav)が必要なので作成しておきます。???

    グループ名 clamav の作成

    groupadd clamav   <----  グループ clamav 作成

    ユーザー clamav の作成

    ログインシェルは、/bin/false、コメントは、"Clamav AntiVirus"

    useradd -g clamav -s /bin/false -c "Clamav AntiVirus" clamav

    -g : 所属するグループ名指定   -c : コメント設定( 任意設定 )
    -s : ユーザーのログインシェルを指定します。
         /bin/false : ログインされても何もせずに終了します。


  B clamav のグループ名とユーザ名を確認しておきます。

     グループの確認(私の場合の表示例です。)

     grep clam /etc/group

     clamupdate:x:985:
     virusgroup:x:984:clamupdate
     clamav:x:1001:

     ユーザーの確認(私の場合の表示例です。)

     grep clam /etc/passwd

     clamupdate:x:988:985:Clamav database update user:/var/lib/clamav:/sbin/nologin
     clamav:x:1001:1001:Clamav AntiVirus:/home/clamav:/bin/false

 C freshclam 設定ファイル編集

     cp /etc/freshclam.conf /home/miyasaka/freshclam.conf.bak; \
     sed -i -e "s/#DatabaseDirectory/DatabaseDirectory/g
     s/#UpdateLogFile/UpdateLogFile/g 
     s/#DatabaseOwner /DatabaseOwner /g " /etc/freshclam.conf

    vi /etc/freshclam.conf
    :13 で13行目へジャンプ

   以下コメントを取る。

   13  DatabaseDirectory /var/lib/clamav     <---- ウィルスデータベースの保存先

   17  UpdateLogFile /var/log/freshclam.log  <---- ログデータの保存先

   56  DatabaseOwner clamupdate              <---- ウィルスデータベースの所有者

 D freshclam_sleep で初期値 3時間毎に自動更新させる設定に成っているので変更します。

    私の場合、 3時間毎は、多いので 6時間毎に変更しています。

    vi /etc/cron.d/clamav-update

    ## It is ok to execute it as root; freshclam drops privileges and becomes
    ## user 'clamav' as soon as possible
    0  */3 * * * root /usr/share/clamav/freshclam-sleep
        ↑
        ここを 6 に変更します。

 E ウィルス定義ファイルの最新化
    下記コマンドを実行。

    freshclam

    ※ 定義ファイルのダウロードが極端に遅い時には、一度 [Ctrl]+c で強制終了させ再度実行
       させて見てください。

 F ウイルスチェックの実行(テスト)
    下記コマンドを実行。

    clamscan

    実行結果の表示例

    /root/.bash_logout: OK
    /root/.bash_profile: OK
    /root/.bashrc: OK
    /root/.cshrc: OK
    /root/.tcshrc: OK
    /root/anaconda-ks.cfg: OK
    /root/.bash_history: OK

    ----------- SCAN SUMMARY -----------
    Known viruses: 6509739
    Engine version: 0.101.4
    Scanned directories: 1
    Scanned files: 29
    Infected files: 0  <----  検知したウイルスの数。
    Data scanned: 0.07 MB
    Data read: 0.04 MB (ratio 1.90:1)
    Time: 109.028 sec (1 m 49 s)

 ※ 参考情報 ※ httpd のインストール時に一緒にインストールする apr-util は、初回のウィ
 ルスチェック時にウィルスありとして検知・削除されますので注意してください。

 検知されたウィルスのリスト

  /usr/local/src/apr-util-1.5.4.tar.gz: Xml.Exploit.CVE_2013_3860-3 FOUND
  /usr/local/src/httpd-2.4.23/srclib/apr-util/test/data/billion-laughs.xml: 
                                                       Xml.Exploit.CVE_2013_3860-3 FOUND

 G ウィルススキャン定時実行スクリプト作成

    作成方法は、下記リンクの「アンチウィルスソフト導入(Clam AntiVirus)」を参照してください。

    ※ 参考にしたサイト   アンチウィルスソフト導入(Clam AntiVirus)


    下記スクリプトは、上記サイトの例を参考にしてチョット手を入れてみました。

   [ ウィルススキャンを定期的に実行させるためのスクリプトの作成 ] の詳細は、
                                                             [ここをクリック]してください。

 H freshclam の更新ログの管理の変更

    freshclam の更新ログ閲覧は、下記コマンドで出来ます。
    ( 今日の更新ログ閲覧には、年月日は不要です。)

    cat /var/log/freshclam.log-yyyymmdd   <----  yyyy : 西暦 mm : 月 dd : 日

    コマンド例  cat /var/log/freshclam.log-20160922

    freshclam の更新ログローテーションは、デフォルトでは、一月毎になっているので変更します。

    vi /etc/logrotate.d/clamav-update

    cp /etc/logrotate.d/clamav-update /home/miyasaka/clamav-update.bak; \
    sed -i -e "s/monthly/daily/g
    3i\        missingok\n\
            rotate 5" /etc/logrotate.d/clamav-update

    デフォルト値は、下記の通りなので

    /var/log/freshclam.log {
        monthly          <----  毎月ログローテーションする。
        notifempty       <----  ログファイルが空ならローテーションしない。
    }

        ↓  ↓  ↓     貴方の環境に合わせて変更します。私の場合、5日にしています。

    /var/log/freshclam.log {
        daily      <----  毎日ログローテーションする。
        missingok  <----  ログファイルが存在しなくてもエラーを出さない。
        rotate 5   <----  5日分を保存します。
        notifempty <----  ログファイルが空ならローテーションしない。
    }

 I ClamAV のSELinuxのポリシーの設定

    設定は、setsebool コマンドで下記の様に行います。
    この設定で ClamAV は、ディスク上のすべてのファイルにアクセスし、データ定義ファイルの
    更新ができるようになります。

    setsebool -P antivirus_can_scan_system 1;\
    setsebool -P antivirus_use_jit 1

    設定確認コマンド

    getsebool -a | grep antivirus

    antivirus_can_scan_system --> on
    antivirus_use_jit --> on

---------------------------------------------------------------------------------dnf を使用して ClamAV のバージョンアップする手順

    ClamAVは EPELレポジトリにあるので、EPELレポジトリがインストールされている事が前提です。

    @ dnf で ClamAV をアップデートします。

       dnf -y --enablerepo=epel update clamav

    A バージョンを確認してみます。

      下記コマンドで確認します。

      rpm -qa | grep clam


=================================================================================
  13. chkrootkitの導入
=================================================================================
  @ chkrootkit のインストール
  
     make で下記エラーでるので不足パッケージ( glibc-static )をインストールしておきます。
     ---------------------------------------------------
     /bin/ld: -lc が見つかりません
     collect2: エラー: ld はステータス 1 で終了しました
     make: *** [strings-static] エラー 1。
     ---------------------------------------------------

     ここは、依存性が多いので yum でインストールします。

     cd /usr/local/src/; \
     dnf -y install glibc-static

  A 今までの設定では、CentOS 8.0 では、mailのコマンドが使えないのでインストールします。

     インストール前に コマンド rpm -qa | grep mailx が有るか確認してください。

     dnf install mailx

     インストール済み:
       mailx-12.5-29.el8.x86_64

     完了しました!

  B chkrootkit のインストール

     cd /usr/local/src; \
     tar zxvf chkrootkit.tar.gz; \
     cd chkrootkit-0.53; \    <----  > chkrootkit-0.5X の X は、確認する事
     mkdir -p /root/bin; \
     mv ./chkrootkit-0.53/chkrootkit /root/bin 

  C 起動用シェルスクリプトの作成

     cd /usr/local/src; \
     vi rootkit.sh
  -----------------------------------------------------------
  #!/bin/sh
  #
  LOG='/var/log/chkrootkit.log'

  # chkrootkit実行
  /roor/bin/chkrootkit > ${LOG}

  if [ ! -z "$(grep INFECTED$ ${LOG})" ]; then    <----  改ざんがあったかチェック

      #  改ざんがあった時の root 宛メール
      #  upstartパッケージ更新時のSuckit誤検知対策
      if ! rpm -V `rpm -qf /sbin/init` >/dev/null 2>&1;
        then
          cat "$(grep INFECTED$ ${LOG})" | mail -s "rootkit discovery" root
      fi
  else
       # 改ざんが無かった時の root 宛メールの出力の有
       echo "**** rootkit check OK ****"     <----  手動実行時の確認メッセージ
       echo "**** rootkit check OK ****" | mail -s "*** rootkit check ***" root 
  fi
  #
  chmod 600 ${LOG}

  ------------------------------------------------------------------------------------------
※ 参考情報 ※   if ! rpm -V `rpm -qf /sbin/init` > /dev/null 2>&1; とは、何か?

rpm -qf ○○○○は、
パッケージ名○○○○が、どのRPMパッケージでインストールされているかを調べるコマンドです。

私のサーバ機で rpm -qf /sbin/init 実行すると upstart-0.6.5-13.el6_5.3.x86_64 のパッケージ
名が抽出されました。

if ! ○○○○は、○○○○の文字列が、0 の時に then 以下が実行されます。
つまり、「/sbin/init」のパッケージがアップデートされた時には、改ざんなしとする処理です。
> /dev/null 2>&1; で出力結果とエラーメッセージは、捨てられます。

なお、本当に改ざんがあり、かつ、「/sbin/init」のパッケージがアップデートされた時には、
改ざんなしになってしまいます。
 ------------------------------------------------------------------------------------------

  D rootkit.sh に属性設定

     chmod 700 rootkit.sh

  E 毎日2時に実行するよう cron に設定する。
     0 2 * * * /usr/local/src/rootkit.sh

  F ハッカーの攻撃にあったかの確認

     root 宛てにメールが、来ているので確認する。
     mail コマンドを入力して rootkit check OK が、表示すれば、ハッカーの攻撃は、なしです。

 詳細の設定は、下記サイトを参考にしてください。
  ※ 参考にしたサイト   rootkit検知ツール導入(chkrootkit)

  G 下記スクリプトは、遊び心で上記オリジナルに処理時間の計算結果の表示や改ざんあった時
     には、chkrootkit が検知した結果の表示機能を追加したスクリプトです。

   [ chkrootkitを定期的に実行させるためのスクリプトの作成 ] の詳細は、
                                                          [ここをクリック]してください。

  H 「 Searching for Suckit rootkit... Warning: /sbin/init INFECTED 」の誤検知対策 
    この誤検知は、必ず出るので、ウィルススキャン実行スクリプト rootkit.sh で chkrootkit
     を実行した時に誤検知情報をカットする方法にしました。その改良点は、下記のの通りです。

    # chkrootkit実行    実行結果は、chkrootkit.log へ出力

    chkrootkit > ${LOG} 

        ↓   ↓   ↓

    # chkrootkit実行    実行結果は、chkrootkit.log へ出力
    ##  [Searching for Suckit rootkit... Warning: /sbin/init INFECTED] は、###
    ##  当然誤検知で出るので事前にカットしておく  ###

    chkrootkit | grep INFECTED | egrep -v "/sbin/init" > ${LOG} 

# 説明 # 
    | grep INFECTED で "INFECTED" の有る行を抽出します。その中で "/sbin/init" のある行は、
    | egrep -v "/sbin/init" でカットします。


=================================================================================
  14. sendmail のインストール
=================================================================================

  ○ root 宛てのメールは、sendmail が、無いと来ないみたいのでインストールします。

    cd /usr/local/src; \
    rpm -Uvh procmail-3.22-47.el8.x86_64.rpm; \
    rpm -Uvh sendmail-8.15.2-31.el8.x86_64.rpm  <--- チョット時間がかかります。

    yum でのインストールは、下記の通りです。

    dnf -y install sendmail

  ○ CentOS 8.0 では、mailのコマンドが使えないので該当パッケージを dnf でインストールし
     ます。

     dnf install mailx

     インストール済み:
       mailx-12.5-29.el8.x86_64

     完了しました!

  ○ sendmail を起動します。

    systemctl start sendmail

    # が表示するまで、結構時間がかかるので待ちます。

  ○ 再起動後も有効にする設定

    systemctl enable sendmail

    # が表示するば OK です。

    root 宛てのメールは、mail コマンドでみます。詳細は、下記サイトを参考にしてください。
  ※ 参考にしたサイト   mail コマンドの使い方


=================================================================================
  15. Logwatch のインストールと毎日のメールを簡単にチェックする方法
=================================================================================
  ○ サーバー上のログを定期的にまとめ、集約してレポートを出してくれるソフトウェア

    Logwatch のインストールは、依存関係から、下記の順序で行ってください。

    cd /usr/local/src/; \
    rpm -ivh mailx-12.5-29.el8.x86_64.rpm; \
    rpm -ivh perl-Date-Manip-6.60-2.el8.noarch.rpm ; \
    rpm -ivh perl-Sys-CPU-0.61-14.el8.x86_64.rpm; \
    rpm -ivh perl-Sys-MemInfo-0.99-6.el8.x86_64.rpm; \
    rpm -ivh logwatch-7.4.3-9.el8.noarch.rpm

     dnf でのインストールは、下記の通りです。

    dnf -y install logwatch

    インストール済み:
      logwatch-7.4.3-9.el8.noarch              mailx-12.5-29.el8.x86_64
      perl-Date-Manip-6.60-2.el8.noarch        perl-Sys-CPU-0.61-14.el8.x86_64
      perl-Sys-MemInfo-0.99-6.el8.x86_64

完了しました!

  ○ logwatch.conf は、下記の箇所を変更して 実行させれば root宛てにメールがきます。

※ 参考 ※  1行毎直すのが面倒な時には、sed コマンドで下記の様にすると同じ事ができます。
            念のため、バックアップを取ってから置換します。

cp /usr/share/logwatch/default.conf/logwatch.conf /home/miyasaka/logwatch.conf.bak; \
sed -i -e "s/#Archives = No/Archives = YES/g
s/Detail = Low/Detail = Med/g
s/sendmail -t/sendmail -t -f root@localhost/g"\
 /usr/share/logwatch/default.conf/logwatch.conf

    vi /usr/share/logwatch/default.conf/logwatch.conf 

    アーカイブされたログも含めるかどうかの指定。
    60行目  コメントアウトの解除
    #Archives = Yes
    ↓
    Archives = Yes

    ログの詳細度、Low (=0), Med (=5), High (=10) または 0から10までの数字。
    72行目   私の場合、Med にしました。
    Detail = Low
             ↓
    Detail = Med

    メールコマンドパスの変更
    109行目 rooo宛てにする。
    [ Can't execute sendmail -t: No such file or directory ]というエラーが出るので修正
    します。

    mailer = "sendmail -t"
      ↓   ↓   ↓ 
    mailer = "sendmail -t -f root@localhost"

  ○ Logwatch の定時実行は、cron.daily の設定で午前 3時から 4時頃の間のランダムな時刻
     毎日実行されるので crontab に設定する必要は、無いようです。Logwatch の rooo宛てメールを毎日簡単にチェック出来るように下記のようなプログラムを作
     ってみました。

    1. Logwatch の rooo宛てメールを前日の日付でユーザーエリヤに保存するとともに、パスワー
       ドのかかったヘージから、ホームページから日にちを指定して見られるようにしています。

    2. 保存したLogwatch の rooo宛てメールは、10日間としそれ以前は、削除するようにした。

    3. プログラムは、cron で毎日一回4時以降に実行させています。

    4. /var/spool/mail/root のメールデータは、本プログラムで転送後肥大を防ぐため削除して
      います。

    5. また、ついでに chkrootkit 実行結果・DiCE のイベントログも同時に見られるようにもしてい
       ます。

     こんな具合に表示します。

     表示例

     ★ 12/13 13:34 にmiyasaka.comが実行されました
       IPアドレスを更新しました
     × 12/14 10:46 IPアドレスチェック タイムアウト
     × 12/16 16:37 IPアドレスチェック タイムアウト
     × 12/18 15:54 IPアドレスチェック タイムアウト
     ○ 12/19 15:03 IPアドレスが変わりました >183.176.129.222  <---- 変更後のグロバル
                                                                      IPアドレス
     ★ 12/19 15:03 にmiyasaka.comが実行されました
        IPアドレスを更新しました 

 ※※ 参考情報 ※※
    corn で定時的に実行させている処理のコマンドの最後に [  > /dev/null 2>&1 ] を付けま
    しょう。
    これを付けないと実行結果が rooo宛てメールとして残ってしまいます。
    ( これは、実行結果を表示させない処理です。 メールデータの肥大化防止にもなります。)

    6. DiCE のイベントログの rooo宛てメールは、シェルスクリプトで簡単なプログラムを作り、
       IPアドレスの更新が7日毎なので、これに合わせて、週一回 cron で実行させています。
       ( DiCE の IPアドレスの更新実行は、起動した日を基準に繰返し行われます。 )

    7. Logwatch の rooo宛てメールは、漢字があるので文字化けしない様に漢字コードをJcode で 
       Shift_JIS 変換にしてユーザーエリヤに保存しています。

    8. rooo宛てメールをホームページエリヤに移動保存すると、不正に見られることがあるかもしれ
       ないので、移動保存は、ホームディレクトリにしていますが、perl では、cp( コピーコマン
       ド )使えないので、ユーザーエリヤに保存してあるメールデータを読みだすため、open
        コマンドで変数 ( get_data )に書込む方法をとりました。
       コピーコマンド( cp )の替りに open を使つてプログラムを組むとデータの読込みが簡単にな
       り、便利です。
       皆さんも是非マスターしてください。

          open( get_data, "<ユーザーエリヤの保存先のパス+ファイル名");

    下記がシェルスクリプト・cgi のプログラムと Logwatch の rooo宛てメールの内容です。
    ユーザーエリヤ等のパスは、○表記にしていますが、使用するときには、あなたの環境に合わせ
    注意してください。

    ※ 注意 ※
    「rooo宛てメール」が見られる様になるのは、システムを起動後、翌々日からになりますので
    てください。

   [ Logwatch の rooo宛てメールをホームページとして簡単にみられるプログラム一式 ] の詳細は、
                   [ここをクリック]してください


=================================================================================
  16. 漢字コード変換用に nkf のインストール 
=================================================================================
○ apache のアクセスログの文字化けを修正するための漢字コード変換パッケージ nkf をインスト
   ールします。
   CentOS 6.6 までは、Jcode を使用していましたが、CentOS 7 で cron から実行させると Jcode
    が見えないらしく、実行されないという現象が発生しました。
   CentOS 7 からは、漢字を含んだデータ( UTF-8 コード )から目的とするデータを取得する処理
   をする為、 nkf を使用する事にしました。
   更に良いことには、Jcode で処理するよりもプログラムが簡単になりました。

○ nkf のインストール

  cd /usr/local/src; \
  tar zxvf nkf-2.1.5.tar.gz; \
  cd nkf-2.1.5; \
  make && make install

    make で下記エラーが出ますが動作はします。
-------------------------------------------------------------------------------------
cc -g -O2 -Wall -pedantic -c nkf.c
関数 'get_backup_filename' 内,
    inlined from 'main' at nkf.c:7164:28:
nkf.c:1035:3: 警告: 'strncat' output truncated before terminating nul copying as many bytes
                                        from a string as its length [-Wstringop-truncation]
   strncat(backup_filename, filename, filename_length);
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
nkf.c: 関数 'main' 内:
nkf.c:1024:27: 備考: length computed here
     int filename_length = strlen(filename);
-------------------------------------------------------------------------------------

    以下で、終われば、OK 
    -----------------------------------------------------------
    mkdir /usr/local/bin     <---- ここが nkf のフルパスです。
    mkdir: ディレクトリ `/usr/local/bin' を作成できません: ファイルが存在します
    make: [install] エラー 1 (無視されました)
    mkdir /usr/local/man
    mkdir /usr/local/man/man1
    mkdir /usr/local/man/ja
    mkdir /usr/local/man/ja/man1
    cp -f nkf /usr/local/bin/
    cp -f nkf.1 /usr/local/man/man1/
    cp -f nkf.1j /usr/local/man/ja/man1/nkf.1
    -----------------------------------------------------------
○ nkf の使用方法

   私のサーバ機の環境では、EUC-JP コードを ホームページ表示コード Shift_JIS に変換するので
   下記の様な設定をします。 なお、cronで自動実行させる時には、パスが通らないのでフルパスで
    nkfコマンドを実行させてください。

   1) 変換後上書き保存する時は、

   /usr/local/bin/nkf -s --overwrite ( 元ファイルのフルパス )

     -s : 変換コード Shift_JIS 指定
     -e : 変換コード EUC 指定 
     -w : 変換コード UTF-8 指定 

   ( オプション --overwrite を付けると変換後のテキストデータが上書きされます。)

   2) 変換後別ファイルへ保存する時は、

   /usr/local/bin/nkf -s ( 元ファイルのフルパス ) > ( 保存先ファイルのフルパス )

   3) コマンド実行後の結果が文字化けする時 nkf の使用方法
      文字化けは、Tera Term の文字コードが EUC なので起こります。コマンドの後ろに
       | nkf -e を付けるだけです。

   ex.  cat -n ○○○○ | nkf -e

○ ファイルの文字コードの確認

   GMODE でのコマンド実行は、パス不要です。  結果は、Shift-JIS, EUC-JP の様に表示します

   nkf -g ( ファイルのフルパス )

○ コマンドのフルパスの確認

   Linux のコマンドのフルパスは、which コマンドで確認できます。

   例 nkf の場合

      which nkf   --->  /usr/local/bin/nkf

○ perl,シェルスクリプト(sh)でnkfを使用する時にも、パスが通らないのでフルパスでコマンドを
   記述してください。

○ cron で起動させる perl, シェルスクリプト(sh)で日本語を使用する時の文字化け対策

1. Tera Term 使用して遠隔管理しているサーバ機では、ユーザの文字コードを初期設定で eucJP
   ( EUC )に変更しているので cron で起動させる perl, シェルスクリプト(sh)で nkf を使用す
   る時には、root 権限の文字コード( ja_JP.UTF-8 )になるので下記の様に文字コードを一時的
   に変更して実行させてください。

     11 */1 * * * export LANG=ja_JP.eucJP; /(DocumentRoot)/ondo_○○○.pl

2. 日本語を含むデータをコマンド等で取得・解析する時には、nkf コマンドで EUC コードに変換し
   てから解析をして下さい。
   Tera Term 等から実行した時には、上手く動くのに「cronでの実行時には、設計道理にならない」
   という現象が発生します。
          ( cron での実行は、root 権限なので文字コードは、UTF-8 になります。 )
( Tera Term の文字コードが EUC 、サーバ側のユーザー文字コードも EUC になっているからです。)

○ Tera Tarm で自作プログラム( perl, sh )等のデバック時に出力結果が文字化けする時の対策方法

   例えば、perl SD_Card_Check.pl を実行したら出力結果が 「 <b>SD J[h }Eg nj </b> 」の様にな
   ってしまいました。
   これを nkf を使用して perl SD_Card_Check.pl | nkf -e と実行させると出力結果は、下記の様に
   正しく表示します。
   つまり、Tera Term 側の文字コード EUC に変換して出力する指定を追加するだけです。

    perl SD_Card_Check.pl | nkf -e   ---->  「 <b>SD カード マウント OK </b> 」

3. cron で起動させた perl のプログラムで日本語を使用して無くとも、プログラム内から、実行さ
   せるシェルスクリプト(sh)内で日本語を使用している時には、export LANG=ja_JP.eucJP;  を追
   加して実行させてください。


=================================================================================
  17. DiCE の起動( systemctl start )と自動起動( systemctl enable )の設定
=================================================================================

 DiCE のインストール・設定に関しては、ネット上に沢山の記述が有るので省略します。

 1 ). DiCEの設定(実行)時のエラー対策

   /usr/local/DiCE/diced で DiCE を起動した時、下記エラーが出るので ld-linux.so.2 をインス
   トールします。
 -----------------------------------------------------------------------------------------
 -bash: ./diced: /lib/ld-linux.so.2: bad ELF interpreter: そのようなファイルやディレクトリ
 はありません
 -----------------------------------------------------------------------------------------
   この原因は、DiCE のパッケージが 32bit ベースで作られている為、OS 側に必要とするパッケー
   ジが不足しているからです。
   
   32bit ベースのパッケージの依存関係がチョット複雑なので ここは、yum でインストールします。

   dnf -y install ld-linux.so.2

 2 ). DiCE をバックグラウンド起動させるサービス( DiCE.service )を新規作成して追加します。

   @ DiCE.service の作成

   vi /usr/lib/systemd/system/DiCE.service で下記をコピペします。
--------------------------------------------------------------------------- 
[Unit]
Description=DiCE daemon       <---- サービス名を書込みます。( コメント欄です。)
                                                       
[Service]
Type=forking                     <---- サービスプロセスの起動完了の判定方法
ExecStart=/usr/local/DiCE/diced -d -l   <---- サービス起動・ログ収集コマンドを書込みます。
                                                          
[Install]
WantedBy=multi-user.target             <---- 旧来のrunlevel 3に相当する設定
--------------------------------------------------------------------------

A システム再起動時の自動起動設定

   systemctl enable DiCE

   以下の様な表示が出ます。
---------------------------------------------------------------------------------
ln -s '/usr/lib/systemd/system/DiCE.service' 
                        '/etc/systemd/system/multi-user.target.wants/DiCE.service'
---------------------------------------------------------------------------------
   DiCE が正しく設定されているかの確認

   systemctl list-unit-files | grep enable | grep DiCE

   以下の様な表示が出ます。
---------------------------------------------------------------------------
   DiCE.service                                enabled
---------------------------------------------------------------------------
B 起動・停止

   systemctl start DiCE     <----  起動

   systemctl stop DiCE      <----  停止

   systemctl restart DiCE   <----  再起動

   C 自動起動の解除

   systemctl disable DiCE

   以下の様な表示が出ます。
---------------------------------------------------------------------------
   rm '/etc/systemd/system/multi-user.target.wants/DiCE.service'
---------------------------------------------------------------------------
D ステータスの表示

   systemctl status DiCE

   以下は、私の環境下の表示例です。
---------------------------------------------------------------------------
DiCE.service - DiCE daemon
   Loaded: loaded (/usr/lib/systemd/system/DiCE.service; enabled)
   Active: active (running) since 日 2014-11-30 07:22:24 JST; 9min ago
  Process: 599 ExecStart=/usr/local/DiCE/diced -d -l (code=exited, status=0/SUCCESS)
 Main PID: 608 (diced)
   CGroup: /system.slice/DiCE.service
           `-608 /usr/local/DiCE/diced -d -l

11月 30 07:22:23 LeoMiya systemd[1]: Starting DiCE daemon...
11月 30 07:22:24 LeoMiya systemd[1]: Started DiCE daemon.
11月 30 07:22:24 LeoMiya diced[599]: =-=-=- DiCE DynamicDNS Client -=-=-=
11月 30 07:22:24 LeoMiya diced[599]: Version 0.19 for Japanese
11月 30 07:22:24 LeoMiya diced[599]: Copyright(c) 2001 sarad
11月 30 07:22:24 LeoMiya diced[599]: DiCE Daemon Started !!
---------------------------------------------------------------------------

E DiCE の動作確認の為、ホームページ上に DiCE のログを表示させ方法

   DiCE のIPアドレス更新ログをその都度サーバにログインして見るのは、面倒なので、パスワード
   のかかったページに perl と HTML でプログラムを組み見られる様にしてみました。
   DiCE のログは、日本語表示なので、EUCコードをシフトJISコードに変換して表示しています。
   DiCE の events.log のパスは、あなたの環境に合わせてください。
   下記のプログラムは、漢字コード変換に nkfjcode を使った例です。

   [ ホームページ上にDiCE のイベントログのみを表示させるプログラム ] の詳細は、
                                                             [ここをクリック]してください

   HTML の記述例

   dice_events_check.pl は、perlのプログラム名です。

   <CENTER><H3>DiCE のIPアドレス更新履歴<br><!--#exec cmd="./dice_events_check.pl"--></H3>

   DiCE のIPアドレス更新履歴表示結果の例

     ○ 1/28 17:45 デーモン動作を開始しました
     ○ 2/1 1:00 デーモン動作を開始しました      <---- 毎週定時に DiCE を再起動しています
     ★ 2/4 9:25 にmiyasaka.comが実行されました  <---- ○○○○○は、イベント名
       IPアドレスを更新しました
     ○ 2/8 1:00 デーモン動作を開始しました
     ○ 2/10 9:09 デーモン動作を開始しました   <---- 停電がありサーバ機・ルータとも再起動
                                                        しました。
     ○ 2/10 9:20 IPアドレスが変わりました >115.30.245.91 <--- IPアドレスが更新されました
     ★ 2/10 9:20 にmiyasaka.comが実行されました
       IPアドレスを更新しました 


=================================================================================
  18. 自宅サーバの管理・運用監視対策等
=================================================================================

 1 ). CPU 温度の監視

      CPU 温度を取得するには、sensors のインストールが必要となります。
      lm_sensors のrpm パッケージは、その時点での最新版をインストールしてください。
      古いと依存性エラーが発生します。その時には、yum でインストールします。
      下記は、2019年 9月 現在の最新バージョンのインストールです。

      cd /usr/local/src; \
      rpm -Uvh lm_sensors-3.4.0-17.20180522git70f7e08.el8.x86_64.rpm

      dnf でのインストールは、下記の通りです。

      dnf -y install lm_sensors

    運用・管理は、32bit CentOS 6.7 自宅サーバ構築を参照ください。

    ※※ CPU 温度を取得する SSI プログラム例の紹介 ※※

    -----------------------------------------------------------
    #!/usr/bin/perl
    #----------------------------------------------------
    #  lm_sensorsを使用して CPU の温度を抽出する。
    #----------------------------------------------------
    # 先頭に Core の文字列がある行のみ抽出する

    $Data1 = `/bin/sensors | grep Core`;

    # 複数 CPU の時には、一行毎分割する
    @Data2 = split("\n",$Data1);
    # 文字列を スペースで分割する
    @Data = split(" ",$Data2[0]);
    # 3番目の配列に温度データがある
    $temp = substr( $Data[2], 0,3 );
    # 温度データを HTML へ出力する
    print "CPU 温度 $temp 度\n";
    -----------------------------------------------------------

 2 ). ftp のインストール

      ftp は、ホームページデータなどのバックアップの際、外部へ出力する際に必要となります。

      cd /usr/local/src; \
      rpm -Uvh ftp-0.17-78.el8.x86_64.rpm

      dnf でのインストールは、下記の通りです。

      dnf -y install ftp


TOPへ戻る