CentOS 7 Apacheインストール

Webサーバ(Apache)

■Apache がインストールされてるかどうか確認する。

[root@server1 ~]# rpm -q httpd
パッケージ httpd はインストールされていません。

■Apache のインストール

[root@server1 ~]# yum -y install httpd
読み込んだプラグイン:fastestmirror, langpacks, priorities
Loading mirror speeds from cached hostfile
 * base: mirrors.yun-idc.com
 * centosplus: ftp.riken.jp
 * epel: kartolo.sby.datautama.net.id
 * extras: ftp.riken.jp
 * rpmforge: ftp.kddilabs.jp
 * updates: mirrors.yun-idc.com
45 packages excluded due to repository priority protections
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ httpd.x86_64 0:2.4.6-17.el7.centos.1 を インストール
--> 依存性の処理をしています: httpd-tools = 2.4.6-17.el7.centos.1 のパッケージ: httpd-2.4.6-17.el7.centos.1.x86_64
--> 依存性の処理をしています: /etc/mime.types のパッケージ: httpd-2.4.6-17.el7.centos.1.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ httpd-tools.x86_64 0:2.4.6-17.el7.centos.1 を インストール
---> パッケージ mailcap.noarch 0:2.1.41-2.el7 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

====================================================================================================
 Package                アーキテクチャー  バージョン                          リポジトリー     容量
====================================================================================================
インストール中:
 httpd                  x86_64            2.4.6-17.el7.centos.1               base            2.7 M
依存性関連でのインストールをします:
 httpd-tools            x86_64            2.4.6-17.el7.centos.1               base             77 k
 mailcap                noarch            2.1.41-2.el7                        base             31 k

トランザクションの要約
====================================================================================================
インストール  1 パッケージ (+2 個の依存関係のパッケージ)

総ダウンロード容量: 2.8 M
インストール容量: 9.6 M
Downloading packages:
(1/3): mailcap-2.1.41-2.el7.noarch.rpm                                       |  31 kB  00:00:00
(2/3): httpd-tools-2.4.6-17.el7.centos.1.x86_64.rpm                          |  77 kB  00:00:00
(3/3): httpd-2.4.6-17.el7.centos.1.x86_64.rpm                                | 2.7 MB  00:00:00
----------------------------------------------------------------------------------------------------
合計                                                                3.9 MB/s | 2.8 MB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : httpd-tools-2.4.6-17.el7.centos.1.x86_64                            1/3
  インストール中          : mailcap-2.1.41-2.el7.noarch                                         2/3
  インストール中          : httpd-2.4.6-17.el7.centos.1.x86_64                                  3/3
  検証中                  : mailcap-2.1.41-2.el7.noarch                                         1/3
  検証中                  : httpd-2.4.6-17.el7.centos.1.x86_64                                  2/3
  検証中                  : httpd-tools-2.4.6-17.el7.centos.1.x86_64                            3/3

インストール:
  httpd.x86_64 0:2.4.6-17.el7.centos.1

依存性関連をインストールしました:
  httpd-tools.x86_64 0:2.4.6-17.el7.centos.1              mailcap.noarch 0:2.1.41-2.el7

完了しました!

■php、php-mbstringをインストール

[root@server1 ~]# yum -y install php php-mbstring
読み込んだプラグイン:fastestmirror, langpacks, priorities
Loading mirror speeds from cached hostfile
 * base: mirrors.yun-idc.com
 * centosplus: ftp.riken.jp
 * epel: mirror.premi.st
 * extras: ftp.riken.jp
 * rpmforge: ftp.kddilabs.jp
 * updates: mirrors.yun-idc.com
45 packages excluded due to repository priority protections
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ php.x86_64 0:5.4.16-21.el7 を インストール
--> 依存性の処理をしています: php-common(x86-64) = 5.4.16-21.el7 のパッケージ: php-5.4.16-21.el7.x86_64
--> 依存性の処理をしています: php-cli(x86-64) = 5.4.16-21.el7 のパッケージ: php-5.4.16-21.el7.x86_64
---> パッケージ php-mbstring.x86_64 0:5.4.16-21.el7 を インストール
--> トランザクションの確認を実行しています。
---> パッケージ php-cli.x86_64 0:5.4.16-21.el7 を インストール
---> パッケージ php-common.x86_64 0:5.4.16-21.el7 を インストール
--> 依存性の処理をしています: libzip.so.2()(64bit) のパッケージ: php-common-5.4.16-21.el7.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ libzip.x86_64 0:0.10.1-8.el7 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

====================================================================================================
 Package                   アーキテクチャー    バージョン                   リポジトリー       容量
====================================================================================================
インストール中:
 php                       x86_64              5.4.16-21.el7                base              1.3 M
 php-mbstring              x86_64              5.4.16-21.el7                base              499 k
依存性関連でのインストールをします:
 libzip                    x86_64              0.10.1-8.el7                 base               48 k
 php-cli                   x86_64              5.4.16-21.el7                base              2.7 M
 php-common                x86_64              5.4.16-21.el7                base              559 k

トランザクションの要約
====================================================================================================
インストール  2 パッケージ (+3 個の依存関係のパッケージ)

総ダウンロード容量: 5.2 M
インストール容量: 18 M
Downloading packages:
(1/5): libzip-0.10.1-8.el7.x86_64.rpm                                        |  48 kB  00:00:00
(2/5): php-cli-5.4.16-21.el7.x86_64.rpm                                      | 2.7 MB  00:00:00
(3/5): php-common-5.4.16-21.el7.x86_64.rpm                                   | 559 kB  00:00:00
(4/5): php-mbstring-5.4.16-21.el7.x86_64.rpm                                 | 499 kB  00:00:00
(5/5): php-5.4.16-21.el7.x86_64.rpm                                          | 1.3 MB  00:00:01
----------------------------------------------------------------------------------------------------
合計                                                                4.6 MB/s | 5.2 MB  00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : libzip-0.10.1-8.el7.x86_64                                          1/5
  インストール中          : php-common-5.4.16-21.el7.x86_64                                     2/5
  インストール中          : php-cli-5.4.16-21.el7.x86_64                                        3/5
  インストール中          : php-5.4.16-21.el7.x86_64                                            4/5
  インストール中          : php-mbstring-5.4.16-21.el7.x86_64                                   5/5
  検証中                  : php-common-5.4.16-21.el7.x86_64                                     1/5
  検証中                  : php-cli-5.4.16-21.el7.x86_64                                        2/5
  検証中                  : php-mbstring-5.4.16-21.el7.x86_64                                   3/5
  検証中                  : libzip-0.10.1-8.el7.x86_64                                          4/5
  検証中                  : php-5.4.16-21.el7.x86_64                                            5/5

インストール:
  php.x86_64 0:5.4.16-21.el7                   php-mbstring.x86_64 0:5.4.16-21.el7

依存性関連をインストールしました:
  libzip.x86_64 0:0.10.1-8.el7  php-cli.x86_64 0:5.4.16-21.el7  php-common.x86_64 0:5.4.16-21.el7

完了しました!

■Apacheの設定ファイルの編集

[root@server1 ~]# vi /etc/httpd/conf/httpd.conf

サーバー名を指定
#ServerName www.example.com:80
                  ↓
ServerName yokensaka.com:80 ← #をはずして独自ドメインに変更

# http://httpd.apache.org/docs-2.0/mod/core.html#options
# for more information.
#
CGIの許可、SSIの許可
    Options Indexes FollowSymLinks
         ↓
    Options Includes ExecCGI FollowSymLinks

.htaccessの許可
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
#
    AllowOverride None
         ↓
    AllowOverride All

長すぎるURI(414 Error)はログに記録しない
# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
#
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
         ↓
LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

ログの記録内容変更
# logged therein and *not* in this file.
#
#CustomLog "logs/access_log" common
この下に以下を追加
SetEnvIf Request_URI "default\.ida" no_log
SetEnvIf Request_URI "cmd\.exe" no_log
SetEnvIf Request_URI "root\.exe" no_log
SetEnvIf Request_URI "Admin\.dll" no_log
SetEnvIf Request_URI "NULL\.IDA" no_log
SetEnvIf Remote_Addr 192.168.1 no_log
SetEnvIf Remote_Addr 127.0.0.1 no_log
CustomLog logs/access_log combined env=!no_log

デフォルトキャラセットを無効にする(文字化け対策)
AddDefaultCharset UTF-8
         ↓
#AddDefaultCharset UTF-8 ← #を付ける

CGIスクリプトを実行できる様にする
#AddHandler cgi-script .cgi
         ↓
AddHandler cgi-script .cgi .pl ← #をはずして.plを追加

チェック
[root@server1 ~]# apachectl configtest
Syntax OK

■Perlのパスが/usr/local/bin/perlでもCGIを実行出来るようにする。

[root@server1 ~]# whereis perl
perl: /usr/bin/perl /usr/share/man/man1/perl.1.gz

シンボリックリンク設定(/usr/local/bin/perlから/usr/bin/perlへリンクをはる
[root@server1 ~]# ln -s /usr/bin/perl /usr/local/bin/perl

変更後のPerlの位置
[root@server1 ~]# whereis perl
perl: /usr/bin/perl /usr/local/bin/perl /usr/share/man/man1/perl.1.gz

■ドキュメントルートの所有者変更

[root@server1 ~]# chown higo:higo /var/www/html/

WordPress対応(所有者変更)
# chown -R apache:apache /var/www/html/blog ← blog,centos,fedora,1129,pf,taka
# chown -R higo:higo /var/www/html/blog/wp-content/uploads
# chown higo:higo /var/www/html/blog/wp-config.php

ドキュメントルート所有者変更確認
[root@server1 ~]# ll /var/www/
合計 0
drwxr-xr-x 2 root root 6  6月 18 04:12 cgi-bin
drwxr-xr-x 2 higo higo 6  6月 18 04:12 html

■Apacheの起動

root@server1 ~]# systemctl start httpd

■Apacheの自動起動設定

[root@server1 ~]# systemctl enable httpd
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'

■起動確認

[root@server1 ~]# systemctl status httpd
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
   Active: active (running) since 土 2014-10-25 10:48:28 JST; 10s ago
 Main PID: 4098 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
   CGroup: /system.slice/httpd.service
           ├─4098 /usr/sbin/httpd -DFOREGROUND
           ├─4100 /usr/sbin/httpd -DFOREGROUND
           ├─4101 /usr/sbin/httpd -DFOREGROUND
           ├─4102 /usr/sbin/httpd -DFOREGROUND
           ├─4103 /usr/sbin/httpd -DFOREGROUND
           └─4104 /usr/sbin/httpd -DFOREGROUND

10月 25 10:48:27 server1.yokensaka.com systemd[1]: Starting The Apache HTTP Server...
10月 25 10:48:28 server1.yokensaka.com systemd[1]: Started The Apache HTTP Server.

■公開前の準備
ホームページを外部に公開するに当たって、ルータの設定でポート番号80番を開ける必要がある。

CentOS 7 postfixインストール

■Postfixのインストール

[root@server1 ~]# yum -y install postfix
読み込んだプラグイン:fastestmirror, langpacks, priorities
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * centosplus: mirrors.btte.net
 * epel: ftp.kddilabs.jp
 * extras: ftp.riken.jp
 * rpmforge: ftp.kddilabs.jp
 * updates: mirrors.btte.net
45 packages excluded due to repository priority protections
パッケージ 2:postfix-2.10.1-6.el7.x86_64 はインストール済みか最新バージョンです
何もしません

■Postfixの設定
Postfixの基本的な設定は、/etc/postfix/main.cfで行う

[root@server1 ~]# vi /etc/postfix/main.cf
# The myhostname parameter specifies the internet hostname of this
# mail system. The default is to use the fully-qualified domain name
# from gethostname(). $myhostname is used as a default value for many
# other configuration parameters.
#
#myhostname = host.domain.tld
↓
myhostname = server1.yokensaka.com ← #を外して、サーバーのホスト名を設定
#myhostname = virtual.domain.tld
# The mydomain parameter specifies the local internet domain name.
# The default is to use $myhostname minus the first component.
# $mydomain is used as a default value for many other configuration
# parameters.
#
#mydomain = domain.tld
↓
mydomain = yokensaka.com ← #を外して、ドメイン名を設定
# For the sake of consistency between sender and recipient addresses,
# myorigin also specifies the default domain name that is appended
# to recipient addresses that have no @domain part.
#
#myorigin = $myhostname
#myorigin = $mydomain
↓
myorigin = $mydomain ← #を外して、設定を有効に
      (メールアドレスの「@」以下に付加する文字列を指定)
# See also the proxy_interfaces parameter, for network addresses that
# are forwarded to us via a proxy or network address translator.
#
# Note: you need to stop/start Postfix when this parameter changes.
#
メールの受信を許可するネットワークインターフェースを設定
#inet_interfaces = all
↓ #を外して、設定を有効にする(自サーバーからのメールだけを受信する場合は設定しない)
inet_interfaces = all
#inet_interfaces = $myhostname
#inet_interfaces = $myhostname, localhost
inet_interfaces = localhost
↓ 行頭に#を追加(自サーバーからのメールだけを受信する場合は設定しない)
#inet_interfaces = localhost
# Specify a list of host or domain names, /file/name or type:table
# patterns, separated by commas and/or whitespace. A /file/name
# pattern is replaced by its contents; a type:table is matched when
# a name matches a lookup key (the right-hand side is ignored).
# Continue long lines by starting the next line with whitespace.
#
# See also below, section "REJECTING MAIL FOR UNKNOWN LOCAL USERS".
#
受信したメールを拒否するかどうかを設定
mydestination = $myhostname, localhost.$mydomain, localhost
↓
#mydestination = $myhostname, localhost.$mydomain, localhost ← 行頭に#を追加
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
↓
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain ← #を外す
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
#       mail.$mydomain, www.$mydomain, ftp.$mydomain
# Specify "mynetworks_style = host" when Postfix should "trust"
# only the local machine.
#
#mynetworks_style = class
#mynetworks_style = subnet
↓
mynetworks_style = subnet ← #を外す
#mynetworks_style = host
# You can also specify the absolute pathname of a pattern file instead
# of listing the patterns here. Specify type:table for table-based lookups
# (the value on the table right-hand side is not used).
#
内部ネットワークアドレスとローカルホストアドレスを指定
#mynetworks = 168.100.189.0/28, 127.0.0.0/8
↓
mynetworks = 192.168.1.0/24, 127.0.0.0/8 ← #を外して書き換える
#mynetworks = $config_directory/mynetworks
#mynetworks = hash:/etc/postfix/network_table
# NOTE: Postfix will not automatically forward mail for domains that
# list this system as their primary or backup MX host. See the
# permit_mx_backup restriction description in postconf(5).
#
#relay_domains = $mydestination
↓
relay_domains = $mydestination ← #を外す
# DELIVERY TO MAILBOX
#
# The home_mailbox parameter specifies the optional pathname of a
# mailbox file relative to a user's home directory. The default
# mailbox file is /var/spool/mail/user or /var/mail/user.  Specify
# "Maildir/" for qmail-style delivery (the / is required).
#
#home_mailbox = Mailbox
#home_mailbox = Maildir/
↓
home_mailbox = Maildir/ ← #を外してメールボックス格納形式をMaildir形式にする
SMTP Authを有効にする。設定ファイルの最終行まで移動して、以下のように設定を追記。
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
送信するメール1通当たりのサイズはデフォルトで10MByte、
受信するメール合計の総容量はデフォルトで50MByteに設定されている。
それぞれ5倍の50MByteと250MByteに変更するには以下を最終行へ追加。
message_size_limit = 52428800 ← 1024*1024*50=52428800
mailbox_size_limit = 262144000 ← 1024*1024*250=262144000

変更を有効にする為、postfixを再起動。
[root@server1 ~]# systemctl restart postfix

■SMTP Auth設定
SMTP AuthではCyrus SASLと呼ばれる認証プログラムを利用している。 PostfixでCyrus SASLを利用出来るように設定する必要がある。

[root@server1 ~]# vi /etc/sasl2/smtpd.conf
設定ファイルの最後に追記
mech_list: plain login cram-md5 digest-md5

saslauthdの起動
[root@server1 ~]# systemctl start saslauthd

saslauthdの自動起動設定
[root@server1 ~]# systemctl enable saslauthd
ln -s '/usr/lib/systemd/system/saslauthd.service' '/etc/systemd/system/multi-user.target.wants/saslauthd.service'

■root宛メールを一般ユーザ(webmaster)へ転送
システムからroot宛に送られてくるメールを、一般ユーザ(webmaster)へ転送するようにする。

管理者ユーザ宛メールのroot宛転送設定を解除
[root@server1 ~]# sed -i 's/^webmaster/#webmaster/g' /etc/aliases

管理者ユーザ宛メールのroot宛転送設定解除を確認
[root@server1 ~]# grep ^webmaster /etc/aliases ← 結果がなにも表示されないことを確認

root宛メールを管理者ユーザ(webmaster)へ転送するように設定
[root@server1 ~]# sed -i 's/^root/#root/g' /etc/aliases

root宛メールを管理者ユーザ(webmaster)へ転送するように設定
[root@server1 ~]# echo "root: webmaster" >> /etc/aliases

root宛メールが管理者ユーザ(webmaster)宛へ転送されるかの確認
[root@server1 ~]# grep ^root /etc/aliases
root: webmaster ← root宛メールが管理者ユーザ(webmaster)へ転送されるように設定されている

転送先を反映させる
[root@server1 ~]# postalias /etc/aliases

■一般ユーザー(webmaster)の作成
webmasterへメールが届くようにするためには一般ユーザー(webmaster)の作成が必要。

一般ユーザ(webmaster)を追加。
[root@server1 ~]# useradd webmaster

一般ユーザーでログインするためにはパスワードを設定する必要がある
[root@server1 ~]# passwd webmaster
パスワードの入力(入力したパスワードは表示されない

ユーザー webmaster のパスワードを変更。
新しいパスワード: ← パスワード
新しいパスワードを再入力してください: ← パスワードを再入力
passwd: すべての認証トークンが正しく更新できました。

■Postfixの起動

[root@server1 ~]# systemctl start postfix

■Postfixの自動起動設定

[root@server1 ~]# systemctl enable postfix

■sendmailパスの確認
掲示板などで投稿があったらメール通知する設定をしている時は CGIのsendmailパスの設定を変更しないと送信エラーになる場合がある。

一般ユーザーでsendmailパスの確認をする
[root@server1 ~]# su - higo
最終ログイン: 2014/07/17 (木) 21:48:02 JST 192.168.1.18から開始日時 pts/0

sendmailパスの確認
[higo@server1 ~]$ which sendmail
/usr/sbin/sendmail

ルートになる
[higo@server1 ~]$ su -
パスワード: ← ルートのパスワードを入力
最終ログイン: 2014/07/17 (木) 21:48:31 JST日時 pts/0

以下のようにすれば一般ユーザーでもsendmailパスがみえるようになる。
[root@server1 ~]# ln -s /usr/sbin/sendmail /usr/bin/sendmail

一般ユーザーになる
[root@server1 ~]# su - higo
最終ログイン: 2014/07/17 (木) 22:44:12 JST日時 pts/0

endmailパスの確認
[higo@server1 ~]$ which sendmail
/bin/sendmail

root宛のメールを一般ユーザーへ転送してない場合、rootのメールが肥大化していくので注意が必要。そんな時は手動でroot宛のメールを削除する。

メール容量を確認
[root@server1 ~]# ls -la /var/spool/mail/
合計 288
drwxrwxr-x.  2 root      mail     54  7月 17 22:06 .
drwxr-xr-x. 11 root      root   4096  7月 14 23:47 ..
-rw-rw----.  1 higo      mail      0  7月 14 23:56 higo
-rw-------.  1 root      mail 289357  7月 17 06:12 root
-rw-rw----.  1 rpc       mail      0  7月 14 23:37 rpc
-rw-rw----   1 webmaster mail      0  7月 17 22:06 webmaster

root宛のメールを削除
[root@server1 ~]# cat /dev/null > /var/mail/root

再度メール容量を確認
[root@server1 ~]# ls -la /var/spool/mail/
合計 4
drwxrwxr-x.  2 root      mail   54  7月 17 22:06 .
drwxr-xr-x. 11 root      root 4096  7月 14 23:47 ..
-rw-rw----.  1 higo      mail    0  7月 14 23:56 higo
-rw-------.  1 root      mail    0  7月 17 22:55 root
-rw-rw----.  1 rpc       mail    0  7月 14 23:37 rpc
-rw-rw----   1 webmaster mail    0  7月 17 22:06 webmaster


サーバー管理のレポート送信先を変更
[root@server1 ~]# vi /etc/aliases
# Person who should get root's mail
#root:          marc
root:           hoge@yokensaka.com → 設定したいメールアドレスを指定する。

変更内容を有効化
[root@server1 ~]# newaliases

newaliases コマンドを実行すると、/etc/aliases.db が更新され、変更が反映される。
[root@server1 ~]# ls -l /etc/aliases*
-rw-r--r--  1 root root  1560  9月 14 12:22 /etc/aliases
-rw-r--r--. 1 root root 12288  9月 14 19:08 /etc/aliases.db

※SMTPサーバーを使うには、ルーターの設定が必要なので25番のポートを開ける。

CentOS 7 rootkit検知ツールインストール

■chkrootkitインストール

[root@server1 ~]# wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz ← chkrootkitダウンロード

[root@server1 ~]# tar zxvf chkrootkit.tar.gz ← chkrootkit展開

[root@server1 ~]# mkdir -p ~/bin && mv chkrootkit-0.50/chkrootkit ~/bin ← chkrootkitを移動

[root@server1 ~]# rm -rf chkrootkit-0.50/ ← chkrootkit展開先ディレクトリを削除

[root@server1 ~]# rm -f chkrootkit.tar.gz ← ダウンロードしたchkrootkitを削除

■chkrootkit確認

[root@server1 ~]# chkrootkit | grep INFECTED ← chkrootkit実行
上記chkrootkit実行結果として"INFECTED"という行が表示されなければ問題なし

■chkrootkit定期自動実行設定

[root@server1 ~]# vi /etc/cron.daily/chkrootkit ← chkrootkit実行スクリプトを毎日自動実行されるディレクトリへ作成
#!/bin/bash

PATH=/usr/bin:/bin:/root/bin

TMPLOG=`mktemp`

# chkrootkit実行
chkrootkit > $TMPLOG

# ログ出力
cat $TMPLOG | logger -t chkrootkit

# SMTPSのbindshell誤検知対応
if [ ! -z "$(grep 465 $TMPLOG)" ] && \
   [ -z $(/usr/sbin/lsof -i:465|grep bindshell) ]; then
        sed -i '/465/d' $TMPLOG
fi

# rootkit検知時のみroot宛メール送信
[ ! -z "$(grep INFECTED $TMPLOG)" ] && \
grep INFECTED $TMPLOG | mail -s "chkrootkit report in `hostname`" root

rm -f $TMPLOG

[root@server1 ~]# chmod 700 /etc/cron.daily/chkrootkit ← chkrootkit実行スクリプトへ実行権限付加

これで毎日定期的にrootkitがインストールされていないかチェックされ、インストールされていた場合はroot宛にメールが届くようになる。また、chkrootkitの実行結果は/var/log/messagesに保存される。

■chkrootkitで使用する安全なコマンドの確保
chkrootkitが使用するコマンド群が既に改竄されていた場合、rootkitを正常に検出できなくなるので、chkrootkitが使用するコマンド群をコピーしておき、必要な場合にはそのコマンド群を使用してchkrootkitを実行する。

chkrootkit使用コマンド退避先ディレクトリ作成
[root@server1 ~]# mkdir chkrootkitcmd 

chkrootkit使用コマンドを退避先ディレクトリへコピー
[root@server1 ~]# cp `which --skip-alias awk cut echo egrep find head id ls netstat ps strings sed ssh uname` chkrootkitcmd/

退避したchkrootkit使用コマンドを使用してchkrootkit実行
[root@server1 ~]# chkrootkit -p /root/chkrootkitcmd|grep INFECTED

chkrootkit使用コマンド退避先ディレクトリ圧縮
[root@server1 ~]# zip -r chkrootkitcmd.zip chkrootkitcmd/

chkrootkit使用コマンド退避先ディレクトリ削除
[root@server1 ~]# rm -rf chkrootkitcmd

mailコマンドでzipファイル添付メールを送信するのに必要なuuencodeコマンドインストール
[root@server1 ~]# yum -y install sharutils

chkrootkit使用コマンド(圧縮版)をroot宛にメール送信
[root@server1 ~]# uuencode chkrootkitcmd.zip chkrootkitcmd.zip|mail root

chkrootkit使用コマンド(圧縮版)削除
[root@server1 ~]# rm -f chkrootkitcmd.zip

■Suckit誤検知の修正
Suckit による /sbin/init の改ざん誤検知対策

[root@server1 ~]# chkrootkit | grep INFECTED
Searching for Suckit rootkit... Warning: /sbin/init INFECTED

chkrootkitの修正

[root@server1 ~]# vi /root/bin/chkrootkit
   ### Suckit
   if [ -f ${ROOTDIR}sbin/init ]; then
      if [ "${QUIET}" != "t" ];then printn "Searching for Suckit rootkit... "; fi
      if [ ${SYSTEM} != "HP-UX" ] && ( ${strings} ${ROOTDIR}sbin/init | ${egrep} 'HOME='   || \
              cat ${ROOTDIR}/proc/1/maps | ${egrep} "init." ) >/dev/null 2>&1
        then
      if [ "`md5sum ${ROOTDIR}sbin/init | cut -d ' ' -f 1`" = "`grep 'sbin/init$' /sbin/init | cut -d ' ' -f 1`" ]
      then
        echo "Warning: ${ROOTDIR}sbin/init INFECTED"
      fi
      else
         if [ -d ${ROOTDIR}/dev/.golf ]; then
            echo "Warning: Suspect directory ${ROOTDIR}dev/.golf"
         else
            if [ "${QUIET}" != "t" ]; then echo "nothing found"; fi
         fi
      fi
   fi

chkrootkit確認

[root@server1 ~]# chkrootkit | grep INFECTED
 "INFECTED"という行が表示されなくなった

IPアドレス自動更新DDNS(ddo.jp)

今使ってるスクリプトでDDNSの自動更新がうまくいかないこともあり、たびたびアクセスできなくなることがあったので、自動更新のスクリプトを見直すことに。このサイトはddo.jpのDDNSを使ってるので、いろいろ調べて見たら、こちらのサイトで紹介されてるスクリプトが良さそうなので使わせてもらうことにした。
自動更新の動きとしては
  (1)ddo.jpサイトで用意しているリモートIP確認サイトで現在のIPを確認。
  (2)前回更新時のIPと変更時間をテンポラリーファイルから読み込む。
  (3)前回更新時とIP同じで、かつ前回更新時から1週間以上経ってなかったら終了。
  (4)そうでなかったら、DDNSを更新。変更内容をテンポラリーファイルとログに書き込む。
という感じで自動更新されるとのこと。あとこのスクリプトは、lynxが使えることが前提となってるようなので、まずlynxをインストールすることにする。
■ lynxのインストール

[root@server ~]# yum -y install lynx

■ 自動更新スクリプトの作成

[root@server1 ~]# cd /usr ← /usr ディレクトリへ移動
[root@server1 usr]# mkdir -p ddns ← ddns ディレクトリの作成
[root@server1 usr]# cd ddns ← ddns ディレクトリへ移動
[root@server1 ddns]# vi ddo.jpIP_upgrade.pl ← 自動更新スクリプトの作成
#!/usr/bin/perl
#
# Check ip address, and update DDNS for "ddo.jp"
#
#
# parameters
# "ddo.jp" ID & PASSWD
local $ID     = 'ドメイン'; # Login ID(It serves as a domain name)
local $PASSWD = 'パスワード'; # Login password
# file names
local $CRT_IPF = '/tmp/CRT_IP2.dat';
local $LOG     = '/var/log/ddns.log';
# Check current ip address on the appointed URL web page.
local $CHK_URL="http://info.ddo.jp/remote_addr.php";
#
local $INTERVAL = 604800;       # 1 weeks
#
$ENV{'PATH'}="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin";
#---------------------------------------------------
# main
my ($NEW_IP,$CRT_IP,$CRT_TIME,$i);
# get current ip address which set as the domain.
$CRT_IP   = "";
$CRT_TIME = "0";
open(INPUT, $CRT_IPF);
foreach(<INPUT>){
chop;
/^IP:/   && do{ $CRT_IP   = $' };
/^TIME:/ && do{ $CRT_TIME = $' };
}
close(INPUT);
# check a assigned ip address
open(INPUT, "lynx -dump \"$CHK_URL\" | ");
foreach(<INPUT>){
/([0-9\.].*)/ && do{ $NEW_IP = $1};
}
close(INPUT);
# Lapsed time from the last update
$i = time() - $CRT_TIME;
# change DDNS, supposing the IP address is changed.
if ( ( ($NEW_IP ne "" )&&($CRT_IP ne $NEW_IP) ) || ( $i > $INTERVAL) ) {
# change DDNS
open(INPUT2,
"lynx -dump \"http://ddo.jp/dnsupdate.php?dn=$ID&ip=$NEW_IP&pw=$PASSWD\" |");
# check whether change of DDNS has been successful
foreach(<INPUT2>){
/SUCCESS: / && do{ $TEMP = 1;};
}
if( $TEMP == 1){
# save a new IP address.
$i = time();
open (OUTPUT ,">$CRT_IPF");
print OUTPUT "IP:$NEW_IP\nTIME:$i\n";
close OUTPUT;
# write a message on the log file
$time = conv_date(time());
open(LOG, ">> $LOG");
print(LOG $time . ":change \"" .
$ID . ".ddo.jp\" <= " . $NEW_IP . "\n");
close(LOG);
}
}
sub conv_date{
my ($times,$mode) = @_;
my ($sec,$min,$hour,$mday,$month,$year,$wday);
($sec,$min,$hour,$mday,$month,$year,$wday,undef,undef) = localtime($times);
$month++;
$year += 1900;
$times = sprintf("%d/%02d/%02d %02d:%02d", $year, $month, $mday,
$hour, $min);
return($times);
}

■ スクリプトに実行権限を与える

[root@server1 ddns]# chmod +x ddo.jpIP_upgrade.pl

■ このスクリプトを毎時2分、5分、8分と3分おきに実行するように /etc/cron.d/ に追加。※メインサーバーのみ

[root@server1 ~]# echo "2-59/3 * * * * root /usr/ddns/ddo.jpIP_upgrade.pl" > /etc/cron.d/ddns

■テンポラリーファイルとログファイルの作成

[root@server1 ~]# echo -n "" > /tmp/CRT_IP2.dat
[root@server1 ~]# echo -n "" > /var/log/ddns.log

■ 停電などで再起動させたとき自動で実行するように設定※メインサーバーのみ

[root@server1 ~]# vi /etc/rc.local ← システム起動時実行コマンド定義ファイル編集
以下を最終行へ追加
chmod +x /usr/ddns/ddo.jpIP_upgrade.pl
/usr/ddns/ddo.jpIP_upgrade.pl

CentOS 7 dovecotインストール

■dovecotのインストール

[root@server1 ~]# yum -y install dovecot
読み込んだプラグイン:fastestmirror, langpacks, priorities
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * centosplus: mirrors.btte.net
 * epel: ftp.cuhk.edu.hk
 * extras: ftp.riken.jp
 * rpmforge: ftp.kddilabs.jp
 * updates: mirrors.btte.net
45 packages excluded due to repository priority protections
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ dovecot.x86_64 1:2.2.10-4.el7_0.1 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

====================================================================================================
 Package             アーキテクチャー   バージョン                        リポジトリー         容量
====================================================================================================
インストール中:
 dovecot             x86_64             1:2.2.10-4.el7_0.1                updates             3.2 M

トランザクションの要約
====================================================================================================
インストール  1 パッケージ

総ダウンロード容量: 3.2 M
インストール容量: 9.7 M
Downloading packages:
dovecot-2.2.10-4.el7_0.1.x86_64.rpm                                          | 3.2 MB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : 1:dovecot-2.2.10-4.el7_0.1.x86_64                                   1/1
  検証中                  : 1:dovecot-2.2.10-4.el7_0.1.x86_64                                   1/1

インストール:
  dovecot.x86_64 1:2.2.10-4.el7_0.1

完了しました!

■dovecotの設定ファイルの編集

[root@server1 ~]# vi /etc/dovecot/dovecot.conf
Protocols we want to be serving.
#protocols = imap pop3 lmtp
↓
protocols = imap pop3 lmtp ← #を外す
# Space separated list of trusted network ranges. Connections from these
# IPs are allowed to override their IP addresses and ports (for logging and
# for authentication checks). disable_plaintext_auth is also ignored for
# these networks. Typically you'd specify your IMAP proxy servers here.
#login_trusted_networks =
disable_plaintext_auth = no ← プレインテキストのパスワード認証(追記)

メールボックス格納形式をMaildir形式とする
[root@server1 ~]# vi /etc/dovecot/conf.d/10-mail.conf
#   mail_location = maildir:~/Maildir
#   mail_location = mbox:~/mail:INBOX=/var/mail/%u
#   mail_location = mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%n
#
# 
#
#mail_location =
↓
mail_location = maildir:~/Maildir ← #を外し maildir:~/Maildirを追記

■dovecotの起動

[root@server1 ~]# systemctl start dovecot

■dovecotの自動起動設定

[root@server1 ~]# systemctl enable dovecot
ln -s '/usr/lib/systemd/system/dovecot.service' '/etc/systemd/system/multi-user.target.wants/dovecot.service'

POP/IMAPサーバを使うには、ルーターの設定が必要なので、110番(POPの場合)または143番(IMAPの場合)のポートを開ける。

CentOS 7 パッケージ管理(yum)

■yum-prioritiesのインストール
yum-plugin-prioritiesとは、サードパーティ製のリポジトリを追加した際にどちらを優先するか優先順位をつけるプラグイン。

[root@server1 ~]# yum -y install yum-plugin-priorities
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.fairway.ne.jp
* extras: mirror.fairway.ne.jp
* updates: mirror.fairway.ne.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ yum-plugin-priorities.noarch 0:1.1.31-25.el7_0 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

====================================================================================================
Package アーキテクチャー バージョン リポジトリー 容量
====================================================================================================
インストール中:
yum-plugin-priorities noarch 1.1.31-25.el7_0 updates 23 k

トランザクションの要約
====================================================================================================
インストール 1 パッケージ

総ダウンロード容量: 23 k
インストール容量: 28 k
Downloading packages:
警告: /var/cache/yum/x86_64/7/updates/packages/yum-plugin-priorities-1.1.31-25.el7_0.noarch.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID f4a80eb5: NOKEY
yum-plugin-priorities-1.1.31-25.el7_0.noarch.rpm の公開鍵がインストールされていません
yum-plugin-priorities-1.1.31-25.el7_0.noarch.rpm | 23 kB 00:00:00
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 から鍵を取得中です。
Importing GPG key 0xF4A80EB5:
Userid : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
Package : centos-release-7-0.1406.el7.centos.2.3.x86_64 (@anaconda)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : yum-plugin-priorities-1.1.31-25.el7_0.noarch 1/1
検証中 : yum-plugin-priorities-1.1.31-25.el7_0.noarch 1/1

インストール:
yum-plugin-priorities.noarch 0:1.1.31-25.el7_0

完了しました!

設定ファイル/etc/yum/pluginconf.d/priorities.confを変更

[root@server1 ~]# vi /etc/yum/pluginconf.d/priorities.conf
[main]
enabled = 1
check_obsoletes = 1 ← 追加

■CentOS-Base.repoの編集
CentOS-Base.repoは優先度を高く(priority=1)しておく。

[root@server1 ~]# vi /etc/yum.repos.d/CentOS-Base.repo
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#

[base]
priority=1 ← 追加 priorityとは優先度で、1の方が優先度は高くなる。(未設定の場合は99)
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#released updates
[updates]
priority=1 ← 追加
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that may be useful
[extras]
priority=1 ← 追加
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that extend functionality of existing packages
[centosplus]
priority=1 ← 追加
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=1 ← 0から1に変更
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

■EPELリポジトリのインストール

[root@server1 ~]# wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
--2015-03-15 17:00:31--  http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
dl.fedoraproject.org (dl.fedoraproject.org) をDNSに問いあわせています... 209.132.181.24, 209.132.181.27, 209.132.181.25, ...
dl.fedoraproject.org (dl.fedoraproject.org)|209.132.181.24|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 14524 (14K) [application/x-rpm]
`epel-release-7-5.noarch.rpm' に保存中

100%[======================================>] 14,524      --.-K/s 時間 0.1s    

2015-03-15 17:00:31 (118 KB/s) - `epel-release-7-5.noarch.rpm' へ保存完了 [14524/14524]

[root@server1 ~]# rpm -ivh epel-release-7-5.noarch.rpm
警告: epel-release-7-5.noarch.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID 352c64e5: NOKEY
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:epel-release-7-5                 ################################# [100%]

[root@server1 ~]# rm -f epel-release-* ← ダウンロードしたファイルを削除

■epel.repoを確認

[root@server1 ~]# vi /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1 ← 1 に設定
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch/debug
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1

[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
#baseurl=http://download.fedoraproject.org/pub/epel/7/SRPMS
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1

EPELリポジトリからインストールする場合

[root@server1 ~]# yum --enablerepo=epel -y install パッケージ

■Repoforgeリポジトリのインストール

[root@server1 ~]# rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
[root@server1 ~]# rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm を取得中
準備しています... ################################# [100%]
更新中 / インストール中...
1:rpmforge-release-0.5.3-1.el7.rf ################################# [100%]
[root@server1 ~]# rm -f rpmforge-release-*  ← ダウンロードしたファイルを削除

■Repoforgeを確認

[root@server1 ~]# vi /etc/yum.repos.d/rpmforge.repo
### Name: RPMforge RPM Repository for RHEL 7 - dag
### URL: http://rpmforge.net/
[rpmforge]
name = RHEL $releasever - RPMforge.net - dag
baseurl = http://apt.sw.be/redhat/el7/en/$basearch/rpmforge
mirrorlist = http://mirrorlist.repoforge.org/el7/mirrors-rpmforge
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge
enabled=0 ← 1 に設定
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgchecki = 1

[rpmforge-extras]
name = RHEL $releasever - RPMforge.net - extras
baseurl = http://apt.sw.be/redhat/el7/en/$basearch/extras
mirrorlist = http://mirrorlist.repoforge.org/el7/mirrors-rpmforge-extras
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge-extras
enabled = 0
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1

[rpmforge-testing]
name = RHEL $releasever - RPMforge.net - testing
baseurl = http://apt.sw.be/redhat/el7/en/$basearch/testing
mirrorlist = http://mirrorlist.repoforge.org/el7/mirrors-rpmforge-testing
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge-testing
enabled = 0
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1

Repoforgeリポジトリからインストールする場合

[root@server1 ~]# yum --enablerepo=rpmforge -y install パッケージ

■yumのデータベース情報更新
ローカルに保存されているrpmヘッダ情報を最新の情報に更新。

yumのデータベース情報更新
[root@server1 ~]# yum list
インストールパッケージの確認
[root@server1 ~]# yum list installed

■アップデート情報の確認

アップデート情報の確認
[root@server1 ~]# yum check-update

■一括アップデート
インストールされているパッケージを全てアップデート。

パッケージの一括アップデート
[root@server1 ~]# yum update

アップデートしてよいかの問い合わせに全て” y “で回答するためには -y オプションを指定。

パッケージの一括アップデート
[root@server1 ~]# yum -y update

■yumによるパッケージ更新時にエラーが表示される場合
yumコマンドでパッケージの更新を行った際に、エラーが表示されることがある。これはyumのデータベースが壊れていることが考えられるので、以下のコマンドを実行してyumのデータベースをクリアしてみる。

[root@server1 ~]# yum clean all
[root@server1 ~]# yum update

■その他のコマンド

[root@server1 ~]# /bin/yum --help
読み込んだプラグイン:fastestmirror, langpacks, priorities
Usage: yum [options] COMMAND

List of Commands:

check          rpmdb の問題を確認する
check-update   更新に利用できるパッケージを確認する
clean          キャッシュデータを削除する
deplist        パッケージの依存性の一覧を表示する
distribution-synchronization 最新の利用可能なバージョンへインストール済みパッケージを同期する
downgrade      パッケージのダウングレード
erase          システムから削除するパッケージ
fs             Creates filesystem snapshots, or lists/deletes current snapshots.
fssnapshot     Creates filesystem snapshots, or lists/deletes current snapshots.
groups         グループ情報の表示または使用
help           役立つ使い方のメッセージを表示する
history        トランザクション履歴を表示、使用する
info           パッケージもしくはパッケージのグループについての詳細を表示する
install        システムにパッケージをインストールする
langavailable  Check available languages
langinfo       List languages information
langinstall    Install appropriate language packs for a language
langlist       List installed languages
langremove     Remove installed language packs for a language
list           パッケージグループの一覧を表示する
load-transaction filename から保存済みトランザクションを読み込む
makecache      メタデータキャッシュを生成する
provides       指定値を提供するパッケージを検索する
reinstall      パッケージの再インストール
repo-pkgs      Treat a repo. as a group of packages, so we can install/remove all of them
repolist       ソフトウェアリポジトリーの構成を表示する
search         指定した文字列でパッケージの詳細を検索する
shell          対話型の yum シェルを実行する
swap           Simple way to swap packages, instead of using shell
update         システムのパッケージを更新する
update-minimal Works like upgrade, but goes to the 'newest' package match which fixes a problem that affects your system
updateinfo     Acts on repository update information
upgrade        不要になったパッケージを考慮しながらパッケージを更新する
version        ホストの利用できるリポジトリーのバージョンを表示する


Options:
  -h, --help            このヘルプ メッセージを表示して終了する
  -t, --tolerant        エラーを黙認する
  -C, --cacheonly       キャッシュから完全に実行し、キャッシュを更新しません
  -c [config file], --config=[config file]
                        構成ファイルの場所
  -R [minutes], --randomwait=[minutes]
                        コマンドの最大待ち時間
  -d [debug level], --debuglevel=[debug level]
                        デバッグ情報の出力レベル
  --showduplicates      一覧/検索コマンドのリポジトリーの重複の表示
  -e [error level], --errorlevel=[error level]
                        エラー出力レベル
  --rpmverbosity=[debug level name]
                        rpm のデバッグ情報の出力レベル
  -q, --quiet           静かに処理をする
  -v, --verbose         冗長に処理をする
  -y, --assumeyes       すべての問い合わせに「yes」で答える
  --assumeno            すべての質問にいいえを回答します
  --version             Yum のバージョンを表示して終了する
  --installroot=[path]  インストールのベース ディレクトリーを設定する
  --enablerepo=[repo]   ひとつ以上のリポジトリーを有効にする (ワイルドカード許可)
  --disablerepo=[repo]  ひとつ以上のリポジトリーを無効にする (ワイルドカード許可)
  -x [package], --exclude=[package]
                        名前かワイルドカードでパッケージを除外する
  --disableexcludes=[repo]
                        main、あるリポジトリー、またはすべてからの除外を無効にします。
  --disableincludes=[repo]
                        disable includepkgs for a repo or for everything
  --obsoletes           更新中に不要な処理を有効にします
  --noplugins           Yum プラグインを無効にする
  --nogpgcheck          GPG 署名の確認を無効にする
  --disableplugin=[plugin]
                        名前でプラグインを無効にする
  --enableplugin=[plugin]
                        名前でプラグインを有効にする
  --skip-broken         依存性関連に問題があるパッケージを飛ばす
  --color=COLOR         色を使うかどうか制御する
  --releasever=RELEASEVER
                        yum 設定と repo ファイルに $releasever の値を設定する
  --downloadonly        don't update, just download
  --downloaddir=DLDIR   specifies an alternate directory to store packages
  --setopt=SETOPTS      全体設定とリポジトリー オプションの任意に設定する
  --bugfix              Include bugfix relevant packages, in updates
  --security            Include security relevant packages, in updates
  --advisory=ADVS, --advisories=ADVS
                        Include packages needed to fix the given advisory, in
                        updates
  --bzs=BZS             Include packages needed to fix the given BZ, in
                        updates
  --cves=CVES           Include packages needed to fix the given CVE, in
                        updates
  --sec-severity=SEVS, --secseverity=SEVS
                        Include security relevant packages matching the
                        severity, in updates

  プラグインのオプション:
    --samearch-priorities
                        Priority-exclude packages based on name + arch

■yumのパッケージ自動更新設定
yum-cron のインストール

[root@server1 ~]# yum -y install yum-cron
読み込んだプラグイン:fastestmirror, langpacks, priorities
base | 3.6 kB 00:00:00
centosplus | 3.4 kB 00:00:00
epel/x86_64/metalink | 5.9 kB 00:00:00
epel | 4.4 kB 00:00:00
extras | 3.4 kB 00:00:00
rpmforge | 1.9 kB 00:00:00
updates | 3.4 kB 00:00:00
(1/3): epel/x86_64/group_gz | 250 kB 00:00:00
(2/3): centosplus/7/x86_64/primary_db | 1.8 MB 00:00:00
(3/3): epel/x86_64/primary_db | 3.1 MB 00:00:01
(1/3): epel/x86_64/updateinfo | 1.7 kB 00:00:00
(2/3): epel/x86_64/pkgtags | 1.1 MB 00:00:00
(3/3): rpmforge/primary_db | 125 kB 00:00:00
Loading mirror speeds from cached hostfile
* base: mirror.fairway.ne.jp
* centosplus: mirror.fairway.ne.jp
* epel: mirror.premi.st
* extras: mirror.fairway.ne.jp
* rpmforge: ftp.kddilabs.jp
* updates: mirror.fairway.ne.jp
61 packages excluded due to repository priority protections
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ yum-cron.noarch 0:3.4.3-118.el7.centos を インストール
--> 依存性解決を終了しました。

依存性を解決しました

====================================================================================================
Package アーキテクチャー バージョン リポジトリー 容量
====================================================================================================
インストール中:
yum-cron noarch 3.4.3-118.el7.centos base 53 k

トランザクションの要約
====================================================================================================
インストール 1 パッケージ

総ダウンロード容量: 53 k
インストール容量: 50 k
Downloading packages:
yum-cron-3.4.3-118.el7.centos.noarch.rpm | 53 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
警告: RPMDB は yum 以外で変更されました。
インストール中 : yum-cron-3.4.3-118.el7.centos.noarch 1/1
検証中 : yum-cron-3.4.3-118.el7.centos.noarch 1/1

インストール:
yum-cron.noarch 0:3.4.3-118.el7.centos

完了しました!

■yum-cron設定

[root@server1 ~]# vi /etc/yum/yum-cron.conf ← yum-cron設定
# Whether updates should be applied when they are available. Note
# that download_updates must also be yes for the update to be applied.
apply_updates = no
↓
apply_updates = yes

■パッケージ自動更新 yum-cron の起動

[root@server1 ~]# systemctl start yum-cron

■パッケージ自動更新 yum-cron の自動起動設定

[root@server1 ~]# systemctl enable yum-cron
[root@server1 ~]# systemctl status yum-cron
yum-cron.service - Run automatic yum updates as a cron job
Loaded: loaded (/usr/lib/systemd/system/yum-cron.service; enabled)
Active: active (exited) since 火 2014-07-15 21:21:52 JST; 1min 45s ago
Main PID: 5382 (code=exited, status=0/SUCCESS)

7月 15 21:21:52 server2.yokensaka.com systemd[1]: Started Run automatic yum updates as a cron job.
Hint: Some lines were ellipsized, use -l to show in full.

■サーバ管理に必要なベースパッケージ群と開発ツールパッケージ群をインストール

[root@server1 ~]# yum -y groupinstall base "Development tools"

yum updateでのエラーメッセージ

/etc/cron.hourly/0yum-hourly.cron:

Not using downloaded repomd.xml because it is older than what we have:
Current : Wed Oct 29 11:09:46 2014
Downloaded: Tue Sep 23 20:43:25 2014
Not using downloaded repomd.xml because it is older than what we have:
Current : Wed Oct 29 08:44:59 2014
Downloaded: Thu Oct 23 21:18:58 2014

対応策

[root@server1 ~]# yum clean all
読み込んだプラグイン:fastestmirror, langpacks, priorities
リポジトリーを清掃しています: base centosplus epel extras rpmforge updates
Cleaning up everything
Cleaning up list of fastest mirrors

これで解決するはず

CentOS 7 インストール後の設定

Linuxのコマンドは「Linuxコマンド逆引き大全」で探すことができる。

■rootになれるユーザを制限

[root@server1 ~]# usermod -G wheel higo ← rootになれるユーザを管理者(higo)のみにする
[root@server1 ~]# vi /etc/pam.d/su
#%PAM-1.0
auth sufficient pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth sufficient pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
auth required pam_wheel.so use_uid ← #を外す
auth include system-auth
account sufficient pam_succeed_if.so uid = 0 use_uid quiet
account include system-auth
password include system-auth
session include system-auth
session optional pam_xauth.so
次に以下のように入力して/etc/login.defs の最終行に SU_WHEEL_ONLY yes を追加。
[root@server1 ~]# echo "SU_WHEEL_ONLY yes" >> /etc/login.defs

■SELinux の無効化

[root@server1 ~]# getenforce
Enforcing
[root@server1 ~]# setenforce 0
[root@server1 ~]# getenforce
Permissive
[root@server1 ~]# vi /etc/sysconfig/selinux

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
↓
SELINUX=disabled ← システム起動時にSELinuxを無効化
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted

■ファイアーウォール(iptables)の無効化

[root@server1 ~]# systemctl stop firewalld
[root@server1 ~]# systemctl disable firewalld
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
rm '/etc/systemd/system/basic.target.wants/firewalld.service'

設定を有効にする為再起動
[root@server1 ~]# reboot

■logwatchをインストールしてサーバー監視

[root@server1 ~]# yum -y install logwatch
読み込んだプラグイン:fastestmirror, langpacks, priorities
Loading mirror speeds from cached hostfile
* base: ftp.riken.jp
* centosplus: ftp.riken.jp
* epel: ftp.cuhk.edu.hk
* extras: ftp.riken.jp
* rpmforge: ftp.kddilabs.jp
* updates: ftp.riken.jp
45 packages excluded due to repository priority protections
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ logwatch.noarch 0:7.4.0-28.20130522svn140.el7 を インストール
--> 依存性の処理をしています: perl(Sys::MemInfo) のパッケージ: logwatch-7.4.0-28.20130522svn140.el7.noarch
--> 依存性の処理をしています: perl(Sys::CPU) のパッケージ: logwatch-7.4.0-28.20130522svn140.el7.noarch
--> 依存性の処理をしています: perl(Date::Manip) のパッケージ: logwatch-7.4.0-28.20130522svn140.el7.noarch
--> トランザクションの確認を実行しています。
---> パッケージ perl-Date-Manip.noarch 0:6.41-2.el7 を インストール
---> パッケージ perl-Sys-CPU.x86_64 0:0.54-3.el7 を インストール
---> パッケージ perl-Sys-MemInfo.x86_64 0:0.91-7.el7 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

====================================================================================================
Package アーキテクチャー
バージョン リポジトリー 容量
====================================================================================================
インストール中:
logwatch noarch 7.4.0-28.20130522svn140.el7 base 400 k
依存性関連でのインストールをします:
perl-Date-Manip noarch 6.41-2.el7 base 1.2 M
perl-Sys-CPU x86_64 0.54-3.el7 base 14 k
perl-Sys-MemInfo x86_64 0.91-7.el7 base 15 k

トランザクションの要約
====================================================================================================
インストール 1 パッケージ (+3 個の依存関係のパッケージ)

総ダウンロード容量: 1.6 M
インストール容量: 14 M
Downloading packages:
(1/4): perl-Sys-CPU-0.54-3.el7.x86_64.rpm | 14 kB 00:00:00
(2/4): perl-Sys-MemInfo-0.91-7.el7.x86_64.rpm | 15 kB 00:00:00
(3/4): logwatch-7.4.0-28.20130522svn140.el7.noarch.rpm | 400 kB 00:00:00
(4/4): perl-Date-Manip-6.41-2.el7.noarch.rpm | 1.2 MB 00:00:01
----------------------------------------------------------------------------------------------------
合計 881 kB/s | 1.6 MB 00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : perl-Sys-CPU-0.54-3.el7.x86_64 1/4
インストール中 : perl-Date-Manip-6.41-2.el7.noarch 2/4
インストール中 : perl-Sys-MemInfo-0.91-7.el7.x86_64 3/4
インストール中 : logwatch-7.4.0-28.20130522svn140.el7.noarch 4/4
検証中 : logwatch-7.4.0-28.20130522svn140.el7.noarch 1/4
検証中 : perl-Sys-MemInfo-0.91-7.el7.x86_64 2/4
検証中 : perl-Date-Manip-6.41-2.el7.noarch 3/4
検証中 : perl-Sys-CPU-0.54-3.el7.x86_64 4/4

インストール:
logwatch.noarch 0:7.4.0-28.20130522svn140.el7

依存性関連をインストールしました:
perl-Date-Manip.noarch 0:6.41-2.el7 perl-Sys-CPU.x86_64 0:0.54-3.el7
perl-Sys-MemInfo.x86_64 0:0.91-7.el7

完了しました!

logwatch はデフォルトで毎日1回ログレポートをメール送信する定期実行の cron が設定されている。

[root@server1 ~]# vi /etc/cron.daily/0logwatch
#!/bin/sh

#Set logwatch location
LOGWATCH_SCRIPT="/usr/sbin/logwatch"
#Add options to this line. Most options should be defined in /etc/logwatch/conf/logwatch.conf,
#but some are only for the nightly cronrun such as --output mail and should be set here.
#Other options to consider might be "--format html" or "--encode base64", man logwatch for more details.
OPTIONS="--output mail"

#Call logwatch
$LOGWATCH_SCRIPT $OPTIONS

exit 0

CentOS 7 のインストール

■CentOS 7 のISOイメージをダウンロード
http://www.centos.org/download/
「Download CentOS」の真ん中にある「DVD ISO」をクリック。
ミラーサイトのリストが表示されるので、「Actual Country」の中のどれかをクリック。
クリックするとISOイメージファイルのダウンロードがはじまる。
あにょはrikenからダウンロード
http://ftp.riken.jp/Linux/centos/7.0.1406/isos/x86_64/CentOS-7.0-1406-x86_64-DVD.iso

■CentOS 7 x86_64 のインストール

1.インストーラーの起動
ダウンロードしたISOイメージをメディアに焼き、インストールDVDをDVD-ドライブに挿入し、電源を入れる。
※BIOSの設定で1番最初にDVDからブートできるようになっている必要である。

「Install CentOS 7」を選択し、Enterキーを押す。

2.言語の設定

「日本語」を選択し、右下の「続行」をクリック。

3.インストールの概要

問題のある箇所に「!」アイコンが表示されているので設定していく。

4.インストール先を選択

「ローカルの標準ディスク」でインストール先のディスクにチェックを入れ、上部の「完了(D)」をクリック。

「パーティション構成」は「自動構成のパーティション構成」を選択

5.ネットワークとホスト名を選択

ホスト名(H) を設定
server1.yokensaka.com → ホスト名は自分の環境に合わせて設定。

「設定」をクリック。

『IPv4のセッティング』タブで以下のように設定する。
【方式(M)】:手動を選択

【アドレス】
アドレス: 192.168.1.4 → 自分のサーバIPアドレスを設定
ネットマスク: 24bitマスク (255.255.255.0)
ゲートウェイ: 192.168.1.1

【DNSサーバ(V)】: 192.168.1.1

『IPv6のセッティング』タブで以下のように設定する。
【方式(M)】:無視するを選択

「保存(S)」をクリック

ネットワークのオン/オフはオンにしておく。

「完了(D)」をクリック

6.ソフトウェアの選択

ベース環境
「GNOME Desktop」を選択

選択した環境のアドオン
「GNOME アプリケーション」を選択
「互換ライブラリ」を選択
「開発ツール」を選択

「完了(D)」をクリック

7.インストール開始

「インストールの概要」の設定を完了したら、画面右下の「インストールの開始」をクリック。

8.ユーザー設定

「root パスワード」を選択し、インストール中に「パスワード」を設定。
rootパスワード(P):xxxxxxxxxx
確認(C):xxxxxxxxxx
「完了(D)」ボタンをクリックするとインストール画面に戻る。

「ユーザーの作成」を選択
一般ユーザを作成。インストール中に一般ユーザーの作成
フルネーム(F):
ユーザー名(U):higo
パスワード(P):xxxxxxxxxx
パスワードの確認(C):xxxxxxxxxx

ユーザ名とパスワード、パスワードの確認を入力。
「完了」ボタンをクリックするとインストール画面に戻る。

9.インストール完了

しばらくするとインストールが完了。画面の右下の「再起動」を押してインストールを終了。
※ このときインストール・メディアは抜いておく。

10. 初期セットアップ

「ライセンス情報(L)」をクリック。
「ライセンス契約に同意します(A)」をチェック。
「設定の終了(F)」をクリック。

11. Kdump

「Kdump を有効にしますか (E)」をチェックを外す。
「進む」をクリック。
「はい(Y)」をクリック。
「OK(O)」をクリック。

12. ログイン画面が表示されるのでパスワードを入力してログインし、インストール後の設定をする。

インストール後の設定

mysqlのテーブル破損

Cronからmysqlに関するエラーメールが届いた
mysqldump: Got error: 145: Table ‘./nucleus/nucleus_plugin_counter’ is marked as crashed and should be repaired when using LOCK TABLES
更新が止まってる状態の「あにょのブログ」のカウンターのところにもエラーメッセージが・・・
mySQL error with query SELECT * FROM nucleus_plugin_counter ORDER BY count_time DESC LIMIT 1: Table ‘./nucleus/nucleus_plugin_counter’ is marked as crashed and should be repaired
どうやらカウンターのデータベースが壊れたようだ
■ データベースのエラーを確認

[root@server1 ~]# mysql -u root -pパスワード
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 45165
Server version: 5.1.73 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
■ 問題のデータベースに接続
mysql> use nucleus;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
■ エラーチェック
mysql> check table nucleus_plugin_counter;
+--------------------------------+-------+----------+----------------------------------------------------------+
| Table                          | Op    | Msg_type | Msg_text                                                 |
+--------------------------------+-------+----------+----------------------------------------------------------+
| nucleus.nucleus_plugin_counter | check | warning  | Table is marked as crashed                               |
| nucleus.nucleus_plugin_counter | check | warning  | 2 clients are using or haven't closed the table properly |
| nucleus.nucleus_plugin_counter | check | error    | Found 13708 keys of 13709                                |
| nucleus.nucleus_plugin_counter | check | error    | Corrupt                                                  |
+--------------------------------+-------+----------+----------------------------------------------------------+
4 rows in set (0.01 sec)
■ 壊れているテーブルを修復
mysql> repair table nucleus_plugin_counter;
+--------------------------------+--------+----------+--------------------------------------------+
| Table                          | Op     | Msg_type | Msg_text                                   |
+--------------------------------+--------+----------+--------------------------------------------+
| nucleus.nucleus_plugin_counter | repair | warning  | Number of rows changed from 13709 to 13707 |
| nucleus.nucleus_plugin_counter | repair | status   | OK                                         |
+--------------------------------+--------+----------+--------------------------------------------+
2 rows in set (0.12 sec)
■ 修復できたか確認
mysql> check table nucleus_plugin_counter;
+--------------------------------+-------+----------+----------+
| Table                          | Op    | Msg_type | Msg_text |
+--------------------------------+-------+----------+----------+
| nucleus.nucleus_plugin_counter | check | status   | OK       |
+--------------------------------+-------+----------+----------+
1 row in set (0.01 sec)
mysql>exit

問題なく修復できたようだ。
ブログのカウンター表示も元に戻った。

DDNSの自動更新エラー

今日、DDNSの自動更新エラーのメールが届いた

Cron <root@server1> /usr/ddns/ddo.jpIP_upgrade.pl
Looking up info.ddo.jp
Unable to locate remote host info.ddo.jp.
Alert!: Unable to connect to remote host.
lynx: Can't access startfile http://info.ddo.jp/remote_addr.php

自宅サーバーは「lynx」を使い、「ddo.jp」にアクセスしてリモートアドレスを取得、取得したアドレスをサーバーに記録、時間をおいて、「ddo.jp」にアクセスしてリモートアドレスを取得、サーバーに記録しているアドレスと比較する。一致していればなにもしないでそのまま、一致していなければアドレスを更新するという仕組みなっている。ところが、今回はどうも肝心要の「ddo.jp」にアクセスできてないようだ。

[root@server1 ~]# /usr/ddns/ddo.jpIP_upgrade.pl
探索中: info.ddo.jp
リモートホスト info.ddo.jp の位置を特定できません。
警告!: リモートホストに接続できません。
lynx: スタートファイルにアクセスできません http://info.ddo.jp/remote_addr.php

ということで、一旦「lynx」をアンインストールして新たにインストールしなおしてみた。

[root@server1 ~]# yum remove lynx
[root@server1 ~]# yum install lynx
Loaded plugins: downloadonly, fastestmirror, priorities, refresh-packagekit, security
Loading mirror speeds from cached hostfile
* base: ftp.tsukuba.wide.ad.jp
* centosplus: ftp.tsukuba.wide.ad.jp
* epel: mirror.premi.st
* extras: ftp.tsukuba.wide.ad.jp
* updates: ftp.tsukuba.wide.ad.jp
101 packages excluded due to repository priority protections
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package lynx.x86_64 0:2.8.6-27.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
====================================================================================================
Package             Arch                  Version                        Repository           Size
====================================================================================================
Installing:
lynx                x86_64                2.8.6-27.el6                   base                1.3 M
Transaction Summary
====================================================================================================
Install       1 Package(s)
Total download size: 1.3 M
Installed size: 4.7 M
Is this ok [y/N]: y
Downloading Packages:
lynx-2.8.6-27.el6.x86_64.rpm                                                 | 1.3 MB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : lynx-2.8.6-27.el6.x86_64                                                         1/1
Verifying  : lynx-2.8.6-27.el6.x86_64                                                         1/1
Installed:
lynx.x86_64 0:2.8.6-27.el6
Complete!

「lynx」とは、IE、Firefox等とは違い、コンソールのようなテキストしか表示出来ない環境でも、テキストベースでWebページを表示することができる。
インストールし直してみたらちゃんと動くようになった。
[root@server1 ~]# lynx url ddo.jp/
20140529-ws000085
lynxコマンドでリモートアドレス取得先のURLを入れてみると、ちゃんとリモートアドレスを取得できたようだ。
[root@server1 ~]# lynx url info.ddo.jp/remote_addr.php
20140529-ws000086
エラーも出なくなった。