www.smiyasaka.com は、 2022 年 11月から Oracle LInux 8.X にOSを変更しました。

●   CentOS 7.9.2009 と httpd-2.4.53 の
インストールと自宅サーバ構築   ●

アクセス数 昨日 4 今日 2
  累計 33,207   

CentOS-7-x86_64-DVD-2009.isoを使用し極力 yum なしで、自宅サーバを構築しました。

2022年5月 現在カーネルのバージョンは、Linux 3.10.0-1160.66.1.el7.x86_64 になっています。

インストールは、openssl + nghttp2 + Brotli + httpd-2.4.53 の構成で行います。

ここでのサーバ構築は、ファイアウォール有効・SELinux は、有効/無効を選択できる設定で行っています。
( " コピペ " で簡単にサーバ構築が出来るよう心掛けた作りにしています。)

ファイル転送プログラム vsftpd は、Tera Term の転送機能を使用して windows PC 側から直接転送し、インストールします。
vsftpd インストール後 ダウンロードしたファイルを サーバ機に ffftp で書き込み、 各種設定は、Windows PC ( Tera Term を使用 )からの遠隔操作で web サーバを構築していきます。

     
※※※ サポート期限は、2024年 6月30日までです。※※※

※ 注 意 事 項 ※ を見る[ここをクリック]

目    次
[○○○○]のクリックで、その内容が目次の下に表示、再度クリックで非表示になります。


0. 現在稼働中のサーバ機のスペック


このウェブサイトは、
下記のシステム仕様で小型パソコンを使用して私の自宅から発信しています。


サーバ機の OS は、 Oracle Linux 8.10  64bit
  Web サーバは、 httpd-2.4.62  を使用して運用しています。
SELinux mode : Enforcing ( 有効 )
SSL 認証鍵の証明書 = Let's Encrypt を使用・SSL プロトコル HTTP/2 に対応
( Let's Encrypt は、一か月毎更新しています。 )
カーネルのバージョンは、2024.11.21 に更新された
  Kernel 5.15.0-302.167.6.1.el8uek.x86_64 です。

[ サーバ機 連続稼働時間 4 日と 21 時間 54 分 SSD 機器温度 33 ]
[ SSD 稼動時間 2,220 時間 ( 92 12 時間 ) ]
[ CPU 利用率 0.44 % CPU 温度 +27 ]

稼 働 中 サ ー バ 機 の ス ペ ッ ク
-------------------------------------------------------------------------
私の自宅サーバ機のスペック
型   式 :
Mouse Pro-M591F-WA CPU : Intel i3-7100U 2コア/4スレッド 2.40GHz
消費電力 : 約 10W   メ モ リ : 8GBSSD : 128GB
インターネット回線 : STNet 光回線(ギガビット対応)
USBカメラ : Logicool UVC対応 C270sCW 120万画素(固定焦点)
-------------------------------------------------------------------------

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

インストールは、CentOS-7-x86_64-DVD-2009.isoで行います。
2020年 11月04日付けで CentOS 7.9.2009 がリリースされました。

参考情報ですが、CentOS 7 は 2024 年 6 月 30 日にサポート終了になっているようです。

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

ソフトウエアの選択は、「最小限のインストール」を選択して行っています。
httpd のバージョンは、デフォルトで 2.4.6 ですが 最新版の 2.4.52 をインストールします。
インストールの詳細は、「 10-1. apache2( httpd-2.4.53 )のインストールと設定 」を参照してください。

※※ 参考情報 ※※
インストールが途中で固まって進まない現象(マウスポインターは表示しするが設定の初期画面が表示しない現象。
なお、ディスプレイは、XP時代の代物です。)が発生しました。対処は、初期のバージョンの iso を使用したらインストールが上手くできました。

この原因は、画面の表示範囲が極端にズレた為で対策は、インス トールオプションでディスプレイの解像度を指定する事で解消出来ます。

私の onkyo PC では、 CentOS 7.5 の時かなり画面からはみ出るので、試してみたところ上手くいきました。

手順は下記の通りです。
インストールの初期画面( 2行目が選択されている。)で、[Tab]キーを押します。
画面の下に下記の様に表示するので


vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet_

quiet_ の後にそのままインストールオプション [半角スペース] + resolution=1024x768 と追加し、 [Enter]キーを押します。

なお、[=]は、[^]を押します。解像度は、使用するディスプレイの 表示モード XGA に合わせます。

[ CentOS-7.X DVD のインストール手順 ] の詳細は、

            [ここをクリック]してください。


2. CentOS 7 再起動後のコンソールからの各種設定( 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" で変更する。

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

③ SELinux を有効にしてサーバ機を構築する時は、下記の手順で各種設定を行ってください。

[ CentOS 7 SELinux のアクセス制限を有効にした時の設定手順 ] の詳細は、

            [ここをクリック]してください。

④ Windows側から、Tera Term でアクセスするポート番号を設定する。

下記コマンドで sshd の設定ファイルを編集します。

    vi /etc/ssh/sshd_config


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

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

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

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

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

success が表示すれば OK

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

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

      firewall-cmd --reload

success が表示すれば OK

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

ポート番号を「 2222 」に変更しないで初期値のまま( 22 ) Tera Term にログインしてしまいます。

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


⑤ sshdの再起動

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

⑥ SELinux を無効にする設定。

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

   vi /etc/sysconfig/selinux

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

※※ 参考情報 ※※
後から、SELinux を有効にしたくなり、ここを permissive または、enforcing に設定し直して再起

動すると SELinux のポリシー情報が無いためにエラーになり再起動できなくなります。注意してく
ださい。
私の場合、SELinux は、enforcing のままで各種設定をしています。


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

「ベース」と「その他の開発」を groupinstall でインストールします。
パッケージ数は、「ベース」+「その他の開発」: 797個です。
( ※※ 注意 ※※ yum -y update を先にすると Base のインストールがエラーになりますので 注意してください。
つまり、カーネルのバージョンを先に最新バージョンにしないことです。)

    yum -y groupinstall "Base" "Additional Development"

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

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

※※ 参考情報 ※※ Minimal でインストールした時には、"Development" を追加してください。

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

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

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


 firewalld.service - firewalld - dynamic firewall daemon
    Loaded: loaded (/usr/l……/system/firewalld.service; enabled)
    Active: active (running) si……ago
  Main PID: 567 (firewalld)

    以下省略

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

初回の update は、数が多いので時間がかかります。

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

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

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

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

この設定は、必要とする方のみ行ってけてた下さい。

私の場合、サーバ機の管理・設定は、ローカルの PC 以外しないので設定しています。


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

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

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

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

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

⑩-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 は、窓の杜ライブラリでダウンロードできます。


※※ Tera Term で接続エラーになる時の解決策 ※※

コマンド netstat でアクティブなポート番号を確認します。

使用コマンド
netstat -plant

Tera Term で接続したいポート番号が無い時には、sshd をリスタートします。

使用コマンド
systemctl restart sshd

ここで再度ポート番号の確認をします。使用するポート番号がアクティブになっていれば接続できるはずです。


3. 事前にダウンロードするファイル一覧と探し方

rpm パッケージのダウンロードは、このサイト[ RPM Search ] で検索するとほとんどのパーケージが入手できます。

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


( リンク切れでダウンロードできない時には「パッケージ名」で検索してダウンロードしてください。)

   
CentOS 7 の rpm パッケージは、el7.x86_64.rpm の名前が付きます。
    ソースファイル( tar )は、32bit・64bit の区別がありません


---------------------------------------------------------------
ftp
proftpd-1.3.6.tar.gz
vsftpd-3.0.2-25.el7.x86_64.rpm
ftp-0.17-67.el7.x86_64.rpm
---------------------------------------------------------------
RPMforgeリポジトリ
yum-plugin-priorities-1.1.31-42.el7.noarch.rpmm
rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
---------------------------------------------------------------
httpd
httpd-2.4.XX.tar.gz
旧バージョンから最新バージョン(httpd-2.4.53)の httpd ダウンロード
apr-1.7.0.tar.gz
apr-util-1.6.1.tar.gz
openssl-1.1.1X.tar.gz
nghttp2-1.XX.X.tar.gz
brotli-1.0.X.tar.gz
---------------------------------------------------------------
fswebcam
fswebcam-20100622.tar.gz
gd-progs-2.0.35-26.el7.x86_64.rpm
gd-devel-2.0.35-26.el7.x86_64.rpm
---------------------------------------------------------------
sendmail
hesiod-3.2.1-3.el76.x86_64.rpm
procmail-3.22-36.el7.x86_64.rpm
sendmail-8.14.7-5.el7.x86_64.rpm
---------------------------------------------------------------
logwatch
logwatch-7.5.4-1.noarch.rpm
---------------------------------------------------------------
clamav
libprelude-5.2.0-2.el7.x86_64.rpm
pcre2-10.23-2.el7.x86_64.rpm
clamav-filesystem-0.103.2-1.el7.noarch.rpm
clamav-lib-0.103.2-12.el7.x86_64.rpm
clamav-update-0.103.2-1.el7.x86_64.rpm
clamav-0.103.2-1.el7.x86_64.rpm
---------------------------------------------------------------
chkrootkit
chkrootkit.tar.gz
glibc-static-2.17-55.el7_0.1.x86_64.rpm
---------------------------------------------------------------
nkf-2.1.5.tar.gz
Jcode-2.07.tar.gz
---------------------------------------------------------------
sensors
lm_sensors-3.4.0-8.20160601gitf9185e5.el7.x86_64.rpm


4. セキュリティ対策のため停止したサービス

暫定的に停止したサービスは、下記のとおりです。
( 試しに、不要と思われるサービスを停止 及び 再起動後も停止にしています。)


#!/bin/sh
systemctl stop atd.service
systemctl disable atd.service
systemctl stop auditd.service
systemctl disable auditd.service
systemctl stop dmraid-activation.service
systemctl disable dmraid-activation.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 microcode.service
systemctl disable microcode.service
systemctl stop postfix.service
systemctl disable postfix.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
systemctl stop lvm2-lvmetad.socket
echo "サービス_STOP 完了"

属性を変更して、実行します。

chmod 755 service_stop.sh;sh service_stop.sh

 サービス名
atd
auditd。
dmraid-activation
kdump
 
lvm2-monitor
mdmonitor
microcode
postfix
rngd
smartd
tuned
lvm2-lvmetad

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

※※ 参考情報 ※※
IEEE802.1X/WPAを無線LANクライアントに 提供するツールのサービス( wpa_supplicant )は、停止 させても再起動すると 勝手に起動してしまいます。wpa_supplicant のサービスは、disable にし
ています。


私のサーバ機では、wpa_supplicantをシステム起動時に自動的に停止する様に スクリプトを作成し てsystemdのサービスとして登録しています。そのサービスの作成手順を下記に紹介します。
この現象は、ONKYO PC では、起こりますが、mousePC では、発生していません。


① wpa_supplicant を停止するコマンド実行するスクリプトを作成します。

 vi /usr/local/src/wpa_supplicant_stop.sh

  #!/bin/bash
  # wpa_supplicant を停止するコマンド実行

  systemctl stop wpa_supplicant
 wpa_supplicant_stop.sh に実行権限を付加します。

 chmod 755 /usr/local/src/wpa_supplicant_stop.sh

② wpa_supplicant_stop.service という名のサービスを追加します。

 vi /usr/lib/systemd/system/wpa_supplicant_stop.service
 で下記をコピペする。
  [Unit]
  Description= wpa_supplicant_stop 
  After=network.target  <-- 先に起動しておいてほしいサービスを
                                 定義してます。
  [Service]
  Type=simple      <-- プロセスを起動するだけの指定。
  ExecStart=/usr/local/src/wpa_supplicant_stop.sh  <-- 起動する。
                           プロセスの指定。
  [Install]
  WantedBy=multi-user.target

UnitセクションのAfterで先に起動しておいてほしいサービスを定義してます。
Type=simpleは、コマンドを実行したタイミングで起動完了となります。

③ サーバー起動時に実行する様に設定する

  systemctl enable wpa_supplicant_stop


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


ファイアウォール( firewalld ) の設定

私が設定したファイアウォール( firewalld )の内容は、下記の通りです。

SSL 化しているので ポート 443 も有効にしています。
CentOS 7.X では、下記の設定が、CentOS 6.X の時の iptables の設定に相当します。

firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanentine
firewall-cmd --add-service=ftp --permanent
firewall-cmd --add-service=ntp --permanent
firewall-cmd --remove-service=dhcpv6-client
--permanent
firewall-cmd --remove-service=ssh --permanent
firewall-cmd --add-port=2222/tcp --permanent
firewall-cmd --reload

<---- 80/tcp の有効化
<---- SSL 化の時 443/tcp の有効化
<---- 21/tcp の有効化
<---- 123/tcp の有効化
<---- 不要なので削除

<---- 22/tcp は、不要なので削除
<---- 2222/tcp の追加
<---- 設定を有効にする

※※ 参考情報 ※※
   コマンドは、.service を省略してもOKです。
   --permanent は、再起動後も設定を有効にする指定です。
   --zone=public を省略してもデフォルトで zone=public になっています。


ファイアウォール( firewalld )の設定内容を確認する。

  firewall-cmd --list-all

上記設定で ファイアウォールの設定は、下記の様になります。

----------------------------------------------------------
public (default, active)
     interfaces: enp2s0
     sources: 
     services: ftp http ntp https
     ports: 2222/tcp
     protocols:
     masquerade: no
     forward-ports:
     source-ports:
     icmp-blocks:
     rich rules:

CentOS 7.X のファイアウォール( firewalld )の、実際の動作は iptables が動いているらしい。
よって、ファイアウォールの設定を一覧で見る時には、コマンド iptables-save で見られます。
新規追加したサービスは、最後に追加されています。下記は、表示例です。

    上 部 省 略

-A IN_public -p icmp -j ACCEPT
-A IN_public_allow -p tcp -m tcp --dport   80 -m…… NEW -j ACCEPT
-A IN_public_allow -p udp -m udp --dport  123 -m…… NEW -j ACCEPT
-A IN_public_allow -p tcp -m tcp --dport   21 -m…… NEW -j ACCEPT
-A IN_public_allow -p tcp -m tcp --dport  443 -m…… NEW -j ACCEPT
-A IN_public_allow -p tcp -m tcp --dport 2222 -m…… NEW -j ACCEPT
COMMIT

※※ ここからは、参考情報です。 ※※

 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 の追加をするように編集して
みます。


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="ssh"/>
<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 コマンドで一括処理してみました。


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

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

public の設定データを確認すると下記の様に変更が反映されています。

  firewall-cmd --list-all
    -------------------------------------------------------------
      public (default, active)
      interfaces: enp2s0
      sources:
      services: ftp http ntp https    <-- 追加されたサービス
      ports: 2222/tcp
      protocols:
      masquerade: no
      forward-ports:
      source-ports:
      icmp-blocks:
      rich rules:

 Systemd でのサービスの管理と設定コマンド

CentOS 7.X ではサービスの管理は一部のサービスを除き systemd で行うといった仕様に変更と
なりました。

① ファイアウォールを無効にする設定。

   systemctl stop firewalld.service

  # が表示したら完了です。

② 再起動後も、ファイアウォールを無効にする設定。

    systemctl disable firewalld.service   <---- 再起動後も無効にする。


③ ファイアウォールを有効にする設定。

    systemctl enable firewalld.service   <---- 再起動後も有効にする。


  下記が表示すれば OK

  ln -s '/usr/lib/systemd/system/firewalld.service' .......
  ln -s '/usr/lib/systemd/system/firewalld.service' .......

④ ファイアウォールを起動する

     systemctl start firewall.service

  # が表示すれば OK

⑤ ファイアウォール「サービス」の追加コマンド( 所定のポートを有効する設定 )

proftpd、vsftpd、httpd( apache ) をファイアウォール有効下で有効にする設定です。

⑤-1 proftpd、vsftpd の 21 番ポートを有効にする。

システムの再起動後も有効にする為、「 --permanent 」を必ず付けてい下さい。
--zone=public を省略した時には、デフォルト値 zone=public になります。

        firewall-cmd --add-service=ftp --zone=public --permanent
firewall-cmd --reload

firewall-cmd --reload のコマンドを実行しないと設定は、反映されません。

コマンド毎に success と表示したら OKです。

⑤-2 httpd( apache ) の 80 番ポートを有効にする

       firewall-cmd --add-service=http --zone=public --permanent
firewall-cmd --reload


コマンド毎に success と表示したら OKです。

⑤-3 設定を確認します

        firewall-cmd --list-services --zone=public


下記の様に表示であればファイアウォール有効下で各サービス名に対応したポートが有効になっています。

  dhcpv6-client ftp http ssh

⑤-5 追加したサービスの削除

  --add を --remove にすると削除になります。

   同時に systemctl enable をしたサービスは、disable にしてください。

⑥ 特定のポートの開放方法

⑥-1 例として Port 2222を追加する。

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

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

  success が表示すれば OK

デフォルトで設定されている サービス ssh を編集してポートを変更する方法を下記に紹介します。

[ ssh のデフォルトポート(TCPの22番)の修正 ] の詳細は、

            [ここをクリック]してください。

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

      firewall-cmd --reload

  success が表示すれば OK

⑥-3 public ゾーンで許可されているポートの一覧確認コマンド

      firewall-cmd --zone=public --list-ports

  表示例 2222/tcp

⑥-4 public ゾーンで許可されているポート(例 2222 )の削除コマンド

      firewall-cmd --zone=public --remove-port=2222/tcp

  success が表示すれば OK

⑦ 有効なサービス( enable ) の一覧を表示する。

     systemctl list-unit-files | grep enable

  有効なサービス( enable ) 一覧の表示例

abrt-ccpp.service
abrt-oops.service 
abrt-vmcore.service
abrt-xorg.service 
abrtd.service  
avahi-daemon.service
chronyd.service
crond.service 
dbus-org.fedoraproject.FirewallD1.service
dbus-org.freedesktop.Avahi.service
dbus-org.freedesktop.NetworkManager.service
dbus-org.freedesktop.nm-dispatcher.service
firewalld.service
getty@.service 
irqbalance.service
libstoragemgmt.service
lm_sensors.service 
NetworkManager-dispatcher.service
NetworkManager.service
rsyslog.service
sendmail.service
sm-client.service 
sshd.service  
sysstat.service  

enabled
enabled
enabled
enabled
enabled
enabled
enabled
enabled
enabled
enabled
enabled
enabled
enabled
enabled
enabled
enabled
enabled
enabled
enabled
enabled
enabled
enabled
enabled
enabled

⑧ デフォルトの定義ファイル「サービス」( service )は、下記コマンドで取得できます。

  ( 「サービス」とは、TCP/UDPポート番号の事で下記の一覧にある 「サービス」は、

  firewall-cmd --add-service=「サービス名」 --permanent) で該当ポートを有効にすることができます。)


  
firewall-cmd --get-services

  下記は、取得した定義ファイル( service )一覧です。

amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability
http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns
mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql
proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client
transmission-client vnc-server wbem-https

任意にインストールしたパッケージを service として追加する方法

  サービスを追加するとシステムの再起動で自動で実行されるようになります。

  任意にインストールしたパッケージを service として追加するには、下記のフォルダにサービスの設定ファイルを書き込みます。

  systemctl ○○○○.service の書込み先は、
/usr/lib/systemd/system/○○○○.serviceです。
  ( ○○○○は、任意につけるサービス名で、デフォルトのサービス名と同一でなければOKです。)


⑨-1 httpd-2.4.46 のサービスの設定ファイルを apache2.service として作成してみます。

  このファイル作成で、systemctl apache2 の start, stop, enable, disable, status のコマ

ンドが実行できます。ただし、80番ポートは、開放されませんので 上記 ⑤-2 の操作をしてください。


vi /usr/lib/systemd/system/apache2.service で下記をコピペします。)

[Unit]
Description=httpd-2.4.46 daemon  
<---- サービス名を書込みます。( コメント欄です。)

[Service]
Type=forking            
<---- 起動するプロセスをデーモン動作として起動する。
ExecStart=/usr/local/apache2/bin/apachectl start   
<---- サービス起動
ExecReload=/usr/local/apache2/bin/apachectl gracefu 
<---- httpデーモンを安全に再起動
ExecStopt=/usr/local/apache2/bin/apachectl stop   
<---- サービス停止

[Install]
WantedBy=multi-user.target     
<---- 旧来のrunlevel 3に相当する設定)

⑨-2 「起動」と「システム再起動時の自動起動」の設定

 
systemctl start apache2  <---- 起動
 
systemctl reload apache2 <---- 安全な再起動
 
systemctl enable apache2 <---- 自動起動の設定

以下の様な表示が出ます。( 本来は、一行表示です。 ))

ln -s '/usr/lib/systemd/system/apache2.service' '/etc/systemd/system/multi-
user.target.wants/apache2.service')

⑨-3 サービスとして追加されたかの確認

下記コマンドで有効なサービス( enable ) の一覧を表示します。
systemctl list-unit-files | grep enable)

          ( 省略 )
abrtd.service
apache2.service
avahi-daemon.service
chronyd.service
clamd.service
crond.service
dbus-org.fedoraproject.FirewallD1.service
dbus-org.freedesktop.NetworkManager.service
dbus-org.freedesktop.nm-dispatcher.service
DiCE.service
firewalld.service
           ( 省略 )


enabled
enabled<--- 追加

enabled
enabled
enabled
enabled
enabled
enabled
enabled
enabled
enabled

⑨-4 本ヘージでは、proftpd, apache, DiCE, clamd の ○○○○.service を作成しています。


6-1. Tera Termでproftpd( FTPサーバ )を転送しインストール

proftpd( FTPサーバ )をインストールするまでは、ffftpが、使用できないのでTera Termの転送
機能で、proftpd( FTPサーバ
proftpd-1.3.6.tar.gz )をホームディレクトリへ転送しインスト
ールします。

( Tera Termの転送機能は、ホームディレクトにしか書込みが出来ません。)

Tera Term から、proftpd をサーバ機のホームデレクトリィにファイルを転送する方法は、 次の通りです。

[ 転送方法 ]
  1. Tera Term の画面上・左端 [ファイル] をクリックする。  
<--- 写真 ①
  2. プルダウンメニューの SSH SCP...をクリックする。     
<--- 写真 ②
  3. 中央に窓が開くので
写真 ③ の矢印で示すボタン[…]をクリックする。 <--- 写真 ③

写真 ①A 写真 ②B 写真 ③C

  4. 写真 ④ の様にファイルを選択するダイヤログ画面が開くので、
   proftpd-1.3.6.tar.gzを選択する(ダブルクリックする。)  
<--- 写真 ④
  5. 
写真 ⑤ の矢印で示す[Send]ボタンをクリックする。   <--- 写真 ⑤
  6. ユーザのホームデレクトリィにファイルが転送される。

写真 ④
A
写真 ⑤B

② proftpd のインストール

  1. 転送した proftpd-1.3.6.tar.gz を /usr/loacl/src/ コピーする。
    cp /home/miyasaka/proftpd-1.3.6.tar.gz /usr/loacl/src/
  2. proftpd-1.3.6.tar.gz を展開する。
    cd /usr/loacl/src/ ;tar zxvf proftpd-1.3.6.tar.gz
  3. 展開したソースファイルの configure を実行する。

    cd proftpd-1.3.6; \
    ./configure --prefix=/usr/local/proftpd

  1 ~ 3 をまとめて実行させると

  cp /home/miyasaka/proftpd-1.3.6.tar.gz /usr/loacl/src/; \
  cd /usr/loacl/src/; \
  tar zxvf proftpd-1.3.6.tar.gz; \
  cd proftpd-1.3.6; \
  ./configure --prefix=/usr/local/proftpd

  4. make とインストールをする。
    make && make install

※※ 注意 ※※>
  make で下記エラー出ますが、問題なく動作します。

In file included from pr_fnmatch.c:256:0:
pr_fnmatch_loop.c: 関数 'internal_fnmatch' 内:
pr_fnmatch_loop.c:75:7: 警告: 変数 'is_seqval' が設定されましたが使用されていません


③ proftpd.confの設定

vi /usr/local/proftpd/etc/proftpd.confで、"# Bar use of SITE CHMOD by default"以降をす
べて削除し、下記の文を追加します。


※ まとめて削除する方法 ※

"# Bar use of SITE CHMOD by default"の行へカーソルを移動して (削除行数)dd と入力する。


#
# Bar use of SITE CHMOD by default
# サイト内ファイルの属性変更を許可するグループ
#
<Limit SITE_CHMOD>
#DenyAll
AllowAll
</Limit>
#ファイル一覧表示(ドットファイルの可視化)
ListOptions "-a"
#
#ログイン時間の短縮化(DNS問い合わせしない・Identの停止)
UseReverseDNS off
IdentLookups off
#
# アクセス時刻の修正 GMT-->JST
TimesGMT off
# LAN内のみアクセスを許可する。
<Limit LOGIN>
Allow from 192.168.0.0/24
<--- ここの 192.168.0. は、あなたの環境の IPアドレスに
合わせてください。

</Limit>

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

( sed -i -e の -i は、上書き編集の指定です。)
( 39a は、39行目に a 以降の文字列を追加・\n は、改行指定です。)
( s/△△/□□/ は、△△の文字列が□□文字列に置換されます。)
( \ は、メタ文字[ $,/, . 等 ]の指定です。)


cp /usr/local/proftpd/etc/proftpd.conf /home/miyasaka/proftpd.conf.bak;\
sed -i -e "40,65d
39a# サイト内ファイルの属性変更を許可するグループ\n\
<Limit SITE_CHMOD>\n\
#DenyAll\n\
AllowAll\n\
<\/Limit>\n\
#ファイル一覧表示\n\
ListOptions \"-a\"\n\
\n\
#ログイン時間の短縮化\(DNS問い合わせしない・Identの停止\)\n\
UseReverseDNS off\n\
IdentLookups off\n\
\n\
# アクセス時刻の修正 GMT-->JST\n\
TimesGMT off\n\
\n\
# LAN内のみアクセスを許可する。\n\
<Limit LOGIN>\n\
Allow from 192\.168\.0\.0\/24\n\
<\/Limit>\n" /usr/local/proftpd/etc/proftpd.conf


④ proftpdの起動ファイルをコピー・編集する。

作成された起動ファイル proftpd.init.d を /etc/rc.d/init.d/proftpd へコピーする。

  cp /usr/local/src/proftpd-1.3.6/contrib/dist/rpm/proftpd.init.d \
  /etc/rc.d/init.d/proftpd


⑤ proftpdの起動ファイルの32、46行目を編集する。


  vi /etc/rc.d/init.d/proftpd

32行目に追加( 環境変数 PATH に /usr/local/proftpd/sbin を追加・有効にする処理 )
これは、proftpd のコンパイル後の保存先が、/usr/local/proftpd にしているためです。
( この操作を proftpd の「 パスを通す 」と言います。つまり、 proftpd を実行させる時に
フルパスを入れなくても実行できるようにする為です。)


export PATH="$PATH:/usr/local/proftpd/sbin"

46行目を修正する

# Make sure the binary is present.
[ -x /usr/sbin/proftpd ] || exit 5
↓ ↓
[ -x /usr/local/proftpd/sbin/proftpd ] || exit 5


cp /usr/local/src/proftpd-1.3.6/contrib/dist/rpm/proftpd.init.d;\
sed -i -e "31aexport PATH=\$PATH\:\/usr\/local\/proftpd\/sbin
s/-x \/usr\/sbin\/proftpd/-x \/usr\/local\/proftpd\/sbin\/proftpd/g"\
/etc/rc.d/init.d/proftpd


⑥ proftpd.conf は、グループの初期値が
30行目 User nobody
31行目 Group nogroup
の設定なので、グループ名 nogroup を追加( groupadd nogroup )するか、
31行目を Group nobody に変更します。


私は、groupadd nogroup のコマンド入力をしています。


⑦ proftpdの起動ファイルに実行権限を付けます。


chmod 755 /etc/rc.d/init.d/proftpd


proftpd のサービスを新規作成して追加します。

⑧-1 proftpd.service の作成

vi /usr/lib/systemd/system/proftpd.service で下記をコピペします。)

 [Unit]
 Description=proftpd-1.3.6 daemon   
<---- サービス名を書込みます。
                      ( コメント欄です。)
  [Service]
 Type=forking            
<---- サービスプロセスの起動完了の判定方法
 ExecStart=/etc/rc.d/init.d/proftpd start 
<---- サービス起動コマンドを書込みます。

 [Install]
 WantedBy=multi-user.target     
<---- 旧来のrunlevel 3に相当する設定


※ 注意 ※
必ず systemctl enable proftpd のコマンド実行後、start させてください。

start を先に実行すると、コマンドがいつまで待っても終了しなくなります。
その時には、[Ctrl]+[c] で強制終了してください。


⑧-2 システム再起動時の自動起動設定

  systemctl enable proftpd

以下の様な表示が出ます。(表示の都合で2行にしています。)

ln -s '/usr/lib/systemd/system/proftpd.service'
'/etc/systemd/system/multi-user.target.wants/proftpd.service'

⑧-3 起動・停止

  systemctl start proftpd  <---- 起動

  systemctl stop proftpd   <---- 停止

⑧-4 自動起動の解除

  systemctl disable proftpd

  以下の様な表示が出ます。

rm '/etc/systemd/system/multi-user.target.wants/proftpd.service'

⑧-5 ステータスの表示

  systemctl status proftpd

  以下は、私の環境下の表示例です

 * proftpd.service - ProFTPD FTP Server
  Loaded: loaded (/usr/lib/systemd/system/proftpd.service; enabled; vendor ……
  Active: active (running) since 金 2018-09-21 08:22:27 JST; 1min 59s ago
  Process: 1091 ExecStart=/usr/sbin/proftpd $PROFTPD_OPTIONS (code=exited, ……
 Main PID: 1125 (proftpd)
  CGroup: /system.slice/proftpd.service
      `-1125 proftpd: (accepting connections)

 9月 21 08:22:27 LeoMiya systemd[1]: Starting ProFTPD FTP Server...
      ( 以下省略

ファイアウォール有効下で ftp( proftpd ) を有効にします。

⑨-1 現在有効なサービスを確認します。

   firewall-cmd --list-services

   下記が表示するはずです。( デフォルトての設定サービス )

   dhcpv6-client ssh

⑨-2 ftp( proftpd ) をサービスに追加して有効にします

   firewall-cmd --add-service=ftp --permanent

   success が表示すれば OK です。

⑨-3 コマンドを有効にします。

   firewall-cmd --reload

   success が表示すれば OK です。

⑨-4 再度有効なサービスを確認します。

   firewall-cmd --list-services

   下記の様に ftp が追加されるはずです。

   dhcpv6-client ftp ssh


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

 これで FFFTP がつながらない時は、ポート ftp(21)がオープンしていないので

   firewall-cmd --add-service=ftp --permanent
   firewall-cmd --reload

   で追加します。

※※ 注意事項 ※※
 ffftp の設定は、
 ホスト名(アドレス)(N)   ---->  CentOS 7 のIPアドレス
 ユーザー名(U)       ---->  CentOS 7 のユーザー名
 パスワード/パスフレーズ(N) ---->  CentOS 7 のユーザー名パスワード
 ホスト側の漢字コード   ---->  無変換
 ファイル名の漢字コード  ---->  自動
 に設定してください。

⑩ windows側にある各種インストールするためのプログラムは、ffftpで一度ホームデレクトリィに
転送し、コマンドで所定デレクトリィに移動なり、コピーしてから、インストールします。

⑪ ffftpの時間ずれを直すには、ffftpの設定を変更します。

windows側でFFTPを起動し、接続時に設定変更で「拡張」を選び、ホストタイムゾーンをGMT+9:00
 に変更します。


⑫ ffftpの設定で[アップロードするファイルの属性]を事前に設定しておくと、転送後の属性設定が

不要になるので便利です。
その方法は、ffftp のツールバーの[オプション(O)][環境設定(S)]を選び、表示されるオプション
の画面のタグ[転送 3]をクリック、[追加(A)]で拡張子毎に設定追加します。


  設定例
   *.pl *.cgi *.sh ---> 755
   *.txt *.cnt    ---> 666
   *.html は、設定不要です。

※ 参考になるサイト linuxmaster.jp


6. Tera Termでvsftpd( FTPサーバ )を転送しインストール

Tera Term から、vsftpd をサーバ機のホームデレクトリィにファイルを転送する方法は、 次の通りです。

[ 転送方法 ]
  1. Tera Term の画面上・左端 [ファイル] をクリックする。  
<--- 写真 ①
  2. プルダウンメニューの SSH SCP...をクリックする。     
<--- 写真 ②
  3. 中央に窓が開くので
写真 ③ の矢印で示すボタン[…]をクリックする。 <--- 写真 ③

写真 ①A 写真 ②B 写真 ③C

  4. 写真 ④ の様にファイルを選択するダイヤログ画面が開くので、
   vsftpd-3.0.2-22.el7.x86_64.rpm を選択する(ダブルクリックする。)  
<--- 写真 ④
  5. 
写真 ⑤ の矢印で示す[Send]ボタンをクリックする。   <--- 写真 ⑤
  6. ユーザのホームデレクトリィにファイルが転送される。

写真 ④
A
写真 ⑤B

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

  cd /usr/local/src/; \
  rpm -ivh vsftpd-3.0.2-22.el7.x86_64.rpm

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

  yum -y install vsftpd

② 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" /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

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


  cp /etc/vsftpd/vsftpd.conf /home/miyasaka/; \
  chown -R miyasaka:miyasaka /home/miyasaka/vsftpd.conf; \
  chmod 644 /home/miyasaka/vsftpd.conf

③ 上層への ディレクトリへのアクセスを許可するユーザーを追加

  vi /etc/vsftpd/chroot_list または、

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

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

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

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


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

  vi /etc/hosts.deny

  vsftpd:ALL

  または、

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

④-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アドレスを許可する設定です。

⑤ vsftpd を起動する。

  systemctl start vsftpd

# が表示すれば OK です。

⑥ vsftpd の自動起動を有効にする。

  systemctl enable vsftpd

# が表示すれば OK です。

ファイアウォール有効下で ftp( vsftpd ) を有効にします。

 ⑦-1 現在有効なサービスを確認します。

   firewall-cmd --list-services

   下記が表示するはずです。( デフォルトての設定サービス )

   dhcpv6-client ssh

 ⑦-2 ftp( vsftpd ) をサービスに追加して有効にします。

   firewall-cmd --add-service=ftp --permanent

   success が表示すれば OK です。

 ⑦-3 コマンドを有効にします。

   firewall-cmd --reload

success が表示すれば OK です。

 ⑦-4 再度有効なサービスとポートを確認します。

   firewall-cmd --list-services

   下記の様に ftp が追加されるはずです。

   dhcpv6-client ftp ssh

   有効なポートの確認

   firewall-cmd --zone=public --list-ports

   下記の様に表示します。

   2222/tcp

⑦-5 ③ ~ ⑥ のコマンドをまとめて実行させると下記の様になります。

   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

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

これで FFFTP がつながらない時は、ポート ftp(21)がオープンしていないので

firewall-cmd --add-service=ftp --permanent
firewall-cmd --reload

で追加します。

※※ 注意事項 ※※
 ffftp の設定は、
 ホスト名(アドレス)(N)   ----> CentOS 7 のIPアドレス
 ユーザー名(U)       ----> CentOS 7 のユーザー名
 パスワード/パスフレーズ(N) ----> CentOS 7 のユーザー名パスワード
 ホスト側の漢字コード   ----> 無変換
 ファイル名の漢字コード  ----> 自動
 に設定してください。


windows側にある各種インストールするためのプログラムは、ffftpで一度ホームデレクトリィに
転送し、コマンドで所定デレクトリィに移動なり、コピーしてから、インストールします。


ffftpの時間ずれを直すには、ffftpの設定を変更します。
windows側でFFTPを起動し、接続時に設定変更で「拡張」を選び、ホストタイムゾーンをGMT+9:00
に変更します。


ffftpの設定で[アップロードするファイルの属性]を事前に設定しておくと、転送後の属性設定が
不要になるので便利です。
その方法は、ffftp のツールバーの[オプション(O)][環境設定(S)]を選び、表示されるオプション
の画面のタグ [転送3]をクリック、[追加(A)]で拡張子毎に設定追加します。


設定例
*.pl  *.cgi  *.sh  --->  755
*.txt *.cnt --->  666
*.html  は、設定不要です。



7. ファイルの転送プログラムの作成

私の場合、インストールするプログラムのファイルは、windows側でダウンロードし、windows側の フォルダ src2 にまとめて保存しおき、ffftpで /home/miyasaka/に転送し、サーバ機側では、転 送プログラムで所定のディレクトリに転送しています。
ファイルのダウンロードは、ファイル名で検索するとダウンロード先を見つけることができます。


ファイルを転送するシェルスクリプトのプログラムをホームディレクトリに作成して行います。
下記は、私が作成したプログラム例です。
[ ファイルの転送プログラム ] の詳細は、
            [ここをクリック]してください。

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

CentOS 7.0 からは、NTP が、Chrony に変更されインストールされています。

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


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

3行目あたり

  server 0.centos.pool.ntp.org iburst
  server 1.centos.pool.ntp.org iburst
  server 2.centos.pool.ntp.org iburst
  server 3.centos.pool.ntp.org iburst

こうなっている部分を以下のように変更します。 ( 必ず三つ書き込みます。)

  server ntp.nict.jp
  server ntp1.jst.mfeed.ad.jp
  server ntp2.jst.mfeed.ad.jp


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

sed -i -e "s/server 0\.centos\.pool\.ntp\.org iburst/server\
 ntp\.nict.\jp/g
s/server 1\.centos\.pool\.ntp\.org iburst/server\
 ntp1\.jst\.mfeed\.ad\.jp/g
s/server 2\.centos\.pool\.ntp\.org iburst/server\
 ntp2\.jst\.mfeed\.ad\.jp/g
s/server 3\.centos\.pool\.ntp\.org iburst//g" \
/etc/chrony.conf

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

  systemctl restart chronyd.service

# が表示すば、OKです。

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

  systemctl enable chronyd.service

# が表示すば、OKです。

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

  chronyc sources

下記の様に表示します。

MS Name/IP address Stratum Poll Reach LastRx Last sample
==========================================
^* ntp-a3.nict.go.jp 1 6 377 9 -430us[ -627us] +/- 8332us
^+ ntp1.jst.mfeed.ad.jp 2 6 377 8 +551us[ +551us] +/- 16ms
^- ntp2.jst.mfeed.ad.jp   2 6 377 7 -307us[ -307us] +/- 35ms

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

⑤ システム時刻(年月日,曜日,時刻)の確認と手動での修正方法

date を入力して時刻が確認できます。

例えば、下記の様に表示します。

2013年 10月 7日 月曜日 13:21:17 JST

時刻の修正は、date MMDDhhmmYYYY の様に入力します。

[ MM 月 01~12 DD 日 01~31 hhmm 時刻 24時表示 YYYY 年(西暦) ]

ex. 2013年10月07日 09:05 --> date 100709052013

⑥ ntp の 123 番ポートを有効にする。

※※ 参考情報 ※※

web上に「 ntpdでは問い合わせに行く時のポートも123だが、chronydは問い合わせには空いている
適当なポートを使う」という情報がありますが、念のため 123 番ポートを開放してみます。

   firewall-cmd --add-service=ntp --zone=public --permanent
firewall-cmd --reload

コマンド毎に success と表示したら OKです。



9. RPMforgeリポジトリを導入する


① yum-prioritiesインストール

  cd /usr/local/src/; \
  rpm -ivh yum-plugin-priorities-1.1.31-42.el7.noarch.rpm

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

  cd /usr/local/src/; \
  yum -y install yum-plugin-priorities

② 標準リポジトリ設定ファイル編集

※ 参考情報 ※

1行毎直すのが面倒な時には、sed コマンドで下記の様にすると同じ事ができます。
念のため、バックアップを取ってから置換します。
( 27i は、27行目に i 以降の文字列が追加されます。 )

cp /etc/yum.repos.d/CentOS-Base.repo /home/miyasaka/CentOS-Base.repo.bak; \
sed -i -e "19ipriority=1
27ipriority=1
35ipriority=1" /etc/yum.repos.d/CentOS-Base.repo


  vi /etc/yum.repos.d/CentOS-Base.repo

[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releas...
#baseurl=http://mirror.centos.org/centos/$releasever/os/...
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
priority=1 ← 追加する
#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$release...
#baseurl=http://mirror.centos.org/centos/$releasever/upda...
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
priority=1 ← 追加する
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$release...
#baseurl=http://mirror.centos.org/centos/$releasever/extr...
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
priority=1 ← 追加する
#additional packages that extend functionality of existin...
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasev...
#baseurl=http://mirror.centos.org/centos/$releasever/cento...
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

③ RPMforgeリポジトリインストール

  rpm -ivh rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm

④ RPMforgeリポジトリのアップデート
  ここは、アップデートなので yum を使用します。

  yum -y update rpmforge-release

  以下のメッセージ表示で終わります。
  11 packages excluded due to repository priority protections
  No packages marked for update

⑤ ロードしたファイルを消去します。

  rm -f rpmforge-release-*

⑥ CentOS-Base.repo のファイルも編集済のファイルを上書きできるので保存しておくことをすすめます。

  cp /etc/yum.repos.d/CentOS-Base.repo /home/miyasaka/CentOS-Base.repo.bak


 ※ 参考にしたサイト RPMforgeリポジトリ導入(RPMforge)


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

「 ベーシック Web サーバー 」を選択 による httpd-2.4.6 の httpd.conf 設定・起動 は、

[httpd-2.4.6 の httpd.conf 設定・起動 ここをクリック]  してください。

2021.05.25付けで httpd-2.4.48 がリリースされています。
2021.09.15付けで httpd-2.4.49 がリリースされています。
2021.10.04付けで httpd-2.4.50 がリリースされました。
2021.10.07付けで httpd-2.4.51 がリリースされました。
2021.12.20付けで httpd-2.4.52 がリリースされました。
2022.03.14付けで httpd-2.4.53 がリリースされました。

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

 1. httpd-2.4.53 を展開する。

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

 2. apr を展開する。

  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

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

  cd /usr/local/src/httpd-2.4.53; \
  ./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.53
  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

③ 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.53' から出ます

④ 私のサーバの環境でした、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 を使用して定点カメラ関係のデータとプロ グラムを別ドキュメントルート上で実行させています。不要な方は、削除してください。


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


[ sed コマンドによる httpd-2.4.XX の httpd.conf の一括編集 ] の詳細は、

            [ここをクリック]してください。

※ httpd.conf の設定が、終わったファイルを ffftp で、windows側に転送しておくと、再構築の 時にそのファイルを上書きすれば、設定内容は、すべて有効になります。ただし、直接上書き はできないので、一度ホームディレクトリへ転送し、コピーコマンドで、上書きします。
cp /home/miyasaka/src2/httpd.conf /usr/local/apache2/conf/


[ httpd-2.4.XX httpd.conf の編集項目 ] の詳細は、

            [ここをクリック]してください。

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

この方法は、当ホームページのトップページ内の指定した「日」および「月」の保存した定点カ
メラの映像表示で使用しています。


[ 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

⑦ホームページの書き込み先のフォルダを作成・所有者の変更・属性変更をします。
( /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

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

  /usr/local/apache2/bin/apachectl configtest

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

※※ 注意 ※※

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


   DocumentRoot must be a directory

⑨ apache2を systemctl start で起動する。

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


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

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


[ systemctl service の新規作成 ] の詳細は、

            [ここをクリック]してください。

80, 443 番ポートを有効にする。

デフォルトなサービス http をサービス一覧に追加することによりファイアウォールの有効状
態で 80 番ポートが有効になり、ホームページが見られるようなります。


  firewall-cmd --add-port=80/tcp --permanent
    または、
  firewall-cmd --add-service=http --permanent

  firewall-cmd --add-port=443/tcp --permanent
    または、
  firewall-cmd --add-service=https --permanent

  success が表示すれば OK

  firewall-cmd --reload
  success が表示すれば OK

  追加されたかの確認

  firewall-cmd --list-all

  下記の様に http が追加されていれば、OK
  dhcpv6-client ftp http ssh

⑪ アクセスログ・エラーログ・圧縮の確認用ログは、/usr/local/apache2/logs のディレクトリに書込まれます。

ここで、 httpd.conf へ設定したドキュメントのルート( DocumentRoot と 別ディレクトリ)へ>
ホームページのファイルデータを書き込みます。


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

[ ホームページテストプログラム ] の詳細は、

            [ここをクリック]してください。

※※ 注意事項 ※※
SELinux 有効の時には、下記のポリシーを設定します。
下記ポリシーを設定しないと Apache から、ホームディレクトリ( 別ドキュメントルート )での 公開が出来なくなります。

setsebool -P httpd_enable_homedirs 1;\
firewall-cmd --reload



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

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


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


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

⑭ 書き込んだプログラムを定時実行させるため、cron への設定もします。

圧縮されたかの確認ができるwebサイトを紹介します。下記 URL をクリックしてあなたの
ホームページの URL を入れるだけです。
www.gidnetwork.com または、www.port80software.com

私のドメインでアクセスした結果は、下記の通りです。(圧縮レベル 1 で設定)
入力するドメインには、必ず、http:// 又は、https:// を付けてください。


右の写真のような情報が取得できます。
( H28.11.01 アクセスし、データ取得 )


Results for: www.smiyasaka.com
Web page compressed? Yes ← 圧縮有
Compression type? gzip ← 圧縮タイプ
Size, Markup (bytes) 13,077 ← 解凍した後の バイト数
Size, Compressed (bytes) 4,515 ← 圧縮された時の バイト数
Compression % 65.5 ← 圧縮率







www.gidnetwork.com からの回答
B

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

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

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

  圧縮した時の圧縮ログデータは、このようになりました。( TeraPad で見ます。)

 (出力バイト数)↓ ↓(入力)↓( 元データに対するデータの大きさ[ % ] ) を意味します。

"GET  / HTTP/1.1" 10335/53768 (19%) Mozilla/5.0 (compatible; MSIE 9.0;………
"GET  /.webcam/camdata.jpg HTTP/1.1" 730/1235 (59%) Mozilla/5.0 (compatible;…
"GET  /.webcam/camdata.jpg HTTP/1.1" -/- (-%) Mozilla/4.0 (compatible; )………
"GET  /fswebcam.html HTTP/1.1" 16258/71964 (22%) Mozilla/5.0 (compatible; ……
"GET  /server.html HTTP/1.1" 13682/55830 (24%) Mozilla/5.0 (Windows NT 6.1; …
"GET  /html_point.html HTTP/1.1" 14973/70669 (21%) Mozilla/5.0 (Windows NT …
"GET  /html_point8.html HTTP/1.1" 1017/1985 (51%) Mozilla/5.0 (Windows NT ……
"GET  /html_point4.html HTTP/1.1" 852/1575 (54%) Mozilla/5.0 (Windows NT………
HTMLのページによって圧縮率[ 100 - 上記の()内の値 ]が違う事が分かります。また、jpg は、
圧縮象外にしているので圧縮されてないことも分かります。
対圧縮率の計算は、
{(入力バイト数)-(出力バイト数)}÷(入力バイト数)×100 %になるので
上記1行目の場合、( 53,768 - 10,335 )÷53,768×100=80.78 % になります。

mod_status を使用した apache サーバステータスの監視機能を使用可能にする設定。

apache サーバステータスを LAN内 PC から、ホームページとして見られる様に設定します。

⑮-1 httpd.conf の編集

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

   139行目あたり コメントアウトされてない事を確認する。

   LoadModule status_module modules/mod_status.so

   473行目(原本での行数)あたり コメントアウトを解除する。

   Include conf/extra/httpd-info.conf

⑮-2 httpd-info..conf の編集

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

   <Location /server-status>
    SetHandler server-status

   16  Require host .example.com
    ↓ ↓ ↓
   Require host localhost

   17  Require ip 127
    ↓ ↓ ↓
   Require ip 192.168.0. <--- LAN 内のみアクセス許可にする。
   </Location> ここは、あなたの環境に合わせてください

   サーバステータス情報の拡張表示を行う
   25  #ExtendedStatus On
    ↓ ↓ ↓
   ExtendedStatus On

   httpd の設定情報は、不要なのですべてコメントアウトする

   32 #<Location /server-info>
   33 #  SetHandler server-info
   34 #   Require host .example.com
   35 #  Require ip 127
   36 #</Location>

上記をまとめて sed コマンドで実行は、下記の様になります。なお、同じ文字列があるので、行を 指定して実行しています。
( s/ の前の数字は、置換をさせる行番号です。32,36s/^/#/ は、32~36行の先頭に #を挿入する指示です。)


sed -i -e "s/Require host \.example\.com/Require host localhost/g
s/Require ip 127/Require ip 192\.168\.0\./g
s/#ExtendedStatus On/ExtendedStatus On/g
32,36s/^/#/" /usr/local/apache2/conf/extra/httpd-info.conf


○ httpd を再起動する。

  systemctl restart apache2

⑮-3 LAN内 PC からのアクセス方法

  [LAN内のサーバのIPアドレス]/server-status?refresh=5 <--- 5 秒更新
  [LAN内のサーバのIPアドレス]/server-status      <--- 更新なし

下記は、私のサーバ機で表示したサーバステータス情報です。

A

※※ apache のバージョンの確認方法 ※※

  /usr/local/apache2/bin/httpd -v のコマンドで確認できます。

  
Server version: Apache/2.4.52 (Unix)
  
Server built: Dec 21 2021 10:48:53

※※
参考情報 ※※

1. Linux OS のバージョンの確認方法

  cat /etc/redhat-release のコマンドで確認できます。

  
CentOS Linux release 7.9.2009 (Core)

2. Linux カーネルのバージョンの確認方法

  uname -a のコマンドで確認できます。

Linux LeoMiya 3.10.0-1160.25.1.el7.x86_64 #1 SMP Wed Apr 28 21:49:45 UTC 2021………

3. restart してもコマンドが終了しない・エラーなる時の対処方法

一例としてこんな具合に、表示されます。

httpd not running, trying to start
(98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
(98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
AH00015: Unable to open logs

これは、apacheデーモン停止が失敗したからなので、kill コマンドで強制的に該当プロセスを
停止する必要があります。まず、httpd の稼働プロセス番号を lsof コマンドで調べます。


  lsof -i | grep httpd

一例としてこんな具合に、表示されます。
httpd 1242 root 4u  IPv6 17421 0t0 TCP *:http (LISTEN)
httpd 1248 miyasaka 4u IPv6 17421 0t0 TCP *:http (LISTEN)
httpd 1249 miyasaka 4u IPv6 17421 0t0 TCP *:http (LISTEN)

1242,1248,1249 は、稼働プロセス番号なので、kill コマンドで強制終了( -9 )させます。

kill -9 1242 1248 1249

4. httpd を strat としたら、こんなエラーが出た時の対処方法

(20014)Internal error (specific information not available):
AH00058: Error retrieving pid file logs/httpd.pid
AH00059: Remove it before continuing if it is corrupted.

通常 apache は、停止時に httpd.pid ファイルを削除するのですが、削除されてないと
httpd.pid ファイルが存在するので、apache は起動していると、誤認識して起動できなくな
っている為です。
対処は、httpd.PID ファイルを次の手順で削除するだけです。


httpd.pid ファイルの存在とパスをコマンド find / -name httpd.pid で確認します。
表示された httpd.pid ファイルのパスを指定して下記コマンドで削除します。
( 下記のパスは、私のサーバ機の環境の場合です。)


  rm /usr/local/apache2/logs/httpd.pid

5.
最新版をインストールしたい時、古いバージョンの httpd を削除する方法
( あくまでも私が行っている方法です。)


httpd-2.4.52 のバージョンを削除する場合

systemctl stop apache2       <--- apache を停止する
systemctl disable apache2     <--- apache を無効にする
rm -rf /usr/local/apache2      <--- 展開されたモジュールを削除する
rm -rf /usr/local/src/httpd-2.4.52  <--- 展開されたモジュールを削除する

インストール後は、httpd.conf の設定だけでOKです。

6. apach2 ( httpd ) の起動確認

現在実行されているプロセスをツリー表示するコマンド pstree で確認します。

下記の様に表示すれば、OKです。


   systemd-+-NetworkManager---2*[{NetworkManager}]
      ( 省略 )
       |-firewalld---{firewalld}
       |-httpd-+-httpd
       |     |-3*[httpd---63*[{httpd}]]
       |     `-3*[rotatelogs]


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


○ 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 です。
httpd-2.4.6 の場合は、off しないと動作しない SSI プログラムがありました。

私のホームページでは、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. apache2 の SSL 化の手順と httpd.conf、httpd_ssl.conf の設定

※※※ 注意事項 ※※※

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


※※※ 設定の基本方針 ※※※

1. http:// のアクセスを https:// に自動変換( リダイレクト )させる。

2. 秘密鍵は、無償の Let's Encrypt を使用する。
3. SELinux は、有効( Enforcing )にしたまま使用する。


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

1. 現在 http://(ドメイン) でホームページが公開されている事。

2. httpd-2.4.XX のバージョンの apache2 を使用している事。
3. epelレポジトリのインストールが完了している事。
4. http とhttps のポート 80 と 443 が解放されている事
5. モデムのポート 80 と 443 が解放されている事。

1. 無償の Let's Encrypt を使用して認証鍵の証明書を取得します。
但し、有効期限が3ヶ月間ですので更新が必要になります。


① certbotパッケージと certbot の apache 用プラグインである

  python2-certbot-apache をインストールします。


  yum -y install certbot

  certbot.noarch 0:0.30.2-1.el7 がインストールされます。

  yum -y install python2-certbot-apache

  python2-certbot-apache.noarch 0:0.30.2-1.el7 がインストールされます。

※※ 参考情報 ① ※※
上記 yum インストールで [エラー: 何もしません] になる時には、下記を実行してから yum を実行してください。


  yum install -y epel-release

※※ 参考情報 ② ※※

epel-release の無効化の手順


  ア. コマンド rpm -qa | grep epel で epel のバージョンを調べる。

    例
    rpm -qa | grep epel
    epel-release-7-11.noarch

  イ. コマンド rpm -e で削除する。

    rpm -e epel-release-7-11.noarch

② certbotインストール後の確認

  yum list installed | grep certbot

  certbot.noarch            0.30.2-1.el7     @epel
  python2-certbot.noarch       0.30.2-1.el7     @epel
  python2-certbot-apache.noarch   0.30.2-1.el7     @epel


③ webroot認証でのサーバー証明書の作成 ( 但し、有効期限が3ヶ月間です。)

  certbotコマンドの実行( Web サーバが動いている状態でも以下のコマンドで取得できます。)

  下記コマンドで取得します。

オプションを指定して certbot コマンドを実行します。 -d オプションには、証明書を発行 するサーバーのドメインを、-w には DocumentRoot のパスを指定します。

指定するドメイン名は、DNS サーバで設定している通りに設定します。
私の場合は、www.smiyasaka.com と smiyasaka.com を有効にしているので両方指定しています。
なお、証明書は、指定したドメイン名のみに対して作成されます。
( 認証鍵の証明書の取得は、ホームページ公開状態でも出来ました。)


   certbot certonly --webroot -w /var/www/html/www.smiyasaka.com\             -d www.smiyasaka.com -d smiyasaka.com

  上記コマンド実行後、下記の問い合わせがあり回答する必要があります。

〇 メールアドレスを入力するように求められます。

  Enter email address (used for urgent [省略] (Enter 'c' to cancel): メールアドレスを入力

〇 規約に同意するかを問われます。 同意するために A と入力します。

  (A)gree/(C)ancel: A

〇 メールを受け取りたければ Y を、受け取りたくなければ N と入力します。

(Y)es/(N)o: N

  コマンドが正常終了すると、下記の様に表示し、/etc/letsencrypt/live 以下に最新版の証明 書へのシンボリック リンクが作成される。

     [省略]

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/www.smiyasaka.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/www.smiyasaka.com/privkey.pem
<------- 証明書のパス
Your cert will expire on 2019-05-16. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

  証明書へのシンボリックリンクパスの確認

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

合計 4
-rw-r--r--. 1 root root 692 2月 16 08:31 README
lrwxrwxrwx. 1 …… 41 2月 16 08:31 cert.pem -> ../../archive/www.smiyasaka.com/cert1.pem
lrwxrwxrwx. 1 …… 42 2月 16 08:31 chain.pem -> ../../archive/www.smiyasaka.com/ chain1.pem
lrwxrwxrwx. 1 …… 46 2月 16 08:31 fullchain.pem -> ../../archive/www.smiyasaka.com/fullchain1.pem
lrwxrwxrwx. 1 …… 44 2月 16 08:31 privkey.pem -> ../../archive/www.smiyasaka.com/privkey1.pem
[root@LeoMiya ~]#

ファイルが作成されていることが確認できました。各ファイルの役割は以下の通りです。

  cert.pem サーバー証明書本体

  chain.pem 中間証明書
  privkey.pem 秘密鍵ファイル
  fullchain.pem サーバー証明書と中間証明書のセット

2. httpd-2.4.53 の再インストール

SSL 化のための mod_ssl.so の組込は、個別のインストールでなく、 httpd-2.4.53 の再イン ストールで対応します。

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


  systemctl stop apache2; \
  systemctl disable apache2; \
  cd /usr/local/src/httpd-2.4.53/; \
  make uninstall; \
  rm -rf /usr/local/apache2; \
  rm -rf /usr/local/src/httpd-2.4.53


rm -rf /etc/httpd/

② mod_ssl.so を追加して再インストール

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


  cd /usr/local/src/httpd-2.4.53;\
  ./configure \
  --enable-ssl \      
<--- mod_ssl.so の追加
  --with-included-apr \
  --enable-rewrite \    
<--- http:// のアクセスを https:// に自動変換で使用
  --enable-so \
  --enable-deflate=shared

3. Apache の 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 HIGH:MEDIUM:!MD5:!RC4:!3DES:!DH

又は、

    
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 HIGH:MEDIUM:!MD5:!RC4:!3DES:!DH

又は、

    
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 -SSLv3 -TLSv1 -TLSv1.1

SSL プロトコル SSL 3.0 を無効化・TLS1.3 サポートする。

 80 SSLProxyProtocol all -SSLv3
    ↓ ↓
SSLProxyProtocol all -SSLv3 -TLSv1 -TLSv1.1

SSL プロキシ プロトコル SSL 3.0 を無効化・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"


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 "/var/www/html/www.smiyasaka.com">

コメントアウトする
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 で新規に作成します。
標準のログローテーション( Apache logrotate )を使用する時には、コメントアウトしないでください。
私の場合、自前でログローテーションをしています。

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

最終行の後に下記を追加します。

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


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

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

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

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

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

下記を貼り付け(コピペ)ます。

<IfModule log_config_module>
   #
   #======================================
   #       不要なログの記録をさせない設定
   #======================================
   #
   #      拡張子による制限
   SetEnvIf Request_URI\
 ".(gif)|(jpg)|(jpeg)|(png)|(bmp)|(ico)|(css)|(swf)$" no-logfile
   #
   #内部からのアクセスをログに記録しない対策
   # IPアドレスによる制限 ローカル
   SetEnvIf Remote_Addr "192.168.0." no-logfile

   # サーチエンジンのログは取らない。
   SetEnvIf User-Agent "Gigabot" no-logfile
   SetEnvIf User-Agent "Googlebot" no-logfile
   SetEnvIf User-Agent "MJ12bot" no-logfile
   SetEnvIf User-Agent "msnbot" no-logfile
   SetEnvIf User-Agent "psbot" no-logfile
   SetEnvIf User-Agent "TurnitinBot" no-logfile
   SetEnvIf User-Agent "Yahoo! Slurp" no-logfile
   SetEnvIf User-Agent "Zealbot" no-logfile

   # ワームによる制限のログは取らない。
   SetEnvIf Request_URI "default\.ida" no-logfile
   SetEnvIf Request_URI "null\.ida" no-logfile
   SetEnvIf Request_URI "NULL\.IDA" no-logfile
   SetEnvIf Request_URI "cmd\.exe" no-logfile
   SetEnvIf Request_URI "root\.exe" no-logfile
   SetEnvIf Request_URI "Admin\.dll" no-logfile
   SetEnvIf Request_URI "^/_mem_bin/" no-logfile
   SetEnvIf Request_URI "^/_vti_bin/" no-logfile
   SetEnvIf Request_URI "^/c/" no-logfile
   SetEnvIf Request_URI "^/d/" no-logfile
   SetEnvIf Request_URI "^/msadc/" no-logfile
   SetEnvIf Request_URI "^/scripts/" no-logfile

   # CGIディレクトリ
   SetEnvIf Request_URI "^/cgi-bin/" no-logfile

   # 巡回ロボットがアクセスする robots.txt
   SetEnvIf Request_URI "robots\.txt" no-logfile

   # 長いURLへの対処
   #
   # ログファイルは、www.smiyasaka.com_alog_( 年月日 )の
   # ファイル名で保存されます。
   #
   SetEnvIf Request_Method "(GET)|(POST)|(PUT)|(DELETE)|(HEAD)"\
 logfile SetEnvIf Request_Method "(OPTIONS)" no-logfile 
   CustomLog "| /usr/local/apache2/bin/rotatelogs\
 /usr/local/apache2/logs/www.smiyasaka.com_alog_%Y%m%d\
 86400 540"\
 combined env=!no-logfile
</IfModule>

〇 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 の正規表現等が良く理解できました。( 自己満足 )
興味のある方は、下記をクリックしてください。別ページで表示します。


[ sed コマンドによる httpd-2.4.XX の httpd-ssl.conf の一括編集 ] の詳細は、

            [ここをクリック]してください。

4. Apache の SSL の設定 httpd.conf ファイルの編集

下記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

〇 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_rewrite\.so/s/^#//
/httpd-ssl\.conf/s/^#//" /usr/local/apache2/conf/httpd.conf

5. URL の正規化をします。

 http:// のアクセスを https:// に自動変換させる処理( 301リダイレクト )の追加と index.html 無し・ www ありに統一する設定をします。

 www ありに統一したのは、Google Search Console のサイトマップ作成時、ドメインを www ありにしているからです。
.htaccess ファイルを作成し、下記コマンドを書込み、ドキュメントルート上に書込みます。
 ( ローカル LAN からのアクセスを考慮しています。 )

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
#
###  301リダイレクト http ---> htpps  ###
#
  RewriteCond %{HTTPS} off
  RewriteRule ^(.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
#
###  index.htmlあり  →  index.html無し  ###
###  %{HTTP_HOST} にしているのは、ローカルLAN からの
###  アクセスを有効にする為。
#
  RewriteCond %{REQUEST_URI} ^.*/index\.html$
  RewriteRule ^(.*)index.html$ https://%{HTTP_HOST}/$1 [R=301,L]
#
###  www ありのドメインに統一する  ###
###  [NC] は、大文字、小文字の区別なしの指定
#
  RewriteCond %{HTTP_HOST} ^smiyasaka\.com$ [NC]
  RewriteRule ^(.*) https://www.smiyasaka.com/$1 [R=301,L]
#
</IfModule>

※※※ 参考情報 ※※※
上記の設定をしなかった時には、http:// と https:// 共用になります。
リダイレクトの確認サイトは、「リダイレクトチェッカー」で検索するとヒットします。

※※※ 注意事項 ※※※
httpd.conf の下記設定が All であり、mod_rewrite.so が使用できる状態である事。


   #AllowOverride None
    ↓ ↓
    AllowOverride All

サーバ機を https 専用にした時、アクセスログの設定・圧縮処理の設定は、httpd-ssl.conf
への設定だけでOKです。

6. エラーのチェック

  /usr/local/apache2/bin/apachectl configtest

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

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

  vi /usr/lib/systemd/system/apache2.service
------------------------------------------------------

[Unit]
Description=httpd-2.4.53 daemon
After=network.target

[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  <--- 停止

8. 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/

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

  systemctl start apache2

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

  (サーバ機の LAN 内 IP アドレス)

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


自分のホームページの表示は、セキュリティの警告画面で [ リスクを理解して続行 ]等をクリッ

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

10. 証明書の更新

下記コマンドを実行して更新出来ました。
crontab に登録し、毎月 同じ日時( 19日 03時 )に実行する様に設定しました。


00 03 19 * * /bin/certbot certonly --webroot -w /var/www/html/www.smiyasaka.com\
-d smiyasaka.com -d www.smiyasaka.com --renew-by-default && /bin/systemctl\
reload apache2

オプションの説明

certonly       SSL/TLS サーバ証明書の取得のみを行います。

--renew-by-default  リクエストされたドメイン名の SSL/TLS サーバ証明書が既に存在する場合には、残りの有効期間にかかわらず、証明書を更新します。
-w   webrootを使用する場合に証明書の一時保管ディレクトリを指定
-d   証明書を作成するホスト名(FQDN)を指定する
    複数指定も可能で、その場合は一つの証明書で複数のホスト名に対応する

更新の確認は、下記コマンドで行います。(下記の例は、私のサーバ機の場合です。)
日付が更新されいれば、OKです。


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

total 4
-rw-r--r--. 1 root root 692 Feb 16 08:31 README
lrwxrwxrwx. 1 root root 41 May 19 03:00 cert.pem -> ../../archive/www.smiyasaka.com/cert4.pem
lrwxrwxrwx. 1 root root 42 May 19 03:00 chain.pem -> ../../archive/www.smiyasaka.com/ chain4.pem
lrwxrwxrwx. 1 root root 46 May 19 03:00 fullchain.pem -> ../../archive/www.smiyasaka.com/fullchain4.pem
lrwxrwxrwx. 1 root root 44 May 19 03:00 privkey.pem -> ../../archive/www.smiyasaka.com/privkey4.pem>


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

1. OpenSSL , nghttp2 の最新バージョンを下記 URL から、ダウンロードします。

 https://github.com/tatsuhiro-t/nghttp2/releases/
 https://www.openssl.org/source/

2022年 3 月 現在、nghttp2 のパージョンは、1.47.0 、OpenSSL のパージョンは、1.1.1n に成っています。
最新バージョンの nghttp2 を使用するには、openssl も最新バージョンをインストールする必要があります。
ちなみに、nghttp2-1.34.0.tar.gz までは、デフォルト の openssl でインストールできます。


2. Openssl のソースからのインストール

OpenSSL のコンパイルに必要なパッケージをインストールしておきます。


 cd /usr/local/src/; \
 yum -y install perl-core


35個のパッケージがインストールされます。

 OpenSSLのインストール(そこそこの時間がかかります)

 インストール先は、分かり易くするため /opt/openssl にします。


 cd /usr/local/src/; \
 tar zxvf openssl-1.1.1n.tar.gz; \
 cd openssl-1.1.1n; \
 ./config --prefix=/opt/openssl \
 --openssldir=/opt/openssl shared zlib

 make && make install


  初回のみ OpenSSL1.1.1nのライブラリを /etc/ld.so.conf.d にパスとシンボリックリンクを作成しておきます。
※ 注意 ※ この設定をしないと nghttpd2 の make でエラーが沢山出ます。


 ln -s /opt/openssl/lib/libcrypto.so.1.1 /lib64/libcrypto.so.1.1;\
 ln -s /opt/openssl/lib/libssl.so.1.1 /lib64/libssl.so.1.1;\
 echo /opt/openssl/lib > /etc/ld.so.conf.d/openssl111.conf;\
 ldconfig   
<------- 設定ファイルを反映させる。

3 SSL ライブラリの確認

 libssl.so.〇〇〇があればOKです。


 ldd /opt/openssl/bin/openssl  
<------- lddコマンドは、共有ライブラリへの依存関係を表示するコマンドです。

  linux-vdso.so.1 => (0x00007fffc3fc9000)
  
libssl.so.1.1 => /opt/openssl/lib/libssl.so.1.1 (0x00007f876b92a000)
  libcrypto.so.1.1 => /opt/openssl/lib/libcrypto.so.1.1 (0x00007f876b43d000)

  libz.so.1 => /lib64/libz.so.1 (0x00007f876b227000)
  libdl.so.2 => /lib64/libdl.so.2 (0x00007f876b023000)
  libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f876ae07000)
  libc.so.6 => /lib64/libc.so.6 (0x00007f876aa39000)
  /lib64/ld-linux-x86-64.so.2 (0x00007f876bbbd000)

4. nghttp2 のソースからのインストール

nghttp2 のコンパイルに必要な不足パッケージ( jansson・libev )もインストールしておきます。


cd /usr/local/src/;\
yum -y install jansson-devel libev-devel

nghttpd2 は、普通に make するとエラーが出るので、ソフトウェアコレクション( SCL : Software collections ) と言う技術を使い、gcc (コンパイラ) のアップグレードをします。

yum -y install centos-release-scl;\ 
<--- SCLを有効にする
yum -y install devtoolset-7;\  
<--- gcc をアップグレード
scl enable devtoolset-7 bash  
<--- gcc をアップグレードバージョンへ一時的に切り替えます

OpenSSL 1.1.1k は /opt/openssl/ 配下にインストールしてあるので、環境変数 OPENSSL_CFLAGS と OPENSSL_LIBS に OpenSSL のディレクトリパスを指定してコンパイルします。それらは、env で指定します。


  cd /usr/local/src; \
  tar xvfz nghttp2-1.47.0.tar.gz; \
  cd nghttp2-1.47.0/; \  
env ( 環境変数を設定するコマンド ) を必ずつけてください。
  env OPENSSL_CFLAGS="-I/opt/openssl/include" \
  OPENSSL_LIBS="-L/opt/openssl/lib -lssl -lcrypto"; \
  ./configure \
   --disable-static \
   --enable-lib-only \
   --enable-app


nghttp2-1.43.0 以降では、--disable-static と --enable-lib-only を入れないとエラーになります。

--disable-static とは、スタティックライブラリをインストールしないようにします。
--enable-lib-only とは、libnghttp2のみをビルドします。

コンパイル後下記の様に表示するか確認してください。
nghttp2-1.45.1 から、表示項目が増えています。

     ( 上記省略 )
 Test:
  CUnit:     no (CFLAGS='' LIBS='')
  Failmalloc:   yes
 Libs:
  OpenSSL:    yes (CFLAGS=' ' LIBS='-lssl -lcrypto ')
  Libxml2:    yes (CFLAGS='' LIBS='-lxml2 ')
  Libev:     yes (CFLAGS='' LIBS='')
  Libc-ares    yes (CFLAGS=' ' LIBS='-lcares ')
  libngtcp2:    no (CFLAGS='' LIBS='')
  libngtcp2_crypto_openssl: no (CFLAGS='' LIBS='')
  libngtcp2_crypto_boringssl: no (CFLAGS='' LIBS='')
  libnghttp3:   no (CFLAGS='' LIBS='')
  libbpf:     no (CFLAGS='' LIBS='')
  Libevent(SSL): no (CFLAGS='' LIBS='')
  Jansson:     yes (CFLAGS='' LIBS='')
  Jemalloc:    no (LIBS='')
  Zlib:      yes (CFLAGS=' ' LIBS='-lz ')
  Systemd:    yes (CFLAGS=' ' LIBS='-lsystemd ')
     ( 途中 5 行省略 )
 Third-party:
  http-parser:  no
  MRuby:     no (CFLAGS='' LIBS='')
  Neverbleed:   no
 Features:
  Applications:  no
  HPACK tools:  no
  Libnghttp2_asio:no
  Examples:    no
  Python bindings:no
  Threading:   no
  HTTP/3 (EXPERIMENTAL): no

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 が参照できない旨のエラーが出ます。

5. httpd-2.4.53 の再インストール

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

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


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


② APR と APR-util は、ソースファイルから、make と make install でインストールします。
 ( このインストールは、時間がかかります。)

   APR をインストールする。

  cd /usr/local/src/;\
  tar xvzf apr-1.7.0.tar.gz;\
  cd ./apr-1.7.0;\
  ./configure \
  make && make install

   APR-util をインストールする。

  cd /usr/local/src/;\
  tar xvzf apr-util-1.6.1.tar.gz;\
  cd ./apr-util-1.6.1;\
  ./configure \
  --with-apr=/usr/local/apr \
  make && make install

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

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

※※ 注意情報 ※※

 
nghttp2 をインストール後に、httpd-2.4.XX をインストールする時には、make で下記の様なエラーが出ますので、エラー対策をしてから、インストールしてください。

〇 httpd-2.4.47 のインストール時( make )では、下記のようなエラーが出ます。

   /bin/ld: cannot find -lidn
   /bin/ld: cannot find -lssh2
   collect2: error: ld returned 1 exit status

〇 httpd-2.4.48 のインストール時( make )では、下記のようなエラーが出ます。


   /opt/rh/devtoolset-7/……redhat-linux/7/ld: cannot find -lidn
   /opt/rh/devtoolset-7/……redhat-linux/7/ld: cannot find -lssh2

      (以下省略)

※※ httpd-2.4.XX インストール時( make )のエラー対策 ※※

このエラーは、モジュール idn、ssh2 が有るのに無いというエラー( cannot find -lidn, cannot find -lssh2 )です。
これを回避するためにこのモジュールのシンボリックリンクを再度張ってから、インストールします。


まずモジュール idn と ssh2 がどこに在るのかを検索してみます。

find / -name *ssh2*

/usr/lib64/libssh2.so.1
/usr/lib64/libssh2.so.1.0.1   
<--- これを使います。

find / -name *idn*
/usr/lib64/libidn.so.11
/usr/lib64/libidn.so.11.6.11   
<--- これを使います。

この二つのモジュールのシンボリックリンクを張ります。

cd /usr/lib64/
ln -s libidn.so.11.6.11 libidn.so   
<--- [登録名] libidn.so でシンボリックリンクを張ります
ln -s libssh2.so.1.0.1 libssh2.so   
<--- [登録名] libssh2.so でシンボリックリンクを張ります

エラー対策は、これだけです。

※※ コマンド ln の説明 ※※

ln は、リンクを作成するコマンドでオプション -s は、シンボリックリンクを張る指定です。

コマンドは、ln -s [リンク元] [登録名] の構成になります。

httpd-2.4.53 をインストールします。

  cd /usr/local/src/httpd-2.4.53;\  
<--- 又は、httpd-2.4.53
  ./configure \
  --enable-ssl \
  --with-ssl=/opt/openssl \  
<--- インスートルした openssl のパス
  --enable-ssl-staticlib-deps \ 
<--- OS 標準の openssl のライブラリが、動的に リンクされることを防ぐため。
つまり、Apache の実行ファイルと一緒に SSL モジュールを組み込む為です。

  --enable-http2 \   
<--- mod_http2.so の追加
  --with-apr=/usr/local/apr \
  --with-apr-util=/usr/local/apr \
  --enable-rewrite \
  --enable-so \
  --enable-deflate=shared \
  --enable-mods-shared=all   
<--- すべての共有モジュールをコンパイルするオプション

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

make && make install

※※ 参考情報  apr、apr-util を展開だけでする方法 ※※
( apr, apr-util のインストールをしないので早く終わります。)


 (1). httpd-2.4.53 を展開する。

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


 (2). apr, apr-util を展開する。

  
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


 (3). configureの実行

  
cd /usr/local/src/httpd-2.4.53; \
  ./configure \
   (省略)

  上記の --with-apr=/usr/local/apr \
  --with-apr-util=/usr/local/apr \ を
--with-included-apr \ に置き換えてください。

6. Apache の SSLの設定 httpd-ssl.confファイルの追加編集

10-3 項の設定が完了してから、下記を追加します。

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

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)暗号化接続の
両方で利用可


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


sed -i -e "#
#---- SSLEngine on の次の行に追加 ----------
#
/SSLEngine on/a\n\
#---- HTTP/1.1 HTTP/2 有効化 ----\n\
<IfModule http2_module>\n\
ProtocolsHonorOrder On\n\
Protocols h2 http\/1\.1\n\
</IfModule>" /usr/local/apache2/conf/extra/httpd-ssl.conf

7. Apache の SSL の設定 httpd.conf ファイルの編集

10-3 項の設定が完了してから、下記2ヶ所を変更します。

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

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

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

8. エラーのチェック

  /usr/local/apache2/bin/apachectl configtest

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

9. 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 では、[ ネット
ワーク ]の表示の項目欄で [右クリックからプロトコルを選択] が必要です。

10. 最新バージョンの OpenSSL が使用され、圧縮もされているかを
     www.port80software.com にアクセスして確認してみました。

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

右の写真のような情報が取得できます。
( 2019.03.24 アクセスしたデータ )

URL: https://www.smiyasaka.com

Web server type: Apache/2.4.39(Unix) OpenSSL/1.1.1b

Compression status: Compressed(gzip) ← 圧縮                   タイプ
Original size: 31428 bytes ← 解凍した
              後の バイト数
Compressed size: 7630 bytes ← 圧縮された                 時の バイト数
Compression % 76.0% ← 圧縮率

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

www.port80software.com からの回答
openssl-1.1.1c

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


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

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

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

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

〇 Brotli のインストール

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


   終了直前に、CMake Warning at CMakeLists.txt:319 (message): の警告が出ますが、無視してください。

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

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

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


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

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


③ httpd-2.4.53 の再インストール

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

  cd /usr/local/src; \
  tar xzvf httpd-2.4.53.tar.gz; \
  cd /usr/local/src/httpd-2.4.53;\
  ./configure \
  --enable-ssl \
  --with-ssl=/opt/openssl \  
<--- インスートルした openssl のパス
  --enable-ssl-staticlib-deps \
  --enable-http2 \
  --enable-brotli \     
<--- Brotli の組み込み
  --with-brotli=/usr/local/lib \  
<--- Brotli のパス
  --with-apr=/usr/local/apr \
  --with-apr-util=/usr/local/apr \
  --enable-mods-shared=all
  --enable-rewrite \
  --enable-deflate=shared \  
<--- 本当は、不要ですが gzip も使えるように
  --enable-so          
組み込みます

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

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

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

106行目のコメントを削除する。

#LoadModule brotli_module modules/mod_brotli.so


⑤ /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>

⑥ apache を起動します。

   systemctl start apache2


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

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


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

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


   圧縮結果のログデータは、管理者か゜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%) ………………

⑨ 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:// を付けてください。

      B

⑩ 私の Web サイトの安全性の評価を受けてみました。

 Qualys SSL LABS の提供する「 SSL Server Test 」という WebサイトにおけるSSL暗号化の安全性をチェックするための無料ツールで評価を受けてみました。
 結果は、下記の通り[ A+ ]( 安全 )と評価されました。

A

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

最新のバージョンの fswebcam-20200725 のバージョンをインストールしました。
fswebcam-20200725 のバージョンは、このままのインストールでは、文字化けが発生するので下記の対策が必要です。


2021.07.09 変更

ダウンロードは、[※ ここをクリック ※]をクリックしたら出来ます。
インストール方法は、fswebcam-20100622.tar.gz の場合と同じです。
但し、文字化けを解消するために日本語フォント( VLゴシック )を yum でインストールする必要があります。


〇 日本語フォントのインストール

cd /usr/local/src;\
yum -y install vlgothic-*

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

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

① 依存関係のあるパッケージのインストール

  cd /usr/local/src/; \
  rpm -ivh gd-progs-2.0.35-26.el7.x86_64.rpm; \
  rpm -ivh gd-devel-2.0.35-26.el7.x86_64.rpm


依存性のエラーが出るときには、yum でインストールします。

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

  cd /usr/local/src/; \
  yum -y install gd-progs gd-devel


② 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

③ make と インストール

  make && make install


以下で、終われば、インストール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

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

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

⑤ 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 カメラのシリアル番号なので同一機種でも、カメラを入れ替えれば変わります。)


12. clamav-0.103.2-1 ( アンチウィルスソフト )のインストール

    [ 2021.05.13 現在 ]
○ clamav-0.103.2-1 のインストール・設定手順


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


インストールの順序は、下記の通りにしてください。
    「エラー: 依存性の欠如:」になります。


   cd /usr/local/src; \
   
rpm -Uvh pcre2-10.23-2.el7.x86_64.rpm; \   <---- 0.10X.X のバージョンから必要になりました。
   
rpm -Uvh libprelude-5.2.0-2.el7.x86_64.rpm; \
   rpm -Uvh clamav-filesystem-0.103.2-1.el7.noarch.rpm; \
   rpm -Uvh clamav-data-0.103.2-1.el7.noarch.rpm; \
   rpm -Uvh clamav-lib-0.103.2-1.el7.x86_64.rpm; \
   rpm -Uvh clamav-update-0.103.2-1.el7.x86_64.rpm; \
   rpm -Uvh clamav-0.103.2-1.el7.x86_64.rpm

   rpm のインストールで依存関係のエラーが出るときには、yum でインストールしてください。

※ yum での最新版のインストール方法 ※

   cd /usr/local/src;\
   yum -y install epel-release;\
   yum -y --enablerepo=epel install clamav clamav-update

※※ 参考情報 ※※ clamav 旧バージョンのアンインストール

  1.
旧バージョンのアンインストールは、まず、rpm -qa | grep clam でインストール済のパ ッケージの確認をします。
   アンインストールは、インストールと逆の順番に行ってください。
   順序が違うと依存性のエラーが出ます。
   なお、各パッケージ名は、.rpm を取った名前になります。注意してください。
  2. バージョンアップのインストールした時の再設定は、下記の④,⑤,⑨項の設定を行い、    freshclam を実行するだけです。


ユーザ : 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 : ログインされても何もせずに終了します。


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

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

   grep clam /etc/group

   clamupdate:x:990:
   clamav:x:1001:

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

   grep clam /etc/passwd

   clamupdate:x:991:990:Clamav database update user:/var/lib/clamav:/sbin/nologin
   clamav:x:1001:1001:Clam AntiVirus:/home/clamav:/bin/false

④ 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   
<---- ウィルスデータベースの所有者

⑤ 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 に変更します。

⑥ ウィルス定義ファイルの最新化

下記コマンドを実行。

   freshclam

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

※ 参考情報 ※
   freshclam を実行した時に、下記エラーになる時の対策方法

   ERROR: Can't change dir to /usr/local/share/clamav

   ディレクトリ /usr/local/share/clamav を作り、所有者を clamav に移行する。

   mkdir /usr/local/share/clamav;\
   chown clamav /usr/local/share/clamav

   所有者を移行しないと、下記の様なエラーメッセージが出ます。

ERROR: Can't create temporary directory /usr/local/share/clamav/clamav-a…(省略)….tmp
Hint: The database directory must be writable for UID 1001 or GID 100

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


   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: 4830340
  Engine version: 0.99.2
  Scanned directories: 1
  Scanned files: 7
  Infected files: 0  
<---- 検知したウイルスの数。
   Data scanned: 0.00 MB
  Data read: 0.00 MB (ratio 0.00:1)
  Time: 38.824 sec (0 m 38 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

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

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

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


上記サイトの例を参考にしてチョット手を入れてみました。

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

            [ここをクリック]してください。

⑨ 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 
<---- ログファイルが空ならローテーションしない。
  }

⑩ 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

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

  ClamAVは EPELレポジトリにあるので、EPELレポジトリを追加します。

① EPELレポジトリのインストール

  yum install -y epel-release

② yum で ClamAV をアップデートします。

  yum -y --enablerepo=epel update clamav

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

  バージョンの確認コマンド

  rpm -qa | grep clam

アップデート前のバージョン

clamav-data-0.103.4-1.el7.noarch
clamav-lib-0.103.4-1.el7.x86_64
clamav-filesystem-0.103.4-1.el7.noarch
clamav-update-0.103.4-1.el7.x86_64
clamav-0.103.4-1.el7.x86_64

↓ ↓ ↓

アップデート後のバージョン 2022.01.24 現在

clamav-data-0.103.5-1.el7.noarch
clamav-lib-0.103.5-1.el7.x86_64
clamav-filesystem-0.103.5-1.el7.noarch
clamav-update-0.103.5-1.el7.x86_64
clamav-0.103.5-1.el7.x86_64



13. chkrootkitの導入

① chkrootkit のインストール

make で下記エラーでるので不足パッケージ( glibc-static )をインストールしておきます。

---------------------------------------------------
/bin/ld: -lc が見つかりません

collect2: エラー: ld はステータス 1 で終了しました
make: *** [strings-static] エラー 1。

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


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

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

② chkrootkit のインストール

  cd /usr/local/src; \
  tar zxvf chkrootkit.tar.gz; \
  cd chkrootkit-0.50; \
  make sense; \
  mv ./chkrootkit /usr/bin/chkrootkit

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

  cd /usr/local/src; \
  vi rootkit.sh
-----------------------------------------------------------
#!/bin/sh
# コマンドパスの設定
PATH=/usr/bin:/bin:/root/bin  
<--- 環境変数へ chkrootkit のパス設定
#
LOG='/var/log/chkrootkit.log'

# chkrootkit実行
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 のパッケージ名がられました。

rpm -V ○○○○は、パッケージ名○○○○が、改ざんされていないかを検証するコマンドです。

改ざんがなかった時には、何の出力もありません。


if ! ○○○○は、○○○○の文字列が、0 の時に then 以下が実行されます。

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


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

④ rootkit.sh に属性設定

   chmod 700 rootkit.sh

⑤ 毎日2時に実行するよう cron に設定する。

   0 2 * * * /usr/local/src/rootkit.sh

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

root 宛てにメールが、来ているので確認する。

mail コマンドを入力して rootkit check OK が、表示すれば、ハッカーの攻撃は、なしです。


詳細の設定は、下記サイトを参考にしてください。

※ 参考にしたサイト rootkit検知ツール導入(chkrootkit)

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

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

⑧ 「 Searching for Suckit rootkit... Warning: /sbin/init INFECTED 」の誤検知対策

( 2018.09.16 追加 )
この誤検知は、必ず出るので、ウィルススキャン実行スクリプト 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 hesiod-3.2.1-3.el7.x86_64.rpm; \
  rpm -Uvh procmail-3.22-36.el7.x86_64.rpm; \
  rpm -Uvh sendmail-8.14.7-5.el7.x86_64.rpm

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

  yum -y install sendmail

○ sendmail を起動します。

  systemctl start sendmail

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

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

  systemctl enable sendmail

  # が表示するば OK です。

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

※ 参考にしたサイト mail コマンドの使い方


15. Logwatch のインストールと毎日のメールを簡単にチェックする方法


サーバー上のログを定期的にまとめ、集約してレポートを出してくれるソフトウェアのインストール。


  cd /usr/local/src/; \
  rpm -ivh logwatch-7.5.4-1.noarch.rpm

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

  yum -y install logwatch

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

○ 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/
s/Detail = Low/Detail = Med/
s/sendmail -t/sendmail -t -f root@localhost/
s/#LogDir/LogDir/" /usr/share/logwatch/default.conf/logwatch.conf


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

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

#Archives = Yes
  ↓
Archives = Yes

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

Detail = Low
     ↓
Detail = Med

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

  mailer = "/usr/sbin/sendmaill -t"
   ↓  ↓  ↓
  mailer = "/usr/sbin/sendmaill -t -f root@localhost"

ログが保存されているディレクトリ
139行目 # 削除

#LogDir = /var/log
    ↓
LogDir = /var/log

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
<---- 変更後のグロバル
★ 12/19 15:03 にmiyasaka.comが実行されました         
IPアドレス
  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

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


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

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


17. 自前プログラムでダイナミック DNS を定期更新させる。

 2020年10月10日 変更( DiCE の処理関係を削除し、下記を追加する。)
ダイナミック DNS サービスとは、動的( ダイナミック )に、変動するユーザーのグローバルIPアドレスに対して、固定のホスト名( ドメイン名 )でつないでくれるサービスのことです。 一般的に ネームサーバー( 別名 DNS サーバー ・ DNS とは Domain Name System と呼んでいます。)

長年ネームサーバーの更新は、DiCE に頼って行ってきましたが、最近、更新してもすべて 「 Error: エラー! 」になり、対策に思案してきました。

色々検証しましたが、解決することができないので、自前ですることにしました。
私のドメインのネームサーバーは、VALUE DOMAIN を使用しています。
VALUE DOMAIN のネームサーバーの更新は、下記の様なコマンドを送信することで出来ます。

https://dyn.value-domain.com/cgi-bin/dyn.fcg?d=[ドメイン]&p=[パスワード]&h=[ホスト名]&i=[IP アドレス]

なお、&i=[IP アドレス] を諸略した時には、アクセス時のグローバル IP アドレスが割り振られます。
このコマンドでは、a レコード( ホストのIPアドレス )のみの書き換えになります。

このコマンドを利用して sh (シェルスクリプト)で、下記の様なプログラムを作成して crontab で定期的に実行させネームサーバーの定期更新( 1日と15日 )を させる方法にしました。( たぶん、DiCE の処理もこのコマンドで処理していると思います。)
crontab で定期更新 1日と15日 の 23 時に実行させるのは、
* 23 1,15 * * /root/VALUE_DOMAIN_DNS_set.sh > /dev/null 2>&1
と設定しています。

  プログラムの説明

アクセス用のコマンドは、sh からは、wget を使用して行います。
実行結果は、DiCE のログと同じファイルに追加書き込みしています。
今まで、DiCE のログをチェックしてきたので、同じファイルにすることにより、DiCE のログとしてチェックできるようにする為です。

https://dyn.value-domain.com/cgi-bin/dyn.fcg?ip は、実行時のグローバルIPアドレスをログに残すために挿入しています。

sleep 2s は、同じサイトを連続してアクセスしないよう、待ち時間を入れてます。

vi VALUE_DOMAIN_DNS_set.sh

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

#!/bin/sh
#
# 
VALUE DOMAIN DNS サーバー 更新処理 IPアドレスは、省略
# 
省略時は、アクセス時のIPアドレスがセットされる。
#
#  
date コマンド %-d : 先頭の 0 カット
#  
%_H : 先頭の 0 をスペースにする H : 24時間表示
#  
mm/dd hh:mm 形式 日付データ作成
#
echo -ne "$(date +"%_m")/$(date +"%-d") $(date +"%_H"):$(date +"%M")\n" >> /usr/local/DiCE/log/events.log
#
#   
IPアドレス取得
#
wget -O - 'https://dyn.value-domain.com/cgi-bin/dyn.fcg?ip' >> /usr/local/DiCE/log/events.log
#
#   
改行 追加
#
echo -ne "\n" >> /usr/local/DiCE/log/events.log
#
sleep 2s     
# 2 秒待
#
#  
VALUE DOMAIN ネームサーバー登録IPアドレス更新
#
wget -O - 'https://dyn.value-domain.com/cgi-bin/dyn.fcg?d=XXXXXX.XXX&p=○○○○&h=*' >> /usr/local/DiCE/log/events.log
#

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

※ wget -O - (大文字オー)で実行結果を書き出す。(引数に「-」を指定すると標準出力)
※ >> /usr/local/DiCE/log/events.log で出力結果を events.log へ追加する。
※ XXXXXX.XXXは、www 無しのドメイン名です。
※ 〇〇〇〇は、VALUE DOMAIN ログイン用のパスワードです。
※ echo -ne は、改行(\n)を echo コマンドで有効にさせるためのオプションです。
※ 他社のネームサーバーを利用したいときには、最終行の https:// の設定以下をそのネームサーバーの仕様に合わせて使用ください。


下記は、上記のプログラムを実行した時の出力結果です。

10/9 23:00
119.150.8.211
status=0
OK

   グローバルIPアドレスが、変化したときの対策

私のサーバ機の環境で グローバル IP アドレス が、変化する要因は、99% 停電によるモデム(ブロードバンドルータ)の再起動によるインターネットサービスプロバイダ(ISP)の グローバル IP アドレス 再割り当てです。
その他、光回線のメンテナンス等て、数年に一回ほどありました。( 事前に連絡ありました。)

私は、その都度 VALUE DOMAIN に直接アクセスして グローバル IP アドレス の変更を手作業で行ってきました。
この方法だと、10~20分でネームサーバーが反映してくれました。
( 2022年 1月現在、数分で反映されています。)

アクセス先は、https://www.value-domain.com/moddns.php?action=moddns2&domainname=[ドメイン] で直ぐログインできます。

私の場合 グローバル IP アドレス の変更の自動検知は、したとしても一日一回程度で良いのかと思っています。
よって自動検知は、一日一回とし、変更時は、手作業で変更作業をすることにしました。

グローバル IP アドレス の定期更新は、最低でも月一回程度しないとネームサーバー側に無視されるので上記の方法で定期更新を実行するようにしました。

※※ 参考になりますか?。[ グローバル IP アドレス 変化チェックのプログラム ] ※※

下記の様な、グローバル IP アドレス 変化チェックのプログラムを作ってみました。

下記 crontab は、10分毎実行させる時の設定例です。

*/10 * * * * /root/IP_Check.sh > /dev/null 2>&1


   vi IP_Check.sh

#!/bin/sh
#
#------------------------------------------------
#
モデム(ブロードバンドルータ)が、管理しているIPアドレスを取得
#
Atermip=$(wget -O - 'http://dyn.value-domain.com/cgi-bin/dyn.fcg?ip')
#
#Atermip="000.000.000.000"   
# Test 用 IPアドレス
echo "Aterm G.IP $Atermip"      
# 確認用
#
#------------------------------------------------
#
dig コマンドでネームサーバが認識しているIPアドレスを取得
#
結果を get_data に格納する
#
;; ANSWER SECTION:行の次の行を取得する( grep -A 1 )
#
get_data=$(dig
[www 付きドメイン名]> | grep -A 1 ";; ANSWER SECTION:" | grep [www 付きドメイン名])
#
#
ドメインのある行のみが抽出されます
#
IP_file_Array=(`echo ${get_data}`) 
# 配列として代入
#
echo "dig G.IP ${IP_file_Array[4]}"   
# 5番目に IPアドレス 確認用
#
myip=$(echo -n ${IP_file_Array[4]})
# 改行削除
#
#echo "${myip} 改行削除"       
# 改行削除確認用
#---------------------------------------------------------
#
グローバルIPアドレス 判定  相違の時 更新処理をさせる。
#
if [ ${Atermip} != ${myip} ]; then
#
        echo "IPアドレス変更"
## ( ここに グローバルIPアドレス 更新の処理を記述する。)
#
else
        echo "変化無し"
fi
#
# 終了
#------------------------------------------------




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

 1 ). サーバ機交換手順の操作単純化

私のサーバ機は、サーバ専用の機器で無いので月一程度の頻度で予備機と交換して運用しています。
普段予備機は、現行サーバ機からのバックアップを取る為 IP アドレスを別にしています。

サーバ機交換には、現行サーバ機の DiCE の無効化 ==> IP アドレスの変更 ==> プロセスの自動 監視の (crontab)停止 ==> 電源断を実行。

予備機は、DiCE の有効化 ==> IP アドレスの変更 ==> プロセスの自動監視のの有効化 ==> 再起動を実行これら設定には、多々のコマンドを入力しなければなりません。

私のサーバ管理では、これらの一連のコマンド入力をシェルスクリプトとしてプログラム化して操 作単純化を図 っています。
以下にそれらを自動実行させるシェルスクリプトを紹介します。ここまで勝手にいじくりまわして 良いのか分かりませんが、自宅サーバ機なので自己責任で行っています。


 ① 現行サーバ機で実行させるコマンド群のシェルスクリプト


#!/bin/bash
#
# DiCE.service を停止するコマンド実行
# IPアドレスを 192.168.0.HH に変更してシステム停止する
#----------------------------------------------------------------------
# DiCE の無効化
systemctl stop DiCE.service
systemctl disable DiCE.service

# IPアドレス 192.168.0.XX ---> 192.168.0.HH
sed -i -e "s/192\.168\.0\.XX/192\.168\.0\.HH/g"\
/etc/sysconfig/network-scripts/ifcfg-enp2s0

# crontab の変更 コメント化(プロセスの自動監視の停止)
# * * * * * /var/www/system/New_check_process.pl のコメントアウト
sed -i -e "/New_check_process\.pl/s/^/#/" /var/spool/cron/root

# 電源断
poweroff
#----------------------------------------------------------------------


 ② 予備機で実行させるコマンド群のシェルスクリプト

( 現行機と予備機を入替えてから、実行します。)

#!/bin/bash
#
# DiCE.service を起動
# IPアドレスを 192.168.0.XX に変更して再起動する
#----------------------------------------------------------------------
# DiCE の有効化
systemctl enable DiCE.service
systemctl start DiCE.service

# IPアドレス 192.168.0.HH ---> 192.168.0.XX
sed -i -e "s/192\.168\.0\.HH/192\.168\.0\.XX/g"\
/etc/sysconfig/network-scripts/ifcfg-enp2s0

# crontab の変更 コメント削除(プロセスの自動監視の有効化)
# #* * * * * /var/www/system/New_check_process.pl の # を削除する
sed -i -e "/New_check_process\.pl/s/^#//" /var/spool/cron/root

# 再起動
reboot
#----------------------------------------------------------------------


 ③ SDカードへの定期バックアップとSDカードからの復元

本体にSDカードリーダがあるので、ホームページプログラム・各種データを圧縮したバックア ップデータとして毎日保存して、サーバ機の入れ替えやシステムクラッシュで復旧できない時 でも、予備機で前日の状態に戻せるようにしています。後は、今日変化したデータ(アクセスカ ウンター値・アパッチログデータ等)を移行することにより、現行機と同じ状態にすることが出 来ます。
定点カメラのデータも本体に書込んだ時と同時にSDカードにも書込んでいます。


これにより、SDカードを予備機に差し替え、復元するだけで簡単に前日の状態に戻せます。
復元プログラムもシェルスクリプトで作成し自動化しています。



これにより現用機から、予備機への定期バックアップ作業も、不要になりました。(従来、バッ クアップデータの、転送は現用機と予備機を同時に稼働してLAN回線経由で手作業により行っていました。)

2 ). apache のメンテナンス用に、httpd-2.4.XX と httpd-2.4.6 を常駐させ、
  コマンドで簡単に切り替えられる様にする。


数か月単位で httpd-2.4.XX、openssl、nghttp2、brotli のバージョンアップあり、その都度、サーバを停止するのは、まずいので バージョンアップに対するメンテナンスの時には、一時的に apache を htppd-2.4.6 に切り替えて行えるように htppd-2.4.6 も 動作するよう設定しておきます。
なお、SELinux のポリシーは、htppd-2.4.6 用として新規に設定をする必要があります。

httpd-2.4.XX と httpd-2.4.6 を切り替えは、sh でプログラムを作り root に登録してコマンドで簡単に切り替えられる様にしています。

下記は、その切り替え用のプログラム( sh プログラム )です。
動作確認の為に status 表示をするようにしています。


  apache2 ---->> httpd-2.4.6 への切り替え

#!/bin/bash
# apache2 ---->> httpd
#-----------------------------
# apache2 の 無効化
systemctl disable apache2
systemctl stop apache2

# httpd の有効化
systemctl enable httpd
systemctl start httpd
systemctl status httpd
#-----------------------------

  httpd-2.4.6 ---->> apache2 への切り替え

#!/bin/bash
# httpd ---->> apache2
#-----------------------------
# httpd の 無効化
systemctl disable httpd
systemctl stop httpd

# apache2 の有効化
systemctl enable apache2
systemctl start apache2
systemctl status apache2
#-----------------------------


3 ). 止まっては困るプロセスの自動監視

私のサーバ機では、プロセスコマンド( ps -ef )で httpd,sshd,vsftpd/proftpd,DiCE が起動し ているかを 1 分毎にチェックし、止まっている場合は、起動するようにして運用しています。

例えば、http が起動している時には、「/usr/local/apache2/bin/httpd」の文字列が有ること
で起動中と判定しています。

下記は、perl で作成したプロセス監視プログラムの例です。参考にしてみてください。 監視は、cron で 1 分毎に下記プロセス監視プログラムを起動するだけです。

[ Linux サーバプロセス監視プログラム ] の詳細は、

            [ここをクリック]してください。



 4 ). CPU 温度の監視

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

   cd /usr/local/src; \
   rpm -Uvh lm_sensors-3.4.0-8.20160601gitf9185e5.el7.x86_64.rpm

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

   yum -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";
-----------------------------------------------------------



 5 ). ftp のインストール

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

   cd /usr/local/src; \>
   rpm -Uvh ftp-0.17-67.el7.x86_64.rpm

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

   yum -y install ftp


 6 ). OS(カーネル)のバージョンアップ後の対策(古いカーネルの削除)

OS のバージョンアップがあった時( yum -y update )には、OS のバージョンは、変わります

が正式には、reboot としないとカーネルのバージョンは、変わりませんので注意して下さい。
カーネルのバージョンアップは、時々ありますのでその都度、reboot する必要があります。

カーネルのバージョンは、CentOS 7 では月一位のペースで更新されその都度 reboot をしてい
くと /boot エリヤを占領し古いカーネルのバージョンを削除する必要が出てきます。
古いカーネルのバージョンを削除する手順を紹介します。


削除手順

   a. /boot エリヤの使用量を下記コマンドで調べます。

    df -m /boot

    表示例

    Filesystem  1M-blocks Used Available Use% Mounted on
    /dev/sda1  497 248  249 50% /boot

   b. /boot の中を下記コマンドで確認します。

    ls -l /boot

合計 219604
-rw-------. 1 root root 2963297 5月 12 20:13 System.map-3.10.0-327.18.2.el7.x86_64
-rw------- 1 root root 2963822 6月 24 02:14 System.map-3.10.0-327.22.2.el7.x86_64
-rw------- 1 root root 2964683 8月 3 20:21 System.map-3.10.0-327.28.2.el7.x86_64
-rw------- 1 root root 2964731 8月 19 04:15 System.map-3.10.0-327.28.3.el7.x86_64
-rw-------. 1 root root 2963044 11月 20 2015 System.map-3.10.0-327.el7.x86_64

    ( 以下省略 )

    五世代のカーネルのバージョンが保存されています。

   c. 下記コマンドで古いカーネルをすべて削除します。

    package-cleanup --oldkernels --count=1 
<---- 一世代だけ残します。二世代までは、2 とします。
    実行例

読み込んだプラグイン:fastestmirror, langpacks, priorities
---> トランザクションの確認を実行しています。
---> パッケージ kernel.x86_64 0:3.10.0-327.el7 を 削除
---> パッケージ kernel.x86_64 0:3.10.0-327.18.2.el7 を 削除
---> パッケージ kernel.x86_64 0:3.10.0-327.22.2.el7 を 削除
---> パッケージ kernel.x86_64 0:3.10.0-327.28.2.el7 を 削除
---> パッケージ kernel-devel.x86_64 0:3.10.0-327.el7 を 削除
---> パッケージ kernel-devel.x86_64 0:3.10.0-327.18.2.el7 を 削除
---> パッケージ kernel-devel.x86_64 0:3.10.0-327.22.2.el7 を 削除
---> パッケージ kernel-devel.x86_64 0:3.10.0-327.28.2.el7 を 削除
---> 依存性解決を終了しました。

    ( 途中省略 )

    インストール容量: 507 M
    上記の処理を行います。よろしいでしょうか? [y/N]y
<---- y を入力します。

    ( 途中省略 )

    削除しました:
    kernel.x86_64 0:3.10.0-327.el7      kernel.x86_64 0:3.10.0-327.18.2.el7
    kernel.x86_64 0:3.10.0-327.22.2.el7    kernel.x86_64 0:3.10.0-327.28.2.el7
    kernel-devel.x86_64 0:3.10.0-327.el7   kernel-devel.x86_64 0:3.10.0-327.……
    kernel-devel.x86_64 0:3.10.0-327.22.2.el7 kernel-devel.x86_64 0:3.10.0-327.……

    完了しました!

   c. どれだけ容量が減ったかの確認をします。

     df -m /boot

    ファイルシス  1M-ブロック 使用 使用可 使用% マウント位置
    /dev/sda1  497  108  390 22% /boot

    50% が 22% になりました。

   d. /boot の中を下記コマンドで再確認してみます。

    ls -l /boot

合計 75708
-rw------- 1 root root 2964731 8月 19 04:15 System.map-3.10.0-327.28.3.el7.x86_64
-rw-r--r-- 1 root root 126431 8月 19 04:15 config-3.10.0-327.28.3.el7.x86_64

    ( 以下省略 )

    最新のカーネルのバージョンだけになっています。



 7 ). root 権限の不要なログデータの強制削除する方法

私の場合定期的にサーバ機を入替えて使用している関係で ディレクトリ/var/log に全く必 要のないログファイルが 作成日の日付ファイル名 cron-20160918 とか maillog-20160918 , messages-20160918 といったファイル名で保存され目につくようになりました。
これらファイルは、root 権限のファイルなので通常の操作では、削除できません。何とか簡 単に削除する方法はないかと調べたら、rm に空のオプション( rm -- )を付けると削除できる 事がわかりましのた。
下記は、rm に空のオプションを付けた時のコマンド例です。なお、ファイル一覧は、コマンド   ls -l で確認してください。


   cd /var/log  
<---- ディレクトリ /var/log に移動します。
   rm -- cron-20160918  
<---- cron のログファイルの削除例

   
rm: 通常ファイル `cron-20160918' を削除しますか? の様に削除して良いか聞かれますので、
   y を入力します。

   くれぐれも必要なファイルを削除しないようにしてください。


ログファイルの種類

  
 ファイル名 と  記録されるログの内容 

    btmp      : 各ユーザーのログイン失敗情報   
    cron      : cron実行時の情報
    freshclam.log  : clamavのウィルスアップデート結果
    maillog     : メールプログラムが出力したメッセージ
    messages     : デーモンの動作状況
    secure     : ログインなど認証を実行した情報
    spooler     : 印刷スプールに関する情報
    wtmp       : ログイン情報
    yum.log     : yumの操作結果


 8 ). サーバ機の IP アドレスを簡単に変更する方法

IP アドレスの変更は、直接 vi /etc/sysconfig/network-scripts/ifcfg-enp2s0 とキー入力して行いますが コマンドがやたら長いのでなかなか正しく入力出来なくてイライラすることがあります。

CentOS7 には、nmtui という system-config-network-tui> の代替となるコマンドがある事が
わかりました。

このコマンドを使うと簡単にアドレスが変更できるようになります。


使い方は、nmtui と入力するだけです。以下は、その手順です。

① コマンド nmtui を入力すると写真 ① が表示します。

② [接続の編集]が選択されている事を確認したら [Enter]キーを入力します。
③ 写真 ②が表示されます。デバイス名 enp2s0 が選択されている事を確認したら [Enter]
キーを入力します。
④ 写真 ③が表示されます。矢印キーで IPv4 アドレスにフォーカスを移動しアドレスを修正
してフォーカスを <OK>に移動し[Enter]キーを入力します。

IPアドレスは、 (例) 192.168.0.XX/24 の内 XX だけを変更してください。
/24 は、ネットマスク(255.255.255.0)と同じ意味です。

⑤ 再度写真 ②が表示されます。矢印キーで <終了>にフォーカスを移動し[Enter]キーを

入力します。
⑥ IP アドレスを有効にするには、systemctl restart NetworkManager か reboot を入力
します。

写真 ①A 写真 ②B 写真 ③C


 9 ). サーバ機起動時に SDカードを自動でマウントする方法

SDカードは、サーバ機起動時自動でマウントされないので私の場合、下記の様な方法でマウ
ントしてみました。


① SDカードを差し込んで認識されるデバイス名をコマンド lsblk で調べます。

コマンド lsblk の表示例

     NAME MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
     sda 8:0    0 119.2G  0 disk
     |-sda1 8:1    0   500M  0 part /boot
     `-sda2 8:2    0   117G  0 part
              ( 省略 )
     sdb      8:16   1  14.7G  0 disk
     `-sdb1   8:17   1  14.7G  0 part      <-- SDカードのデバイス名

( -sdb1 が表示しない時は、SDカードのデバイス名は、sdb になります。)
※ 参考情報 ※ 上記の表示例は、ONKYO DP315 PC の場合で、

     mouse PC の場合は、sdb でなく

    16GB の場合

       mmcblk0       179:0    0  14.7G  0 disk
       `-mmcblk0p1   179:1    0  14.7G  0 part

     4GB の場合

       mmcblk0  179:0    0   3.7G  0 disk


となりました。

② 起動時にマウントを実行させる為のサービス(一例)を作成します。

  vi /usr/lib/systemd/system/SD_Card_mount.service で下記をコピペする
( サービス名 SD_Card_mount は、適当に付けてください。)
---------------------------------------------------------------------------

[Unit]
Description= SD_Card_mount
After=network.target

[Service]
Type=simple
ExecStart=/root/SD_Card_mount.sh

[Install]
WantedBy=multi-user.target

設定項目の説明

Description= 〇〇〇〇   <---- サービスのタイトル(任意の文字列)
After=network.target   <---- networkが起動してから実行
Type=simple       <---- コマンドを実行したらすぐに起動完了
ExecStart=/root/SD_Card_mount.sh  <---- 実行コマンド

サービス SD_Card_mount が起動時に実行する様に設定する。

   systemctl enable SD_Card_mount

再起動後、systemctl status SD_Card_mount でステータスを確認をしてみると 一元のサービスなので、ステータスは、inactive (dead) 動作していない(死んでいる)に成っています。

* SD_Card_mount.service - SD_Card_mount
Loaded: loaded (/usr/lib/systemd/system/SD_Card_mount.service; enabled;
vendor preset: disabled)
Active: inactive (dead) …… 以下省略

③ SDカードのマウントを実行するプログラムの作成

   vi SD_Card_mount.shで下記をコピペする ( root 上に作成 )

---------------------------------------------------------------------------
#!/bin/sh
#---------------------------------------------
# システム起動時に SDカードをマウント
#---------------------------------------------
# sdb がない時(エラーの時)には、次のコマンド sdb1 をマウント実行する指定
#
mount -t vfat /dev/sdb /mnt/SD_Card || mount -t vfat /dev/sdb1 /mnt/SD_Card
---------------------------------------------------------------------------


  ※ 注意 ※ sdb, sdb1 は、貴方のPC 環境に合わせてください。
        /mnt にマウント先がない時には、事前に作成してください。
        (例) マウントディレクトリ SD_Card を /mnt に作成する。

     mkdir -p /mnt/SD_Card

④ マウントされるかのテスト

コマンド systemctl start SD_Card_mount を実行し、コマンド lsblk で確認する。


     sdb       8:16  1 14.7G  0 disk
     `-sdb1      8:17  1 14.7G  0 part /mnt/SD_Card

    この例の様にマウント先が表示されれば OK です。
    このサービスは、一回限りの実行なので、再実行も start になります。


戻る