CentOS 5.x をインストールしたあと、いろいろと初期設定を行っています。今は、サーバ用途の場合 kickstart の %post セクションでいろいろな初期設定をまとめて行って自動化しています。kickstart は、別の機会に公開するとして、今回は %post セクションで行っている初期設定を順番に紹介します。紹介する順序は、順不同です。
- NOZEROCONF を設定する
余計なネットワーク経路を作らないために、/etc/sysconfig/network に次の設定を追加します。APIPA という仕組みを使う場合は必要です。
NOZEROCONF=yes
- IPv6 を無効にする
IPv6 を使っていないので、/etc/modprobe.conf に次の設定を追加します。
alias net-pf-10 off
alias ipv6 off
- ifdown-eth にバッチをあてる
bonding を使っている場合、ifdown-eth がおかしいので、次のようなパッチをあてます。bonding を使っていない場合は、特にパッチをあてる必要もないです。
/usr/bin/patch /etc/sysconfig/network-scripts/ifdown-eth << EOF
60c60,62
<
—
> for target in \\$(cat /sys/class/net/\\${DEVICE}/bonding/arp_ip_target) ; do
> echo “-\\${target}” > /sys/class/net/\\${DEVICE}/bonding/arp_ip_target
> done
EOF
- SSH デーモンの設定でパスワード認証を無効にして、公開鍵認証のみに設定変更する
/etc/ssh/sshd_config に、次のようなパッチをあてます。
/usr/bin/patch /etc/ssh/sshd_config << EOF
58c58
< #PasswordAuthentication yes
—
> PasswordAuthentication no
60d59
< PasswordAuthentication yes
73,75c72
< #GSSAPIAuthentication no
< GSSAPIAuthentication yes
< #GSSAPICleanupCredentials yes
—
> GSSAPIAuthentication no
EOFさらに、次の設定を追加します。
#
# local configuration
#
PermitRootLogin without-password
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
- 不要なサービスを無効にする
サーバ用途として、使用しないサービスを無効にします。次のような簡易スクリプトを書いておくと便利です。サービスのリストは、自分の環境で置き換えるとよいでしょう。
#!/bin/sh
function get_cmd() {
echo ‘acpid auditdi autofs avahi-daemon bluetooth cups firstboot gpm hidd ip6tables mcstrans mdmonitor netfs nfslock pcscd restorecond rpcgssd rpcidmapd sendmail xfs yum-updatesd’
}
for cmd in `get_cmd`; do
/sbin/chkconfig $cmd off
/etc/init.d/$cmd stop
done
- OOM Killer を無効にする
Linux には、メモリ不足になってしまったときプロセスを任意で強制終了させる OOM Killer という仕組みがありますが、これを無効にしてプロセスがメモリ不足で落ちるようにします。どちからというと、そのほうがお行儀がよいです。
/etc/sysctl.conf に、次の設定を追加します。
# disable OOM Killer
vm.overcommit_ratio = 99
vm.overcommit_memory = 2
- iptables を有効にして設定する
Linux のファイアーウォールである iptables を有効にして、設定します。
iptables の設定は、通常はコマンドで行うものらしいのですが、オプションがまったく覚えることができないので、/etc/sysconfig/iptables を 600 で作成して、次の内容で作成します。
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [504:56964]
-A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i eth0 -j ACCEPT
-A INPUT -p tcp -m tcp –dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp –dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp –dport 80 -j ACCEPT上の設定では、内側からの接続はすべて通して、外側からの接続は SSH、SMTP、HTTP ポートだけ許可するという内容になります。
サーバの用途に応じて、開放するポートを設定します。bonding を組んでいる場合は、eth0 ではなく bond0 になります。
- Ctrl + Alt + Del による再起動を無効にする
サーバの操作中に誤って Ctrl + Alt + Del キーを押して、サーバを再起動させないように /etc/inittab に次のようなパッチをあてます。
/usr/bin/patch /etc/inittab << EOF
31c31,33
< ca::ctrlaltdel:/sbin/shutdown -t3 -r now
—
> # Trap CTRL-ALT-DELETE
> #ca::ctrlaltdel:/sbin/shutdown -t3 -r now
> ca::ctrlaltdel:/usr/bin/logger ‘CTRL-ALT-DELETE trap is disabled’
EOFこの設定をしておくと、Ctrl + Alt + Del を押したときにログに残ります。
- デフォルトの yum リポジトリを削除する
ローカルで yum リポジトリをミラーしている場合、デフォルトの yum リポジトリは不要なので設定を削除します。
/bin/rm /etc/yum.repos.d/CentOS-Base.repo
/bin/rm /etc/yum.repos.d/CentOS-Media.repo
- 管理ユーザを作成する
さきほどの SSH の設定で root による SSH 接続ができなくなるので、専用の管理ユーザを作成して SSH 経由でログインできるようにします。
/usr/sbin/useradd -g hoge -s /bin/zsh hoge
/bin/mkdir ~hoge/.ssh
/bin/chmod 700 ~hoge/.ssh
/bin/cat << EOF > ~hoge/.ssh/id_rsa
SSH の秘密鍵
EOF
/bin/chmod 600 ~hoge/.ssh/id_rsa
/bin/cat << EOF >~hoge/.ssh/id_rsa.pub
SSH の公開鍵
EOF
/bin/cat << EOF > ~hoge/.ssh/authorized_keys2
SSH 接続を許可したいサーバの SSH 公開鍵
EOF
/bin/chmod 600 ~hoge/.ssh/authorized_keys2
/bin/cat << EOF > ~hoge/.ssh/config
Host *
Compression yes
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
EOF
- su を無効にする
/etc/pam.d/su に、次のようなパッチをあてます。
/usr/bin/patch /etc/pam.d/su << EOF
6c6
< #auth required pam_wheel.so use_uid
—
> auth required pam_wheel.so use_uid
EOF
- sudo を可能にする
/etc/sudersを、次の内容で書き換えます。CentOS のデフォルトの suders の設定内容がすこしきつく、若干扱いにくいので次の内容だけにしておきます。
%hoge ALL=(ALL) ALL
- シリアルリダイレクトを有効にする
IPMI を SOL 経由で Linux のコンソール画面をみることができるようにシリアルリダイレクトを有効にします。
詳しい設定内容は、こちらを参照してください。
あとは、ウェブサーバ、メールサーバ、データベースサーバ、などサーバの用途に応じた設定を個別で行います。
これには、Puppet を使うとかなり便利なので、実際にどんなふうに使っているかは、別の機会に紹介したいと思います。







IPv6無効化には諸説あるようですね
私は以下の様にしています
/etc/modprobe.confへ以下の行を追加
インストール時にipv6を無効にしていてもkernelモジュールは読み込まれるため要設定
———————————————————————
# Turn off ipv6
install ipv6 /sbin/modprobe -n -i ipv6
———————————————————————
/etc/sysconfig/network の NETWORKING_IPV6= をnoに設定
インストール時にipv6を無効にしていればnoになっているため変更の必要はない
———————————————————————
NETWORKING_IPV6=no
———————————————————————
参考URL http://d.hatena.ne.jp/adsaria/20070922
[...] CentOS 5 の初期設定 | Carpe Diem [...]
>SE1さん
コメントありがとうございます。
この設定を行った CentOS で、lsmod | grep ipv6 を実行してみましたが ipv6 モジュールが読み込まれていないようです。
紹介していただいた方法が、シンプルでよいかもしれません。
>インストール時にipv6を無効にしていても…
>インストール時にipv6を無効にしていれば…
ここでの「インストール時」とはCentOSグラフィカルインストーラ上の
選択肢でipv6を無効としてCentOSをインストールした場合です
わかりにくくなってしまってすみません
ですので、naoyaさんのようにインストール後に
modprobe.confを編集すればモジュールは読み込まれないですね
[...] CentOS 5 の初期設定 | Carpe Diem [...]
>SE1 さん
コメントありがとうございます!
なるほど、インストーラーを使用した場合ですね。
勉強になりました!