momoto.github.io

CentOS 6のシステム設定を確認する

 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を使用したほうが良いようです。

参考

システム時刻の設定(/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

参考

キー配列の設定(/etc/sysconfig/keyboard)

 キー配列は/etc/sysconfig/keyboardに設定します。KEYTABLEに指定できる値は/lib/kbd/keymaps/i386/<配列>/<表名>.map.gzにある表名です。日本語106であればjp106を設定します。

$ sudo vi /etc/sysconfig/keyboard

KEYTABLE="jp106"
KEYBOARDTYPE="pc"

 kbdloadkeysをつかって一時的に変更することもできます。

$ loadkeys jp106
Loading /lib/kbd/keymaps/i386/qwerty/jp106.map.gz

 /etc/sysconfig/keyboardの設定はX Window Systemのキーボード設定とは異なります。

参考

ネットワークの設定(/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  ]

参考

名前解決の設定(nsswitch.conf、host.conf、hosts、resolv.conf)

参考

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

参考

パケットフィルタリングの設定(iptables)

 iptables管理ツールをつかって、パケットフィルタリングのルール(Netfilterのfilterテーブル)までを簡単に見ていきます。 この記事で扱うのはiptablesの機能のほんの一部で、その他の機能(nat、mangleやip6tables)については扱いません。

 現在のパケットフィルタリングのルールを表示するにはiptables -Lをつかいます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ 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)オプションを追加します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ 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の列が表示されています。それぞれの列が示しているのは次のような内容です。

 上記例の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

参考

参考

関連記事