ボクが 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 を参照してほしい。