前回記事 rpm パッケージの設定ファイルを初期の設定に戻したい
rpm コマンドを使って、変更した設定ファイルを探します。
# systemctl start httpd Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details. # systemctl status httpd ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) Active: failed (Result: exit-code) since 金 2017-12-15 11:01:27 JST; 5s ago Docs: man:httpd(8) man:apachectl(8) Process: 2402 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE) Process: 2401 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE) Main PID: 2401 (code=exited, status=1/FAILURE) 12月 15 11:01:26 192.168.0.10 systemd[1]: Starting The Apache HTTP Server... 12月 15 11:01:27 192.168.0.10 httpd[2401]: httpd: Syntax error on line 353 of /etc/httpd/conf/httpd.conf: Syntax error on line 8 of /etc/httpd/conf.d/welcome.conf:...not closed. 12月 15 11:01:27 192.168.0.10 systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE 12月 15 11:01:27 192.168.0.10 kill[2402]: kill: cannot find process "" 12月 15 11:01:27 192.168.0.10 systemd[1]: httpd.service: control process exited, code=exited status=1 12月 15 11:01:27 192.168.0.10 systemd[1]: Failed to start The Apache HTTP Server. 12月 15 11:01:27 192.168.0.10 systemd[1]: Unit httpd.service entered failed state. 12月 15 11:01:27 192.168.0.10 systemd[1]: httpd.service failed. Hint: Some lines were ellipsized, use -l to show in full.
httpd.conf のエラー箇所は分かったが、まだ httpd が起動してこない。httpd パッケージの中身を検索すると httpd.conf 意外にも設定ファイルがある事が分かります。
$ rpm -ql httpd|grep conf /etc/httpd/conf /etc/httpd/conf.d /etc/httpd/conf.d/README /etc/httpd/conf.d/autoindex.conf /etc/httpd/conf.d/userdir.conf /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.modules.d /etc/httpd/conf.modules.d/00-base.conf /etc/httpd/conf.modules.d/00-dav.conf /etc/httpd/conf.modules.d/00-lua.conf /etc/httpd/conf.modules.d/00-mpm.conf /etc/httpd/conf.modules.d/00-proxy.conf /etc/httpd/conf.modules.d/00-systemd.conf /etc/httpd/conf.modules.d/01-cgi.conf /etc/httpd/conf/httpd.conf /etc/httpd/conf/magic /etc/sysconfig/htcacheclean /etc/sysconfig/httpd /usr/lib/tmpfiles.d/httpd.conf /usr/lib64/httpd/modules/mod_log_config.so /usr/libexec/initscripts/legacy-actions/httpd/configtest /usr/share/doc/httpd-2.4.6/httpd-dav.conf /usr/share/doc/httpd-2.4.6/httpd-default.conf /usr/share/doc/httpd-2.4.6/httpd-info.conf /usr/share/doc/httpd-2.4.6/httpd-languages.conf /usr/share/doc/httpd-2.4.6/httpd-manual.conf /usr/share/doc/httpd-2.4.6/httpd-mpm.conf /usr/share/doc/httpd-2.4.6/httpd-multilang-errordoc.conf /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf /usr/share/doc/httpd-2.4.6/proxy-html.conf
ls -l でタイムスタンプを確認してもよいが今回はパッケージの勉強をしているので rpm コマンドで変更を確認してみましょう。
# ls -l /etc/httpd/conf.d/ 合計 16 -rw-r--r-- 1 root root 366 10月 20 05:39 README -rw-r--r-- 1 root root 2926 10月 20 05:39 autoindex.conf -rw-r--r-- 1 root root 1252 10月 20 01:44 userdir.conf -rw-r--r-- 1 root root 824 12月 15 11:03 welcome.conf
rpm コマンドに -V, –verify オプションをつけて実行すると rpm のデータベースに格納されているパッケージのデータから得られたファイルに関する情報とインストールされているファイルを比較します。
タイムスタンプの他に、ユーザ、グループ、変更の有無なども分かります。
# rpm -V httpd S.5....T. c /etc/httpd/conf.d/welcome.conf S.5....T. c /etc/httpd/conf/httpd.conf
S: ファイルのサイズ (Size) が異なる
M: モード (Mode; 許可属性とファイルの種類) が異なる
5: MD5 チェックサムが異なる
D: デバイス (Device) のメジャー/マイナー番号が一致しない
L: readLink(2) したパスが一致しない
U: 所有者 (User) が異なる
G: グループ (Group) が異なる
T: 修正時刻 (mTime) が異なる
c %config 設定ファイル。
d %doc 文書ファイル。
g %ghost ファイル(すなわち、パッケージの内容物としては含まれていないファイル)。
l %license ライセンスファイル。
r %readme readme ファイル。
MD5 : 認証やデジタル署名などに使われるハッシュ関数のひとつ。原文が改竄されていないかを検出する為などに用いられる。
また rpm -V で、不意の事故で壊れてしまったファイルも検出する事が出来ます。
前回記事と同じように上書きインストールする事により壊れたファイルも元通りになります。しかし、ここでよく注目して下さい。”c” のマークがある設定ファイルは強制的に上書きインストールしてもファイルが上書きされていません。これは、パッケージをインストール、アップデートする際の「初期の設定ファイルになんらかの変更がなされた場合、設定ファイルの上書きは行わない」という rpm のルールがあるからです。
よって、前回記事では、前もって設定ファイルを削除してから rpm を強制インストールしていたのです。
# yumdownloader httpd Loaded plugins: refresh-packagekit httpd-2.4.6-67.el7.centos.6.x86_64.rpm # rpm -Uvh httpd-2.4.6-67.el7.centos.6.x86_64.rpm --force 準備しています... ################################# [100%] 更新中 / インストール中... 1:httpd-2.4.6-67.el7.centos.6 ################################# [100%] [root@dhcp-146 ~]# rpm -V httpd S.5....T. c /etc/httpd/conf.d/welcome.conf S.5....T. c /etc/httpd/conf/httpd.conf # rm /etc/httpd/conf/httpd.conf rm: 通常ファイル `/etc/httpd/conf/httpd.conf' を削除しますか? y # rpm -Uvh httpd-2.4.6-67.el7.centos.6.x86_64.rpm --force 準備しています... ################################# [100%] 更新中 / インストール中... 1:httpd-2.4.6-67.el7.centos.6 ################################# [100%] # rpm -V httpd S.5....T. c /etc/httpd/conf.d/welcome.conf
もしディストリビュータがパッケージのアップデートをリリースするたびに設定ファイルが上書きされてしまったらユーザはそのたびに再設定を行わなければならなくなります。rpm は、パッケージを管理するデータベースにこれらの情報を持っているので設定ファイルは上書きされないのです。
なお rpm -Va とすると全パッケージの変更履歴データが取得出来るのでpックアップを取っておけばシステム改竄のチェックデータとして利用することも出来ます。
# rpm -Va S.5....T. c /etc/sysconfig/authconfig ....L.... c /etc/pam.d/fingerprint-auth ....L.... c /etc/pam.d/password-auth ....L.... c /etc/pam.d/postlogin ....L.... c /etc/pam.d/smartcard-auth ....L.... c /etc/pam.d/system-auth S.5....T. c /etc/php-fpm.d/www.conf S.5....T. c /etc/httpd/conf.d/welcome.conf : # rpm -Va >rpmlist.data