CentOS系統安裝之後并不能立即投入生産環境使用,往往需要先經過我們運維人員的優化才行。在此講解幾點關于Linux系統安裝後的基礎優化操作。注意:本次優化都是基于CentOS(5.8/6.4)。
下面我就為大家簡單講解幾點關于Linux系統安裝後的基礎優化操作。
注意:本次優化都是基于CentOS(5.8/6.4)。關于5.8和6.4兩者優化時的小差別,我會在文中提及的。
優化内容:
①修改ip位址、網關、主機名、DNS等
②關閉selinux,清空iptables
③添加普通使用者并進行sudo授權管理
④更新yum源及必要軟體安裝
⑤定時自動更新伺服器時間
⑥精簡開機自啟動服務
⑦定時自動清理/var/spool/clientmqueue/目錄垃圾檔案,放置inode節點被占滿
⑧變更預設的ssh服務端口,禁止root使用者遠端連接配接
⑨鎖定關鍵檔案系統
⑩調整檔案描述符大小
調整字元集,使其支援中文
去除系統及核心版本登入前的螢幕顯示
核心參數優化
1、修改ip位址、網關、主機名、DNS等
<code>[root@localhost ~]</code><code># vi /etc/sysconfig/network-scripts/ifcfg-eth0</code>
<code>DEVICE=eth0 </code><code>#網卡名字</code>
<code>BOOTPROTO=static </code><code>#靜态IP位址擷取狀态 如:DHCP表示自動擷取IP位址</code>
<code>IPADDR=192.168.1.113 </code><code>#IP位址</code>
<code>NETMASK=255.255.255.0 </code><code>#子網路遮罩</code>
<code>ONBOOT=</code><code>yes</code><code>#引導時是否激活</code>
<code>GATEWAY=192.168.1.1</code>
<code>[root@localhost ~]</code><code># cat /etc/sysconfig/network-scripts/ifcfg-eth0</code>
<code>DEVICE=eth0</code>
<code>BOOTPROTO=static</code>
<code>IPADDR=192.168.1.113</code>
<code>NETMASK=255.255.255.0</code>
<code>ONBOOT=</code><code>yes</code>
<code>[root@localhost ~]</code><code># vi /etc/sysconfig/network</code>
<code>HOSTNAME=c64 </code><code>#修改主機名,重新開機生效</code>
<code>GATEWAY=192.168.1.1 </code><code>#修改預設網關,如果上面eth0裡面不配置網關的話,預設就使用這裡的網關了。</code>
<code>[root@localhost ~]</code><code># cat /etc/sysconfig/network</code>
<code>HOSTNAME=c64</code>
<code>我們也可以用 hostnamec64 來臨時修改主機名,重新登入生效</code>
<code>修改DNS</code>
<code>[root@localhost ~]</code><code># vi /etc/resolv.conf #修改DNS資訊</code>
<code>nameserver 114.114.114.114</code>
<code>nameserver 8.8.8.8</code>
<code>[root@localhost ~]</code><code># cat /etc/resolv.conf #檢視修改後的DNS資訊</code>
<code>[root@localhost ~]</code><code># service network restart #重新開機網卡,生效</code>
<code>重新開機網卡,也可以用下面的指令</code>
<code>[root@localhost ~]</code><code># /etc/init.d/network restart</code>
2、關閉selinux,清空iptables
關閉selinux
<code>[root@c64 ~]</code><code># sed –i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config #修改配置檔案則永久生效,但是必須要重新開機系統。</code>
<code>[root@c64 ~]</code><code># grep SELINUX=disabled /etc/selinux/config</code>
<code>SELINUX=disabled </code><code>#檢視更改後的結果</code>
<code>[root@c64 ~]</code><code># setenforce 0#臨時生效指令</code>
<code>[root@c64 ~]</code><code># getenforce #檢視selinux目前狀态</code>
<code>Permissive</code>
清空iptables
<code>[root@c64 ~]</code><code># iptables –F #清理防火牆規則</code>
<code>[root@c64 ~]</code><code># iptables –L #檢視防火牆規則</code>
<code>Chain INPUT (policy ACCEPT)</code>
<code>target prot opt </code><code>source</code> <code>destination</code>
<code>Chain FORWARD (policy ACCEPT)</code>
<code>Chain OUTPUT (policy ACCEPT)</code>
<code>[root@c64 ~]</code><code>#/etc/init.d/iptables save #儲存防火牆配置資訊</code>
<code>3、添加普通使用者并進行</code><code>sudo</code><code>授權管理</code>
<code>[root@c64 ~]</code><code># useradd sunsky</code>
<code>[root@c64 ~]</code><code># echo "123456"|passwd --stdin sunsky&&history –c</code>
<code>[root@c64 ~]</code><code># visudo</code>
<code>在root ALL=(ALL) ALL此行下,添加如下内容</code>
<code>sunsky ALL=(ALL) ALL</code>
4、更新yum源及必要軟體安裝
yum安裝軟體,預設擷取rpm包的途徑從國外官方源,改成國内的源。
國内較快的兩個站點:搜狐鏡像站點、網易鏡像站點
方法1:自己配置好安裝源配置檔案,然後上傳到linux。
方法2:使用鏡像站點配置好的yum安裝源配置檔案
<code>[root@c64 ~]</code><code># cd /etc/yum.repos.d/</code>
<code>[root@c64 yum.repos.d]</code><code># /bin/mv CentOS-Base.repo CentOS-Base.repo.bak</code>
<code>[root@c64 yum.repos.d]</code><code># wget http://mirrors.163.com/.help/CentOS6-Base-163.repo</code>
<code>接下來執行如下指令,檢測yum是否正常</code>
<code>[root@c64 yum.repos.d]</code><code># yum clean all #清空yum緩存</code>
<code>[root@c64 yum.repos.d]</code><code># yum makecache #建立yum緩存</code>
然後使用如下指令将系統更新到最新
<code>[root@c64 yum.repos.d]</code><code># rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY* #導入簽名KEY到RPM</code>
<code>[root@c64 yum.repos.d]</code><code># yum upgrade-y #更新系統核心到最新</code>
接下來就要安裝幾個必要的軟體了
<code>[root@c64 yum.repos.d]</code><code># yum install lrzsz ntpdate sysstat -y</code>
lrzsz是一個上傳下載下傳的軟體
sysstat是用來檢測系統性能及效率的工具
5、定時自動更新伺服器時間
<code>[root@c64 ~]</code><code># echo '*/5 * * * * /usr/sbin/ntpdate time.windows.com >/dev/null 2 >&1' >>/var/spool/cron/root</code>
<code>[root@c64 ~]</code><code># echo '*/10 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1' >>/var/spool/cron/root</code>
6、精簡開機自啟動服務
剛裝完作業系統可以隻保留crond,network,syslog,sshd這四個服務。(Centos6.4為rsyslog)
<code>[root@c64 ~]</code><code># for sun in `chkconfig --list|grep 3:on|awk '{print $1}'`;do chkconfig --level 3 $sun off;done</code>
<code>[root@c64 ~]</code><code># for sun in crond rsyslog sshd network;do chkconfig --level 3 $sun on;done</code>
<code>[root@c64 ~]</code><code># chkconfig --list|grep 3:on</code>
<code>crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off</code>
<code>network 0:off 1:off 2:on 3:on 4:on 5:on 6:off</code>
<code>rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off</code>
<code>sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off</code>
<code>[root@c64 ~]</code><code>#</code>
7、定時自動清理/var/spool/clientmqueue/目錄垃圾檔案,放置inode節點被占滿
本優化點,在6.4上可以忽略不需要操作即可!
<code>[root@c64 ~]</code><code># mkdir /server/scripts -p</code>
<code>[root@c64 ~]</code><code># vi /server/scripts/spool_clean.sh</code>
<code>#!/bin/sh</code>
<code>find</code><code>/var/spool/clientmqueue/-typef</code> <code>-mtime +30|xargsrm-f</code>
<code>然後将其加入到</code><code>crontab</code><code>定時任務中</code>
<code>[root@c64 ~]</code><code># echo '*/30 * * * * /bin/sh /server/scripts/spool_clean.sh >/dev/null 2>&1'>>/var/spool/cron/root</code>
8、變更預設的ssh服務端口,禁止root使用者遠端連接配接
<code>[root@c64 ~]</code><code># cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</code>
<code>[root@c64 ~]</code><code># vim /etc/ssh/sshd_config</code>
<code>Port 52113</code><code>#ssh連接配接預設的端口</code>
<code>PermitRootLogin no </code><code>#root使用者黑客都知道,禁止它遠端登入</code>
<code>PermitEmptyPasswords no </code><code>#禁止空密碼登入</code>
<code>UseDNS no </code><code>#不使用DNS</code>
<code>[root@c64 ~]</code><code># /etc/init.d/sshd reload #從新加載配置</code>
<code>[root@c64 ~]</code><code># netstat -lnt #檢視端口資訊</code>
<code>[root@c64 ~]</code><code># lsof -i tcp:52113</code>
9、鎖定關鍵檔案系統
<code>[root@c64 ~]</code><code># chattr +i /etc/passwd</code>
<code>[root@c64 ~]</code><code># chattr +i /etc/inittab</code>
<code>[root@c64 ~]</code><code># chattr +i /etc/group</code>
<code>[root@c64 ~]</code><code># chattr +i /etc/shadow</code>
<code>[root@c64 ~]</code><code># chattr +i /etc/gshadow</code>
使用chattr指令後,為了安全我們需要将其改名
<code>[root@c64 ~]</code><code># /bin/mv /usr/bin/chattr /usr/bin/任意名稱</code>
10、調整檔案描述符大小
<code>[root@localhost ~]</code><code># ulimit –n #檢視檔案描述符大小</code>
<code>1024</code>
<code>[root@localhost ~]</code><code># echo '* - nofile 65535' >> /etc/security/limits.conf</code>
配置完成後,重新登入即可檢視。
提示:也可以把ulimit -SHn 65535指令加入到/etc/rc.local,然後每次重新開機生效
<code>[root@c64 ~]</code><code># cat >>/etc/rc.local<<EOF</code>
<code>#open files</code>
<code>ulimit</code> <code>-HSn 65535</code>
<code>#stack size</code>
<code>ulimit</code> <code>-s 65535</code>
<code>EOF</code>
擴充:檔案描述符
檔案描述符在形式上是一個非負整數。實際上,它是一個索引值,指向核心為每一個程序所維護的該程序打開檔案的記錄表。當程式打開一個現有檔案或者建立一個新檔案時,核心向程序傳回一個檔案描述符。在程式設計中,一些涉及底層的程式編寫往往會圍繞着檔案描述符展開。但是檔案描述符這一概念往往隻适用于Unix、Linux這樣的作業系統。
習慣上,标準輸入(standard input)的檔案描述符是 0,标準輸出(standard output)是 1,标準錯誤(standard error)是 2。盡管這種習慣并非Unix核心的特性,但是因為一些 shell 和很多應用程式都使用這種習慣,是以,如果核心不遵循這種習慣的話,很多應用程式将不能使用。
11、調整字元集,使其支援中文
sed-i 's#LANG="en_US.UTF-8"#LANG="zh_CN.GB18030"#'/etc/sysconfig/i18n
source/etc/sysconfig/i18n
擴充:什麼是字元集?
簡單的說就是一套文字元号及其編碼。常用的字元集有:
GBK 定長雙位元組不是國際标準,支援系統不少
UTF-8 非定長 1-4位元組廣泛支援,MYSQL也使用UTF-8
12、去除系統及核心版本登入前的螢幕顯示
<code>[root@c64 ~]</code><code># >/etc/redhat-release</code>
<code>[root@c64 ~]</code><code># >/etc/issue</code>
13、核心參數優化
說明:本優化适合apache,nginx,squid多種等web應用,特殊的業務也可能需要略作調整
<code>[root@c64 ~]</code><code># vi /etc/sysctl.conf</code>
<code>#by sun in 20131001</code>
<code>net.ipv4.tcp_fin_timeout = 2</code>
<code>net.ipv4.tcp_tw_reuse = 1</code>
<code>net.ipv4.tcp_tw_recycle = 1</code>
<code>net.ipv4.tcp_syncookies = 1</code>
<code>net.ipv4.tcp_keepalive_time =600</code>
<code>net.ipv4.ip_local_port_range = 4000 65000</code>
<code>net.ipv4.tcp_max_syn_backlog = 16384</code>
<code>net.ipv4.tcp_max_tw_buckets = 36000</code>
<code>net.ipv4.route.gc_timeout = 100</code>
<code>net.ipv4.tcp_syn_retries = 1</code>
<code>net.ipv4.tcp_synack_retries = 1</code>
<code>net.core.somaxconn = 16384</code>
<code>net.core.netdev_max_backlog = 16384</code>
<code>net.ipv4.tcp_max_orphans = 16384</code>
<code>#一下參數是對iptables防火牆的優化,防火牆不開會有提示,可以忽略不理。</code>
<code>net.ipv4.ip_conntrack_max = 25000000</code>
<code>net.ipv4.netfilter.ip_conntrack_max = 25000000</code>
<code>net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180</code>
<code>net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120</code>
<code>net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60</code>
<code>net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120</code>
<code>[root@localhost ~]</code><code># sysctl –p #使配置檔案生效</code>
提示:由于CentOS6.X系統中的子產品名不是ip_conntrack,而是nf_conntrack,是以在/etc/sysctl.conf優化時,需要把net.ipv4.netfilter.ip_conntrack_max 這種老的參數,改成net.netfilter.nf_conntrack_max這樣才可以。
即對防火牆的優化,
在5.8上是
在6.4上是
<code>net.nf_conntrack_max = 25000000</code>
<code>net.netfilter.nf_conntrack_max = 25000000</code>
<code>net.netfilter.nf_conntrack_tcp_timeout_established = 180</code>
<code>net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120</code>
<code>net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60</code>
<code>net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120</code>
另外,在此優化過程中可能會有報錯:
1、5.8版本上
<code>error: </code><code>"net.ipv4.ip_conntrack_max"</code><code>is an unknown key</code>
<code>error: </code><code>"net.ipv4.netfilter.ip_conntrack_max"</code><code>is an unknown key</code>
<code>error: </code><code>"net.ipv4.netfilter.ip_conntrack_tcp_timeout_established"</code><code>is an unknown key</code>
<code>error: </code><code>"net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait"</code><code>is an unknown key</code>
<code>error: </code><code>"net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait"</code><code>is an unknown key</code>
<code>error: </code><code>"net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait"</code><code>is an unknown key</code>
這個錯誤可能是你的防火牆沒有開啟或者自動處理可載入的子產品ip_conntrack沒有自動載入,解決辦法有二,一是開啟防火牆,二是自動處理開載入的子產品ip_conntrack
<code>modprobe ip_conntrack</code>
<code>echo</code> <code>"modprobe ip_conntrack"</code><code>>> </code><code>/etc/rc</code><code>.</code><code>local</code>
2、6.4版本上
<code>error: </code><code>"net.nf_conntrack_max"</code><code>isan unknown key</code>
<code>error: </code><code>"net.netfilter.nf_conntrack_max"</code><code>isan unknown key</code>
<code>error: </code><code>"net.netfilter.nf_conntrack_tcp_timeout_established"</code><code>isan unknown key</code>
<code>error: </code><code>"net.netfilter.nf_conntrack_tcp_timeout_time_wait"</code><code>isan unknown key</code>
<code>error: </code><code>"net.netfilter.nf_conntrack_tcp_timeout_close_wait"</code><code>isan unknown key</code>
<code>error: </code><code>"net.netfilter.nf_conntrack_tcp_timeout_fin_wait"</code><code>isan unknown key</code>
這個錯誤可能是你的防火牆沒有開啟或者自動處理可載入的子產品ip_conntrack沒有自動載入,解決辦法有二,
①是開啟防火牆,
②是自動處理開載入的子產品ip_conntrack
<code>modprobe nf_conntrack</code>
<code>echo</code> <code>"modprobe nf_conntrack"</code><code>>> </code><code>/etc/rc</code><code>.</code><code>local</code>
3、6.4版本上
<code>error: </code><code>"net.bridge.bridge-nf-call-ip6tables"</code><code>isan unknown key</code>
<code>error: </code><code>"net.bridge.bridge-nf-call-iptables"</code><code>isan unknown key</code>
<code>error: </code><code>"net.bridge.bridge-nf-call-arptables"</code><code>isan unknown key</code>
這個錯誤是由于自動處理可載入的子產品bridge沒有自動載入,解決辦法是自動處理開載入的子產品ip_conntrack
<code>modprobe bridge</code>
<code>echo</code> <code>"modprobe bridge"</code><code>>> </code><code>/etc/rc</code><code>.</code><code>local</code>
到此,我們Linux系統安裝後的基礎優化已經操作的差不多了,總結下來一共有13個優化點需要我們來熟知。
本文轉自027ryan 51CTO部落格,原文連結http://blog.51cto.com/ucode/1775264:,如需轉載請自行聯系原作者