Quantcast
Channel: 複眼中心 » trouble
Viewing all articles
Browse latest Browse all 8

Scientific Linux 6 をインストールして最初に行なう18の設定

$
0
0

ボクが Scientific Linux 6 を使う始めるときに、必ず設定やインストールしている項目をここでまとめておく。これらの設定は Red Hat Enterprise Linux (RHEL) / CentOS / Oracle Linux でも同様に使用できるだろう。

rootユーザーのメールアドレスの設定

Scientific Linux から管理者であるroot宛に様々なメールが届くが、そのままではrootで当該マシンにログインしないと読めないので、いつも使っているメールアドレスに届くように変更する。ボクの場合、rewse.jpのメールアドレスをメインに使っているけど、そのメール・サーバーに障害が起きたときにそれを通知するメールが受け取れないので、Gmailのアドレスを設定している。

# Person who should get root's mail
#root: marc
root: example@gmail.com

/etc/aliasesを編集しただけでは設定は有効にならないので、忘れずにnewaliasesを実行する。

[root@charlie ~]# newaliases

ボクの自宅サーバーで使っている固定IPアドレスは逆引き設定できず、逆引きすると契約ISPのドメインが戻ってしまうため、Gmailに直接メール送信すると The IP you’re using to send mail is not authorized to 550-5.7.1 send email directly to our servers. で受信拒否されてしまう。対策方法は Gmail: The IP you’re using to send email is not authorized… に載っているとおりなので、契約ISPのSMTPサーバーに中継するように設定変更する。

Postfixに中継サーバーを設定する。SMTPサーバー名を指定する場合には必ず [ ] をつけることを忘れずに。

#relayhost = $mydomain
#relayhost = [gateway.my.domain]
#relayhost = [mailserver.isp.tld]
#relayhost = uucphost
#relayhost = [an.ip.add.ress]
relayhost = [mail.asahi-net.or.jp]

また、Postfixのデフォルト設定では送信元メールアドレスのドメイン部分はホスト名になっているが、このままだと Sender address rejected: Domain not found エラーで受信拒否される場合があるので、ドメイン部分を変更する。

#myorigin = $myhostname
#myorigin = $mydomain
myorigin = $mydomain

設定ファイルを再読み込みする。

[root@charlie ~]# service postfix reload
Reloading postfix:                                         [  OK  ]

このように受信側メール・サーバーのいろいろなポリシーで拒否される場合があるので、必ずテスト・メールを送ってみよう。mailでは本文を書き終えたら.(ピリオド)だけの行を入力すると本文終了の意味になる。

[root@charlie ~]# mail -s "Test Mail" root
This is a test mail.
.
EOT

NTPの設定

時刻がずれていると今後のいろいろ編集するファイルの更新時刻もずれてしまってよく分からなくなるので、時刻は早めに正しくてしまおう。なお、Xenなどの仮想マシンは物理マシンの時刻に完全に同期しているので、仮想マシンでNTPを設定する必要はない。

ボクの環境ではNTPが入っていなかったので、まずはインストール。

[root@charlie ~]# yum install ntp
......
================================================================================
 Package        Arch          Version                           Repository
                                                                           Size
================================================================================
Installing:
 ntp            x86_64        4.2.4p8-2.el6                     sl        444 k
Installing for dependencies:
 libedit        x86_64        2.11-4.20080712cvs.1.el6          sl         73 k
 ntpdate        x86_64        4.2.4p8-2.el6                     sl         57 k
......

海外NTPサーバーだとレイテンシーが大きいので、国内NTPサーバーを追加する。ボクは 情報通信研究機構 (NICT) / INTERNET MULTIFEED の定番に加えて、契約ISPのASAHIネットを追加した。なお、強制的にIPv4で通信するように-4をすべて追加している。

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server -4 0.rhel.pool.ntp.org
server -4 1.rhel.pool.ntp.org
server -4 2.rhel.pool.ntp.org
server -4 ntp.nict.jp
server -4 ntp.jst.mfeed.ad.jp
server -4 ntp.asahi-net.or.jp

NTPサーバーとの時刻が違いすぎると自動調整が利かないので、一度、手動で合わせてしまう。

[root@charlie ~]# ntpdate ntp.nict.jp
28 May 22:45:46 ntpdate[5030]: step time server 133.243.238.244 offset -18.324051 sec

NTPサービスを起動時から有効になるように設定変更し、サービスを開始する。

[root@charlie ~]# chkconfig ntpd on
[root@charlie ~]# service ntpd start
ntpd を起動中:                                             [  OK  ]

しばらくすると以下のコマンドでNTPの同期状況が分かるようになる。上3つは NTP Pool Project のものなので自動的に選ばれたものだ。先頭に*(アスタリスク)がついているサーバーが現在同期中のサーバーで、ntp.nict.jpを使用しているようだ。ntp.nict.jpはストラタムが1なので(一次サーバーなので)選ばれやすい。

[root@charlie ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+ntp.kiba.net    195.71.81.206    2 u   12   64  377   11.793  -34.807   2.153
 www.4koma.com   133.243.238.163  2 u   12   64  377   41.168  -15.576   4.411
-foneus.gimasyst 10.0.5.10        2 u   12   64  377    4.741  -40.622   5.522
*ntp-b2.nict.go. .NICT.           1 u   12   64  377    4.223  -35.788   2.374
+ntp3.jst.mfeed. 210.173.160.86   2 u    8   64  377    2.192  -34.882   2.264
+orion.asahi-net 133.243.238.244  2 u   11   64  377    1.900  -36.306   2.281
 LOCAL(0)        .LOCL.          10 l    2   64  377    0.000    0.000   0.002

SSHの設定

SSHサーバーはデフォルトではパスワード認証だが、クライアント側のSSH鍵を登録しておくと、登録されたSSH鍵を持っているクライアントからはパスワードを入力なしでログインできるので楽できる。

クライアント側の公開鍵を確認しよう。SSH鍵を持っていない場合は、LinuxやMacであればssh-keygenで作成できる。以下はMacでの操作だ。

[tats@evian ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): <kbd>[Enter]</kbd>
Enter same passphrase again: <kbd>[Enter]</kbd>
Your identification has been saved in .ssh/id_rsa.
Your public key has been saved in .ssh/id_rsa.pub.
The key fingerprint is:
91:2e:58:0f:ba:26:bf:2f:e8:0c:63:03:8c:2b:93:6d tats@evian.rewse.jp
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|         .       |
|      o o        |
|o    + + .       |
|o.  o . S        |
|.+   . .         |
|BoE.o            |
|o*o+.            |
| .o o+.          |
+-----------------+
[tats@evian ~]$ cat .ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3szz6E5F8ykxkZBtZTszlYWnz4BIBEFNh59zQMuUa1w9VGg8yJIUOswcfsKxi8YrLATOW/6O1REUPZTAopLvR0TB92m4tlVCE7tFxWfJFCSgf42a6MAdx3eOtn+v5kZG3jx8kPp+Mba9wc/+gBa5CNLLNw841QRLZZ5tbSwsWIgeQfyHIaawHy171csPv28KuhTNRE5wHmK5KYJ+EW+Cx+ljDVLDBYE9v/w2Ty+5sv1mN3n6GHRYfasnuLWwRzWCKiQj8rcod91ILYZXILfZ5GN7en8sNPRoHawOuJFcnMGiVyhk685RXHI+eP5AjJ5FlsbW7h9qde+opN5c/bobD tats@evian.rewse.jp

上記の公開鍵を Scientific Linux 側の ~/.ssh/authorized_keys にコピペする。なお、ディレクトリやファイルの権限が緩すぎると鍵認証でログインできないので注意しよう。

[root@charlie ~]# mkdir .ssh
[root@charlie ~]# chmod 700 .ssh
[root@charlie ~]# vi authorized_keys
[root@charlie ~]# chmod 600 .ssh/authorized_keys

SSHをインターネットに公開しているサーバーでは、パスワード認証をせずに鍵認証だけにしてしまったほうが安全だろう。

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
#PasswordAuthentication yes
PasswordAuthentication no

ポート番号をデフォルトの22から変えてしまうとボクの経験では不正アタックは全くなくなるので、可能であれば変更してしまおう。

#Port 22
Port 12222

変更したらSSHを再起動しよう。

[root@charlie ~]# service sshd restart
sshd を停止中:                                             [  OK  ]
sshd を起動中:                                             [  OK  ]

Yumの設定

デフォルトでは海外にある公式サイトの更新サーバーを見に行ってしまって遅いので、国内ミラーに設定変更する。変更方法は 複眼中心: 国内 Scientific Linux 6 サーバーのためのyum設定 を参照してほしい。

Cronの設定

何台かのマシンがあるとき、すべてが同じ時刻にCronを動かすとその瞬間だけ高負荷になってしまうので、個々のマシンで実行時刻をずらす。このマシンでは以下のように変更した。

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
#01 * * * * root run-parts /etc/cron.hourly
11 * * * * root run-parts /etc/cron.hourly

Scientific Linux 5 と違って、cron.daily / cron.weekly / cron.monthly はAnacron経由で実行される。AancronはSTART_HOURS_RANGEの時間帯のみ実行され、period in days の日数ごとにAnacronデーモンが起動してから delay in minutes + RANDOM_DELAYの間にcommandが実行される。つまり以下の設定がされた常に起動しているサーバーの場合、/etc/cron.daily は1日ごと(毎日)の3時05分から3時50分の間に実行され、/etc/cron.weeklyは7日ごと(毎週)の3時25分から4時10分の間に実行される。

# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22

#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly

デフォルトの値はワークステーションが前提なのか、深夜以外の時間帯にCronを実行するようになっているので、これを深夜のみに変更する。Anacron自体は /etc/cron.hourly/0anacron から実行されるので、デーモンの再起動などは必要ない。

# the jobs will be started during the following hours only
#START_HOURS_RANGE=3-22
START_HOURS_RANGE=3-6

パフォーマンス関連パッケージのインストール

OSの統計情報を獲るためのdstatとsysstatをインストールする。

[root@zulu ~]# yum install dstat sysstat
......
================================================================================
 Package           Arch             Version                  Repository    Size
================================================================================
Installing:
 dstat             noarch           0.7.0-1.el6              sl           136 k
 sysstat           x86_64           9.0.4-11.el6             sl           214 k
......

不要なサービスの停止

この環境では必要ないサービスを自動起動しないように変更し、サービスを停止する。

[root@charlie ~]# chkconfig rhnsd off
[root@charlie  ~]# service rhnsd stop
[root@charlie ~]# chkconfig sysstat off
[root@charlie  ~]# service sysstat stop

必要なサービスの開始

この環境に必要なサービスを自動起動するように変更し、サービスを開始する。

[root@zulu ~]# chkconfig atd on
[root@charlie ~]# service atd start
Starting atd:                                              [  OK  ]
[root@charlie ~]# chkconfig ipmi on
[root@charlie ~]# service ipmi start
Starting ipmi drivers:                                     [  OK  ]
[root@charlie ~]# chkconfig restorecond on
[root@charlie ~]# service restorecond start
Starting restorecond:                                      [  OK  ]
[root@charlie ~]# chkconfig yum-cron on
[root@charlie ~]# service yum-cron start
Enabling nightly yum update:                               [  OK  ]

ディスクのチューニング

ext4ではデフォルト予約ファイルシステム・ブロックとして全容量の5%が割り当てられている。dfしたときに「使用」+「残り」の値が「サイズ」と違うのはこの予約ファイルシステム・ブロックがあるためで、この予約ファイルシステム・ブロックにはrootのみが書き込むことができる。そのため、例えば一般ユーザーが /tmp をあふれさせてしまっても、rootは予約ファイルシステム・ブロックを使って /tmp にまだ書き込むことができ、管理作業を行うことができる。ただ、最近の大容量ディスクではデフォルトの5%は大きすぎると思うので、これを容量に従って少し小さくする。仮想マシンのディスク・イメージを配置するパーティションなんかは大容量だけど不意の書込みはほとんどないので、予約ファイルシステム・ブロックは少なくできる代表例だろう。

パーティション容量 予約ファイルシステム・ブロック
1GB未満 5%
1GB以上 4%
10GB以上 3%
100GB以上 2%
1TB以上 1%

また、ファイルシステムをチェックする最大マウント回数 (-c) とファイルシステムをチェックする最大時間間隔 (-i) も気をつけよう。デフォルトでは30回程度(ランダム)のマウントまたは180日目のマウントで自動的にfsckが実行される。OS起動時に予期せず巨大なパーティションに対してfsckが実行されてしまい、いつまで経ってもOSが起動しないというようなことが起きないように、ボクは -c 0 -i 0 にすべてのパーティションをしているし、GUIインストーラーであるAnacondaで自動フォーマットした場合は自動的に -c 0 -i 0 になっている。

[root@charlie ~]# tune2fs -m 1 -c 0 -i 0 /dev/sdd1
tune2fs 1.39 (29-May-2006)
Setting maximal mount count to -1
Setting interval between checks to 0 seconds
Setting reserved blocks percentage to 1% (2441406 blocks)

logrotateの設定

Scientific Linux 6 からfilename-YYYYMMDDというファイル名で古いログが保存されるようになったが、「1個前のファイル」というときにいちいちファイル名を確認しないと分からないのが面倒なので、今までのようにfilename.Nというフォーマットになるように戻す。

# use date as a suffix of the rotated file
#dateext

tmpwatchの設定

/tmp 内で誰にもアクセスされずに放置されているファイルはtmpwatchにて自動消去される。しかし、デフォルトの設定だとディレクトリもatimeを参考にしてしまい、updatedbなどで毎日atimeが更新されることで、「ディレクトリは永遠に消去されない」ということが起きてしまうため、ディレクトリに関してはatimeを無視してmtimeを使うように変更する。

# flags=-umc
flags=-umcM

sysctlの設定

ほかのプロセスすべてをブロックしているプロセスがハングしてしまうと、「システム自体は生きているけど、動作しない」というやっかいな状態になってしまう。このようなことが何度かあったため、ほかプロセスをブロックしながらデフォルトの120秒以上ハングしているプロセスを見つけた場合はカーネル・パニックにしてしまい、カーネル・パニックが起きたら自動再起動するようにしておく。詳しくは Nico Schottelius: Reboot Linux if task blocked for more than n seconds を参照してほしい。

# Reboot 5 seconds after panic
kernel.panic = 5
# Panic if a hung task was found
kernel.hung_task_panic = 1

smartdの設定

日時でSMARTのショート自己テストを行ない、週次でロング自己テストを行なうように設定し、問題を早期に見つけられるようにしておく。以下では午前2時台にショート自己テストを行ない、木曜日の午前3時台にロング自己テストを行なうようにしている。

また、C5 (197) Current Pending Sector Count と C6 (198) Off-Line Scan Uncorrectable Sector Count は、ディスクが劣化してくるとゼロでなくなることがしばしばあるが、これらは再びゼロに戻ることがあったり、ゼロでない = 致命的というわけでもないので、変化があったときにだけメール通知が来るように設定している。この設定をしないと、値に変化がなくても値がゼロでない限り、30分に1回メール通知が届く。

DEVICESCAN -H -m root -s (S/../.././02|L/../../4/03) -C 197+ -U 198+

iptablesの設定

iptablesを使ってファイアウォールを構築する。構築方法は 複眼中心: iptablesによるファイアウォール設定 を参照してほしい。

バックアップの設定

rsyncを使用してNFS経由で別マシンに日次バックアップを行うスクリプトを設置する。このスクリプトは Mac OS X の Time Machine にインスパイアされたもので、ハードリンクを使用した重複排除や、週次の間引きなども行うようになっている。スクリプトの詳細は GitHub: rewse: backup.cron を参照してほしい。

Zabbixエージェントのインストール

統合監視にZabbixを使用しているので、そのエージェントをインストールする。インストール方法については 複眼中心: Scientific Linux 6.1 に Zabbix 1.8.10 をインストール を参照してほしい。

LDAPとOSユーザーを連携

ボクの環境にはLDAPサーバーがあり、OSユーザーはローカル管理せずにこのLDAPサーバーを使うようにしているので、この連携を行う。連携方法については 複眼中心: Scientific Linux 6.1 にLDAP経由でログイン を参照してほしい。

Ksplice Uptrack のインストール

再起動せずにKernelのセキュリティ・アップデートを行える Ksplice Uptrack のサブスクリプションを持っているため、Uptrackをインストールする。

[root@zulu ~]# curl -O https://www.ksplice.com/uptrack/install-uptrack
[root@zulu ~]# sh install-uptrack $ACCESS_KEY --autoinstall
[root@zulu ~]# uptrack-upgrade -y

各種の設定

/etc/profile.d, /etc/inputrc, /etc/screenrc, /etc/vimrc にいつもの設定を追加する。vimrcについては 複眼中心: 2011年5月のvimrc を参照してほしい。


Viewing all articles
Browse latest Browse all 8

Trending Articles