CentOS 5.x - 初始環境設定

1、前言

以下前言內容擷於 CentOS - Wikipedia

CentOS(Community ENTerprise Operating System)是 Linux發行版之一,它是來自於 Red Hat Enterprise Linux 依照開放原始碼規定釋出的原始碼所編譯而成。由於出自同樣的原始碼,因此有些要求高度穩定性的伺服器以 CentOS 替代商業版的 Red Hat Enterprise Linux 使用。兩者的不同,在於 CentOS 並不包含封閉原始碼軟體,簡單說就是不用錢的 RHEL 不過享受自由當然也得不到商業支援了。



文章目錄

1、前言
2、實作環境
3、安裝及設定
4、設定 IP Address
5、關閉 SELinux
6、新增使用者、搬移家目錄、設定使用的 shell
7、建立 tcsh shell 環境設定檔 (~/.cshrc)
8、建立 VIM 環境設定檔 (~/.vimrc)
9、設定 sudo、封鎖 root 密碼
10、設定 hostname
11、設定本地時間及每天自動校對時間
12、查看機器 Listen 哪些 Port
13、RunLevel
14、設定 yum mirror sites 為台灣地區
15、安裝 RPMforge
16、rpm 基本指令
17、關閉不需要的服務
18、關閉多餘的 tty
19、更新 Locate DB
20、參考
21、Me FAQ
          Q1.GRUB Loading Stage 2?
          Q2.EXT3-fs: error loading journal?
          Q3.Apache 2.2.3 怎麼只啟動 IPv6 的 80 Port?



2、實作環境

  • CentOS 5.x (32/64 bit)



3、安裝及設定

以下相關設定為個人在安裝 CentOS 之後常用的一些設定,至於如何安裝 CentOS? 由於網路上文件夠多了所以就不重新造輪子了,要注意的大概就是 /var 不要切太小因為使用 yum update 時暫存資料都放在 /var/cache/yum,其它都差不多...那就開始吧。



4、設定 IP Address

選擇下列其中之一方式設定後,重新啟動網卡服務 (看要打字少還是字多的吧)
/etc/rc.d/init.d/network restart   //方式一
service network restart              //方式二 (service => /etc/rc.d/init.d/)


方式一、文字對話模式安裝
system-config-network

方式二、修改檔案
cat /etc/sysconfig/network-scripts/ifcfg-eth0
 DEVICE=eth0                 //網路卡名稱
 BOOTPROTO=static            //BOOTP協定
 BROADCAST=192.168.202.255   //廣播 IP Address
 HWADDR=00:15:C5:E5:99:B1    //MAC Address
 IPADDR=192.168.202.100      //IP Address
 NETMASK=255.255.254.0       //Netmask (遮罩)
 NETWORK=192.168.202.0       //網段
 ONBOOT=yes                  //開機自動啟動




5、關閉 SELinux

Linux 核心是 2.6 以上的就會自動載入 SELinux,但因為才剛開始玩 CentOS 對它還不熟為了減少挫折就先關了吧,等以後熟點再說,關於 SELinux 是什可以參考這三篇詳細的說明。

關閉 SELinux 設定值:
vi /etc/sysconfig/selinux
 SELINUX=enforcing         //預設值 (阻擋不安全的有取行為)
 SELINUX=disabled          //修改後 (關閉 SELinux 功能)

如何查看目前系統的 SELinux 狀態?
sestatus
 SELinux status:               enabled    //可知目前系統啟用 SELinux
 SELinuxfs mount:              /selinux
 Current mode:                 permissive
 Mode from config file:        disabled
 Policy version:               21
 Policy from config file:      targeted

以下訊息可知目前系統已關閉 SELinux 功能。
sestatus
 SELinux status:               disabled




6、新增使用者、搬移家目錄、設定使用的 shell

我習慣把 user 放在同一個資料夾下(/home/user),而 CentOS 的 adduser 指令預設會把使用者家目錄建立在 /home 下 (也就是 /home/weithenn)。
mkdir /home/user                             //建立放置所有使用者家目錄的資料夾
adduser -d /home/user/weithenn weithenn  //指定家目錄位置、新增使用者名稱 weithenn
passwd weithenn                              //設定使用者 weithenn 密碼
 Changing password for user weithenn.
 New UNIX password:          //輸入密碼
 Retype new UNIX password:   //再輸入一次密碼以確認
 passwd: all authentication tokens updated successfully.

CentOS 預設支援的 Shell 如下,而我個人是喜歡使用 tcsh shell。
cat /etc/shells
 /bin/sh
 /bin/bash
 /sbin/nologin
 /bin/tcsh
 /bin/csh
 /bin/ksh

修改使用者家目錄路徑及 shell
vipw
 weithenn:x:500:500::/home/weithenn:/bin/bash         //預設值
 weithenn:x:500:500::/home/user/weithenn:/bin/tcsh    //修改後




7、建立 tcsh shell 環境設定檔 (~/.cshrc)

設定 ~/.cshrc (/home/user/weithenn/.cshrc) 以便登入時載入相關環境設定 (tcsh shell 環境設定檔),內容如下:
set path = (/usr/kerberos/sbin /usr/kerberos/bin /usr/local/sbin /usr/local/bin /sbin /bin /usr/sbin /usr/bin $HOME/bin)
 if ($?prompt) then
      # An interactive shell -- set some stuff up
        if ( ! $?WINDOW ) then
                set prompt = '[%B%m%b] %B%~%b %# '
        else
                set prompt = "[%B%m:$WINDOW%b] %B%~%b %# "
                if ( ! $?SUDO_USER ) then
                        eval "`tset -s $TERM`"
                endif
        endif
 endif
 setenv LANG en_US.UTF-8
 setenv LC_ALL en_US.UTF-8
 setenv LESSCHARSET latin1
 setenv LC_TIME C
 setenv EDITOR vim
 alias  ls        ls --color=tty
 alias  h         history 25
 alias  j         jobs -l
 alias  la        ls -a --color=tty
 alias  lf        ls -FA --color=tty
 alias  ll        ls -lA --color=tty




8、建立 VIM 環境設定檔 (~/.vimrc)

設定 ~/.vimrc (/home/user/weithenn/.vimrc) 以便使用 vim 時載入相關環境設定,內容如下:
 set fileencoding=taiwan
 set guifontset=8x16,kc15f,-*-16-*-big5-0
 set cindent
 set enc=taiwan
 set fileencoding=taiwan
 set hls
 set nocompatible
 set sw=2
 syntax on
 highlight Comment ctermfg=darkcyan
 highlight Search term=reverse ctermbg=4 ctermfg=7




9、設定 sudo、封鎖 root 密碼

設定 sudo 才知道哪些人用 root 權限做了哪些事,若不喜歡用 sudo 還有許多其它方式來禁止 root 存取的方式,詳細方式可參考 Red Hat Enterprise Linux 4: 安全性設定手冊 第 4章. 工作站的保全
which sudo visudo      //確定 sudo 是否安裝
 /usr/bin/sudo
 /usr/sbin/visudo

設定 visudo 不用再鍵入密碼就可變成 root 並開啟 sudo log 功能,修改完 visudo 後若有人執行 sudo command 則 /var/log/sudo.log 會自動建立。
visudo
# %wheel   ALL=(ALL)   NOPASSWD: ALL   //預設值
  %wheel   ALL=(ALL)   NOPASSWD: ALL   //修改後
#Sudo log                              //並加入如下二行
 Host_Alias SERVER = 192.168.202.100                  //指定本機 IP
 Defaults@SERVER log_year, logfile=/var/log/sudo.log  //指定 log 格式及路徑


設定 sudo log 二種格式 (log_host、log_year)寫入 /var/log/sudo.log 內容的差異。
Dec 27 18:08:27 2007 : weithenn : TTY=pts/2 ; PWD=/home/user/weithenn ;    USER=root ; COMMAND=/usr/sbin/ntsysv                   //使用 log_year
Dec 27 18:13:27 : weithenn : HOST=centos-jiakai : TTY=pts/2 ;    PWD=/home/user/weithenn ; USER=root ; COMMAND=/usr/sbin/visudo   //使用 log_host


將使用者 weithenn 加入 wheel 群組,也就是只有 weithenn 才能變成 root。
vi /etc/group
 wheel:x:10:root                  //預設值
 wheel:x:10:root,weithenn         //修改後


封鎖 root 密碼,因為我不喜歡再記 root 的密碼且放著也覺得不好所以就把 root password 給封了吧,方式就是修改 /etc/shadow 的第二欄位將內容改成 * 即可。
vipw
 root:$1$qa1xL66K$DSp11kLKJZOx05FZsEFle0:13874:0:99999:7:::    //預設值
 root:*:13874:0:99999:7:::                                     //修改後




10、設定 hostname

若安裝時 hostname 沒設定好就設定一下吧。
vi /etc/sysconfig/network
 NETWORKING=yes
 NETWORKING_IPV6=no
 HOSTNAME=centos-test.weithenn.org          //設定 hostname




11、設定本地時間及每天自動校對時間

若安裝設定時區時不小心選到 UTC 的話就改回成 CST Taipei 吧。
cp /usr/share/zoneinfo/Asia/Taipei /etc/localtime
date
 Thu Dec 27 17:07:29 CST 2007

若區網內沒架設 NTP 就寫個簡單的 shell 去每天對時吧,把 script (此例叫 ntpdate.sh) 放在 /etc/cron.daily 並給予 755 的權限就會每天自動對時了。
vi /etc/cron.daily/ntpdate.sh    //建立對時 script 名稱為 ntpdate.sh 內容如下
#!/bin/sh
 ntpdate -s watch.stdtime.gov.tw
chmod 755 /etc/cron.daily/ntpdate.sh   //給予 755 權限讓系統能自動執行


若系統沒有 /usr/sbin/ntpdate 這個執行檔,當您執行 /etc/cron.daily/ntpdate.sh 時系統會提示說找不到 ntpdate 指令 (ntpdate: command not found.),這時請利用 yum 安裝 ntp 套件吧。
yum -y install ntp



12、查看機器 Listen 哪些 Port

查看機器到底 Listen 哪些 Port (FreeBSD 的話就用 sockstat 吧!!)。

顯示服務名稱。
netstat -tl                                  
 Active Internet connections (only servers)
 Proto   Recv-Q   Send-Q     Local Address   Foreign Address    State
 tcp          0        0     *:ssh           *:*                LISTEN


顯示 Port Number。
netstat -tnl                                
 Active Internet connections (only servers)
 Proto   Recv-Q   Send-Q    Local Address   Foreign Address   State
 tcp          0        0    :::22           :::*              LISTEN


查看機器啟動哪些 Service,可利用 ntsysv or chkconfig 來設定系統開機時是否啟動指定服務。
 chkconfig --list [name]            //顯示指定服務 runlevel 情形
 chkconfig --add <name>             //新增指定服務
 chkconfig --del <name>             //刪除指定服務
 chkconfig [--level <levels>] <name> <on|off|reset|resetpriorities>




13、RunLevel

若是使用文字介面來安裝那預設就會使用文字介面來開機 (init 3),若使用圖形介面安裝 (Gnome or KDE) 則預設就會使用圖形介面來開機 (init 5)。有關 RunLevel 可參考下列二篇文章

修改系統 RunLevel
#vi /etc/inittab
# Default runlevel. The runlevels used by RHS 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)   //多人模式,無 NFS 功能 (同 init 3 若你不需要網路的話)
#   3 - Full multiuser mode                          //多人模式 (文字介面)
#   4 - unused
#   5 - X11                                          //多人模式 (視窗介面)
#   6 - reboot (Do NOT set initdefault to this)      //重開機
#
 id:3:initdefault:     //3 文字模式,5 X-WIN




14、設定 yum mirror sites 為台灣地區

Yum (Yellow dog Updater, Modified) 為 Fedora 及 CentOS 用來管理 RPM 安裝,可解決套件相依性問題。詳細內容可參考 Wikipedia - Yellow Dog Updater Modified。CentOS 預設 Mirror Site 一定是找國外的,所以我們把站台設回國內 Taiwan Mirror Site 這樣使用 YUM 安裝、更新套件上速度都會加快不少。
cd /etc/yum.repos.d
cp CentOS-Base.repo CentOS-Base.repo.bak
sed 's,mirror.centos.org/centos,ftp.cse.yzu.edu.tw/pub/CentOS,g' CentOS-Base.repo.bak > CentOS-Base.repo    //元智大學
 or
sed 's,mirror.centos.org/centos,ftp.cs.pu.edu.tw/Linux/CentOS,g' CentOS-Base.repo.bak > CentOS-Base.repo    //靜宜大學
 or
sed 's,mirror.centos.org/centos,ftp.isu.edu.tw/pub/Linux/CentOS,g' CentOS-Base.repo.bak > CentOS-Base.repo  //義守大學


在使用 yum 之前為了避免因為系統時間不準而造成執行 yum 時失敗,建議先以 ntpdate 進行網路對時。
ntpdate -s watch.stdtime.gov.tw

列出常用的 yum 指令。
 yum update                                    //更新套件 (一個一個問)
 yum update -y                                 //更新所有套件 (所有回答都回答 Y)
 yum check-update                              //列出需要更新的套件清單
 yum upgrade                                   //升級套件
 yum install aaa                               //安裝套件
 yum remove aaa                                //移除套件
 yum clean all                                 //清除安裝時的暫存檔
 yum search aaa                                //搜尋套件
 yum list                                      //列出可安裝的套件清單
 yum info aaa                                  //列出套件訊息
 yum grouplist                                 //列出群組安裝套件清單
 yum groupinstall "GNOME Desktop Environment"  //安裝 Gnome 套件群組
 yum groupupdate                               //更新套件群組
 yum groupremove                               //移除套件群組
 yum groupinfo                                 //列出群組安裝套件內含哪些套件
     Mandatory Packages:                       //強制安裝套件
     Default Packages:                         //預設安裝套件
     Optional Packages:                        //建議安裝套件 (自已視需求另外安裝)




15、安裝 RPMforge

雖然將 yum mirror sites 設定為台灣地區,不過除了必要的套件之外很多都沒有 (ex. lighttpd...),所以我們可以透過設定 RPMforge 來增加可安裝的套件數量 (ex. 預設 yum 是沒有 lighttpd 套件的)。

For 32 bit CentOS 執行安裝 RPMforge 套件。
rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.5.1-1.el5.rf.i386.rpm
 Retrieving http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.5.1-1.el5.rf.i386.rpm
 warning: /var/tmp/rpm-xfer.k3FbwC: Header V3 DSA signature: NOKEY, key ID 6b8d79e6
 Preparing...          ############################# [100%]
    1:rpmforge-release ############################# [100%]


For 64 bit CentOS 執行安裝 RPMforge 套件。
rpm -Uhv http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm
 Retrieving http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm
 warning: /var/tmp/rpm-xfer.k3FbwC: Header V3 DSA signature: NOKEY, key ID 6b8d79e6
 Preparing...          ############################# [100%]
    1:rpmforge-release ############################# [100%]


升級 [RPMforge] 套件後在度使用 yum 搜尋 lighttpd 就可找到。
yum search lighttpd | grep lighttpd.i386
 lighttpd.i386                            1.4.18-1.el5.rf        rpmforge




16、rpm 基本指令

列出常用的 rpm 指令。
 rpm -ivh aaa         //安裝 rpm
 rpm -e aaa           //刪除 rpm
 rpm -Uvh aaa         //升級 rpm 套件
 rpm -qa |grep aaa    //查尋該套件版本
 rpm -qi aaa          //列出該套件詳細資訊
 rpm -ql aaa          //列出該套件相關檔案
 rpm -qc aaa          //列出該套件設定檔及啟動檔 




17、關閉不需要的服務

CentOS 為了讓你使用方便所以預設為開啟很多服務,而若我們是把 CentOS 拿來當 Server 在用的話其實有很多服務是用不到的,所以就列一下把不需要的服務關閉一方面減少安全性問題 (有的服務會開 Port),一方面也可以增加系統效能 (因為每個服務都會佔記憶體),以下指令可以知道你的系統預設把多少服務給開啟。
chkconfig --list |grep "3:on" |awk '{print $1}' |sort

以我的習慣為例的話,我安裝時就只會選 Desktop KDE (因為公司有用 APC UPS 需要 VNC 連過去設定,且只有 GUI 介面),其它有需要就用 yum 安裝,所以安裝完成後預設會開啟下列服務,至於哪些要停用哪些要啟用就看你的需求吧,以下是我個人的建議 (也是套用我機器上的設定)。




決定哪些服務要開哪些服務要關就來執行關閉服務及關閉啟動機器時不啟動服務,以下是我個人的需求。
 service acpid stop ; chkconfig acpid off
 service apmd stop ; chkconfig apmd off
 service atd stop ; chkconfig atd off
 service auditd stop ; chkconfig auditd off
 service autofs stop ; chkconfig autofs off
 service avahi-daemon stop ; chkconfig avahi-daemon off
 service bluetooth stop ; chkconfig bluetooth off
 service cpuspeed stop ; chkconfig cpuspeed off
 service cups stop ; chkconfig cups off
 service firstboot stop ; chkconfig firstboot off
 service gpm stop ; chkconfig gpm off
 service haldaemon stop ; chkconfig haldaemon off
 service hidd stop ; chkconfig hidd off
 service hplip stop ; chkconfig hplip off
 service ip6tables stop ; chkconfig ip6tables off
 service isdn stop ; chkconfig isdn off
 service lm_sensors stop ; chkconfig lm_sensors off
 service mcstrans stop ; chkconfig mcstrans off
 service messagebus stop ; chkconfig messagebus off
 service netfs stop ; chkconfig netfs off
 service nfslock stop ; chkconfig nfslock off
 service pcscd stop ; chkconfig pcscd off
 service portmap stop ; chkconfig portmap off
 service restorecond stop ; chkconfig restorecond off
 service rpcgssd stop ; chkconfig rpcgssd off
 service rpcidmapd stop ; chkconfig rpcidmapd off
 service yum-updatesd stop ; chkconfig yum-updatesd off
 service smartd stop ; chkconfig smartd off




18、關閉多餘的 tty

大部份都使用 putty 來遠端連線到 CentOS 處理,所以 tty (本機 console) 幾乎很少用到而預設會開啟 6 個,修改成只開啟 2 個。
vi /etc/inittab
# Run gettys in standard runlevels
 1:2345:respawn:/sbin/mingetty tty1
 2:2345:respawn:/sbin/mingetty tty2
#3:2345:respawn:/sbin/mingetty tty3     //mark 掉
#4:2345:respawn:/sbin/mingetty tty4     //mark 掉
#5:2345:respawn:/sbin/mingetty tty5     //mark 掉
#6:2345:respawn:/sbin/mingetty tty6     //mark 掉




19、更新 Locate DB

因為 Centos 預設僅每天會更新一次 locate db,所以 CentOS 剛安裝好或剛安裝好某些套件時,若使用 locate (例如尋找 apache 設定檔) 的話就會發生如下錯誤訊息。
locate httpd.conf
 locate: can not open `/var/lib/mlocate/mlocate.db': No such file or directory

你可以使用指令 updatedb 來手動更新 locate db。
updatedb                     //可能要幾分鐘時間
locate httpd.conf          //再次搜尋就可找到了 (可配合參數 -i 來忽略大小寫)
 /etc/httpd/conf/httpd.conf
 /usr/share/system-config-httpd/httpd.conf.xsl




20、參考




21、Me FAQ

Q1. GRUB Loading Stage 2?

Error Message:
安裝完 CentOS 後開機時出現如下訊息,且主機呈現當機狀態無法進行任何動作?
 GRUB Loading Stage 2
Ans:
簡單說造成此問題的原因為 GRUB 損壞 (或安裝不完全),此時可利用安裝光碟片再次重新安裝 GRUB 即可解決,修復步驟如下:
  1. 放入 CentOS DVD 安裝光碟片。
  2. 進入救援模式,請輸入指令 linux rescue。
  3. 回答一般問題,系統要求設定語系、鍵盤、滑鼠及是否啟動網路卡 (依預設值回答即可,網路卡倒是不需要啟動)。
  4. 將根目錄切換到光碟片,請輸入指令 chroot /mnt/sysimage。
  5. 重新安裝 GRUB,請輸入指令 grub-install /dev/hda or /dev/sda (PATA->hda, SATA/SCSI/SAS->sda)。
  6. 離開救援模式,請輸入指令 exit。
  7. 重新啟動系統,請輸入指令 reboot。



Q2. EXT3-fs: error loading journal?

Error Message:
無法存取檔案系統,到 Console 端去看一狗票如下錯誤訊息
 EXT3-fs error (device sda1): ext3_readdir: bad entry in directory#1577666: inode out of bounds - offset=0, inode=1572866, rec_len=12, name_len=1
將主機關機後重新開機先進 BIOS 重新檢查 HDD 是正常狀態,但開機準備進入 CentOS 後發生 Kernel Painc 訊息大致如下
 JBD: FAiled to read block at offset 10516
 EXT3-fs: error loading journal
 ...略... (總之一堆 mount error)
 Kernel panic - not syncing: Attempted to kill init!

Ans:
此次解決方式為進入救援模式後 fsck 根目錄完成後,主機重新開機就恢復正常了 (運氣好?),簡述此次解決方式如下
  1. 放入 CentOS DVD 安裝光碟片。
  2. 進入救援模式,請輸入指令 linux rescue。
  3. 回答一般問題,系統要求設定語系、鍵盤、滑鼠及是否啟動網路卡 (依預設值回答即可,網路卡倒是不需要啟動)。
  4. 進行檔案系統修復,首先執行 fsck 指令 (有可能系統會回答 cannot read /etc/fstab,此次狀況也是如此,請嘗試執行下一行的指令),接著執行 fdisk -l 指令來查看 device (了解 HDD 代號)、mount point...資訊,此例主機硬碟代號為 sda,最後執行 fsck /dev/sda1 (修復根目錄)。
  5. 離開救援模式,請輸入指令 exit。
  6. 重新啟動系統,請輸入指令 reboot。

此例中修復根目錄 (fsck /dev/sda1) 完成重開機後,系統便可正常開機一切也恢復正常。(當然正常開機後在執行 fsck 指令再次掃描所有的 Device 一次,不過若是此主機為重要機器的話還是要記得隨時備份資料及建立 RAID 才是王道哦!!)



Q3. Apache 2.2.3 怎麼只啟動 IPv6 的 80 Port?

Error Message:
CentOS 5.7 (32bit) 利用 YUM 安裝 Apache 版本為 httpd-2.2.3-53.el5.centos.3,當啟動 Apache 服務時卻只有 IPv6 的 Port 80 會 Listen 而以卻看不到 IPv4 的 Port 80?
netstat -tunpl | grep :80
  tcp        0      0 :::80        :::*        LISTEN      3700/httpd

Ans:
簡單說來需要修改 httpd.conf 設定檔中的 Listen,詳細請參考 Apache HTTP Server Version 2.2 - Binding
Listen 0.0.0.0:80 則為採用 IPv4 的 Port 80
Listen 80 則為採用 IPv6 的 Port 80