[!NOTE]
この記事は 2013/09/01 に momoto.github.io へ投稿した内容を Qiita へ移行してきたものです
CentOS 6 の基本的なシステム設定を確認します。 ここでいうシステム設定は、地域化、ネットワーク、セキュリティ、サービス管理 などの設定を対象にしています。デスクトップ環境や外観の設定は含みません。 また、各機能については基本的な設定までを概観するにとどめて、詳細な設定までは踏み込みません。
言語の設定 (/etc/sysconfig/i18n)
言語情報は地域、文字セットとともに Locale として設定します。 現在の Locale の設定や利用できる Locale 名を表示するには GNU Cライブラリ の locale をつかいます。
$ locale
LANG=C
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=
$ locale -a | grep -Ei "ja|jp"
ja_JP
ja_JP.eucjp
ja_JP.ujis
ja_JP.utf8
japanese
japanese.euc
Locale は LANG 変数に設定します。 一時的な変更であれば $ export LANG=ja_JP.UTF-8
のようにコマンドで定義するか、永続的な変更であればファイルに変数を定義します。 変数を定義するファイルは、システム全体に適用する場合は /etc/sysconfig/i18n
、ユーザごとに適用する場合は ~/.bashrc
などです。
$ LANG=ja_JP.UTF-8
$ locale | sudo tee /etc/sysconfig/i18n
LANG=ja_JP.UTF-8
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=
日本語を設定する場合の注意点として、Locale名は ja_JP.utf8
ではなく ja_JP.UTF-8
を使用したほうが良いようです。
(参考) ただのメモ: ja_JP.UTF-8 vs ja_JP.utf8
システム時刻の設定 (/etc/sysconfig/clock)
時刻系やタイムゾーンは /etc/sysconfig/clock
に設定します。また、タイムゾーン情報は tzdata のバイナリファイルを /etc/localtime
に保存します。
$ sudo vi /etc/sysconfig/clock
ZONE="Asia/Tokyo"
UTC=false
$ sudo ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
(参考) Date and Time – The GNU C Library
キー配列の設定 (/etc/sysconfig/keyboard)
キー配列は /etc/sysconfig/keyboard
に設定します。KEYTABLE に指定できる値は /lib/kbd/keymaps/i386/<配列>/<表名>.map.gz
にある表名です。日本語 106 であれば jp106 を設定します。
$ sudo vi /etc/sysconfig/keyboard
KEYTABLE="jp106"
KEYBOARDTYPE="pc"
kbd の loadkeys をつかって一時的に変更することもできます。
$ loadkeys jp106
Loading /lib/kbd/keymaps/i386/qwerty/jp106.map.gz
/etc/sysconfig/keyboard
の設定は X Window System のキーボード設定とは異なります。
(参考) man pages | KBD
ネットワークの設定 (/etc/sysconfig/{network,network-scripts/})
ネットワークの設定は、ネットワークインタフェースによらないグローバルな設定とインタフェースごとに固有の設定とでファイルがわかれています。
グローバルな設定では /etc/sysconfig/network
にホスト名やゲートウェイなどの情報を設定します。
$ sudo vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=localhost.localdomain
インタフェースごとの設定では /etc/sysconfig/ifcfg-<インタフェース名>
に DHCP の利用するかどうか、DHCP を利用しない場合の IP 情報などを設定します。
$ sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="dhcp"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
設定ファイルを書き換えたらネットワークサービスを再起動して変更を反映します。
$ sudo service network restart
インターフェース eth0 を終了中: [ OK ]
ループバックインターフェースを終了中 [ OK ]
ループバックインターフェイスを呼び込み中 [ OK ]
インターフェース eth0 を活性化中:
eth0 のIP情報を検出中... 完了。
[ OK ]
(参考) ネットワーキング – Red Hat Customer Portal
名前解決の設定 (nsswitch.conf、host.conf、hosts、resolv.conf)
名前解決の方法の順序は /etc/nsswitch.conf
に設定します。
$ sudo vi /etc/nsswitch.conf
...
#hosts: db files nisplus nis dns
hosts: files dns
...
/etc/host.conf
にも同様の設定がありますが、CentOS 6では nsswitch.conf
が優先されるようです(System V系とBSD系のちがい?)。ローカルホストでのみ有効なホストテーブルは /etc/hosts
に設定します。
$ sudo vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
ネームサーバのIPアドレスは /etc/resolv.conf
に設定します。
$ sudo vi /etc/resolv.conf
; generated by /sbin/dhclient-script
nameserver 10.0.2.3
(参考)
SELinuxの設定 (/etc/sysconfig/selinux)
現在の SELinux の状態を表示するには getenforce
をつかいます。 SELinux の状態は Enforcing(SELinux が有効、ポリシーは強制される)、Permissive(SELinux が有効、ポリシーは強制されない)、Disabled(SELinux が無効)のいずれかです。 ポリシーが強制されるとルールに基づいてアクセスが制限されます。 強制されない場合はアクセスの制限はありませんが、ルールに反するアクセスがログに記録されます。
$ getenforce
Enforcing
一時的に Enforcing、Permissive を切替えるには setenforce
をつかいます。setenforce 0
で Permissive へ、setenforce 1
で Enforcing へ切り替わります。
$ sudo setenforce 0
$ getenforce
Permissive
永続的に状態を切り替えるには /etc/sysconfig/selinux
の SELINUX=<状態>
を設定して、システムを再起動します。SELinux を無効化する場合は SELINUX=disabled
を設定します。
$ sudo 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 - SELinux is fully disabled.
SELINUX=disabled
$ sudo reboot
SELinux には、ポリシー記述の知識がなくても変数の on/off を切り替えるだけでポリシーを変更できるブール値が用意されています。このブール値の一覧を表示するには getsebool -a
をつかいます。
$ getsebool -a | head
abrt_anon_write --> off
abrt_handle_event --> off
allow_console_login --> on
allow_cvs_read_shadow --> off
allow_daemons_dump_core --> on
...
ブール値を変更するには setsebool -P <ブール値名> <値>
をつかいます。
$ sudo setsebool -P httpd_can_network_connect_db on
(参考) Scientific Linux 6 でのSELinux管理コマンドまとめ | 複眼中心
パケットフィルタリングの設定(iptables)
iptables 管理ツールをつかって、パケットフィルタリングのルール (Netfilterのfilterテーブル) までを簡単に見ていきます。 この記事で扱うのは iptables の機能のほんの一部で、その他の機能 (nat、mangle や ip6tables) については扱いません。
現在のパケットフィルタリングのルールを表示するには iptables -L
をつかいます。
$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
上の出力例は、テーブル(filter)に設定された 3 つのチェーン(INPUT、FORWARD、OUTPUT)と各チェーンのルール(INPUT に 5 行、FORWARD に 1 行、OUTPUT に 0 行)の内容を表示しています。 この場合、OUTPUT チェーンにはルールが何も設定されておらず、OUTPUT のポリシーには ACCEPT が設定されているので、ローカルからネットワークへ出ていくパケットに適用されるのは常に ACCEPT です。 一方、INPUT チェーンのポリシーにも ACCEPT が設定されていますが、INPUT にはルールが 5 つ設定されているので、ネットワークからローカルへ入ってくるパケットはルールのマッチオプションに一致する target が適用されます。
iptables の -L (--list)
オプションだけではルールのマッチオプションまで詳しく表示されないので、より詳しい出力を表示させるには -v (--verbose)
オプションを追加します。
$ sudo iptables -L -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
2290 234K ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
27 2268 ACCEPT icmp -- any any anywhere anywhere
26 1560 ACCEPT all -- lo any anywhere anywhere
3 132 ACCEPT tcp -- any any anywhere anywhere state NEW tcp dpt:ssh
1 40 REJECT all -- any any anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- any any anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 1534 packets, 283K bytes)
pkts bytes target prot opt in out source destination
-L (—list)
だけでは表示されていなかった pkts, bytes, in, out の列が表示されています。それぞれの列が示しているのは次のような内容です。
列名 | 説明 |
---|---|
pkts | ルールにマッチしたパケット数 |
bytes | 同バイト数 |
target | ルールにマッチしたパケットに対するターゲット |
prot | ルールを適用するプロトコル |
opt | パケットの断片化の区別 |
in | ルールを適用する入力インタフェース |
out | ルールを適用する出力インタフェース、INPUT チェーンでは指定不可 |
source | ルールを適用するパケットの送信元アドレス |
destination | ルールを適用するパケットの送信先アドレス |
追加のマッチオプション | 拡張マッチモジュール (state や reject-with など) |
上記例の INPUT チェーン 1 行目のルールだけ見てみると、プロトコル、インタフェース、送信元・送信先のいずれも指定していませんが、 state モジュールによって既に接続が確立している状態 (ESTABLISHED) と既存の接続に関連して新しく接続された状態 (RELATED) を指定していて、 プロトコル、インタフェース等を問わず既存の接続は ACCEPT するという内容になります。
(参考)
自動起動の設定(chkconfig)
サービスの自動起動は chkconfig
で設定します。サービスと現在の設定の一覧を表示するには chkconfig --list
をつかいます。
$ chkconfig --list
NetworkManager 0:off 1:off 2:on 3:on 4:on 5:on 6:off
abrtd 0:off 1:off 2:off 3:on 4:off 5:on 6:off
acpid 0:off 1:off 2:on 3:on 4:on 5:on 6:off
anamon 0:off 1:off 2:off 3:off 4:off 5:off 6:off
atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
auditd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
...
上記の一覧は一行ずつ、サービス名とどのランレベル (0〜6) で起動するか (on/off) を示しています。
サービスの自動起動を有効にするには chkconfig <サービス名> on
をつかいます。無効にするには chkconfig <サービス名> off
にしてください。
$ sudo chkconfig httpd on
$ chkconfig --list httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
ランレベルとは、システムの状態(シングルユーザモードかマルチユーザモードなど)によって切り替わる数字です。CUI のマルチユーザモードであれば 3、GUI のマルチユーザモードであれば 5 が、CentOS 6 のデフォルトです。 ランレベルについて詳しく踏み込みませんが /etc/inittab
のコメントで少し説明されています。現在のランレベルを確認するにはrunlevel
をつかいます。
$ tail /etc/inittab
# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:
$ runlevel
N 3
(参考) 10.2.3. chkconfig ユーティリティの使用 – Red Hat Customer Portal