在运维工作中,我们发现Linux系统安装之后并不能立即投入生产环境使用,往往需要先经过我们运维人员的优化才行

优化条目:

  1. 修改ip地址、网关、主机名、DNS等

  2. 关闭selinux,清空iptables

  3. 添加普通用户并进行sudo授权管理

  4. 更新yum源及必要软件安装

  5. 定时自动更新服务器时间

  6. 精简开机自启动服务

  7. 定时自动清理/var/spool/clientmqueue/目录垃圾文件,放置inode节点被占满

  8. 变更默认的ssh服务端口,禁止root用户远程连接

  9. 锁定关键文件系统

  10. 调整文件描述符大小

  11. 调整字符集,使其支持中文

  12. 去除系统及内核版本登录前的屏幕显示

  13. 内核参数优化

1、修改ip地址、网关、主机名、DNS等

  1. root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

  2. DEVICE=eth0 #网卡名字

  3. BOOTPROTO=static #静态IP地址获取状态 如:DHCP表示自动获取IP地址

  4. IPADDR=192.168.1.113 #IP地址

  5. NETMASK=255.255.255.0 #子网掩码

  6. ONBOOT=yes #引导时是否激活

  7. GATEWAY=192.168.1.1

  8. [root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0

  9. DEVICE=eth0

  10. BOOTPROTO=static

  11. IPADDR=192.168.1.113

  12. NETMASK=255.255.255.0

  13. ONBOOT=yes

  14. GATEWAY=192.168.1.1

  15. [root@localhost ~]# vi /etc/sysconfig/network

  16. HOSTNAME=c64 #修改主机名,重启生效

  17. GATEWAY=192.168.1.1 #修改默认网关,如果上面eth0里面不配置网关的话,默认就使用这里的网关了。

  18. [root@localhost ~]# cat /etc/sysconfig/network

  19. HOSTNAME=c64

  20. GATEWAY=192.168.1.1

  21. 我们也可以用 hostname c64 来临时修改主机名,重新登录生效

  22. 修改DNS

  23. [root@localhost ~]# vi /etc/resolv.conf #修改DNS信息

  24. nameserver 114.114.114.114

  25. nameserver 8.8.8.8

  26. [root@localhost ~]# cat /etc/resolv.conf #查看修改后的DNS信息

  27. nameserver 114.114.114.114

  28. nameserver 8.8.8.8

  29. [root@localhost ~]# service network restart #重启网卡,生效

  30. 重启网卡,也可以用下面的命令

  31. [root@localhost ~]# /etc/init.d/network restartysconfig/network-scripts/ifcfg-eth0

2.关闭selinux,清空iptables


  1. 关闭selinux

  2. [root@c64 ~]# sed –i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config #修改配置文件则永久生效,但是必须要重启系统。

  3. [root@c64 ~]# grep SELINUX=disabled /etc/selinux/config

  4. SELINUX=disabled #查看更改后的结果

  5. [root@c64 ~]# setenforce 0 #临时生效命令

  6. [root@c64 ~]# getenforce #查看selinux当前状态

  7. Permissive

  8. 清空iptables

  9. [root@c64 ~]# iptables –F #清理防火墙规则

  10. [root@c64 ~]# iptables –L #查看防火墙规则

  11. Chain INPUT (policy ACCEPT)

  12. target prot opt source destination

  13. Chain FORWARD (policy ACCEPT)

  14. target prot opt source destination

  15. Chain OUTPUT (policy ACCEPT)

  16. target prot opt source destination

  17. [root@c64 ~]#/etc/init.d/iptables save #保存防火墙配置信息

3.添加普通用户并进行sudo授权管理

[root@c64 ~]# visudo

在root    ALL=(ALL)    ALL此行下,添加如下内容

sunsky    ALL=(ALL)    ALL


4、更新yum源及必要软件安装

yum安装软件,默认获取rpm包的途径从国外官方源,改成国内的源。

国内较快的两个站点:搜狐镜像站点、网易镜像站点

接下来执行如下命令,检测yum是否正常

    1.[root@c64 yum.repos.d]# yum clean all #清空yum缓存

  2.[root@c64 yum.repos.d]# yum makecache #建立yum缓存m repolist

然后使用如下命令将系统更新到最新

1

2

[root@c64 yum.repos.d]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*       #导入签名KEY到RPM

[root@c64 yum.repos.d]# yum  upgrade-y     #更新系统内核到最新


接下来就要安装几个必要的软件了


1

[root@c64 yum.repos.d]# yum install lrzsz ntpdate sysstat -y


lrzsz是一个上传下载的软件

sysstat是用来检测系统性能及效率的工具


5、定时自动更新服务器时间

  1. [root@c64 ~]# echo '*/5 * * * * /usr/sbin/ntpdate time.windows.com >/dev/null 2 >&1' >>/var/spool/cron/root

  2. [root@c64 ~]# echo '*/10 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1' >>/var/spool/cron/root



提示:CentOS 6.4的时间同步命令路径不一样

6是/usr/sbin/ntpdate

5是/sbin/ntpdate

扩展:在机器数量少时,以上定时任务同步时间就可以了。如果机器数量大时,可以在网内另外部署一台时间同步服务器NTP Server。此处仅提及,不做部署。

6、精简开机自启动服务

刚装完操作系统可以只保留crond,network,syslog,sshd这四个服务。(Centos6.4为rsyslog)

for sun in `chkconfig --list|grep 3:on|awk '{print $1}'`;do chkconfig --level 3 $sun off;done

for sun in crond rsyslog sshd network;do chkconfig --level 3$sun on;done

chkconfig --list|grep 3:on

7、定时自动清理/Var/Spool/Clientmqueue/目录垃圾文件,放置Inode节点被占满

  1. [root@c64 ~]# mkdir /server/scripts -p

  2. [root@c64 ~]# vi /server/scripts/spool_clean.sh

  3. #!/bin/sh

  4. find /var/spool/clientmqueue/ -type f -mtime +30|xargs rm -f

然后将其加入到crontab定时任务中


  1. [root@c64 ~]# echo '*/30 * * * * /bin/sh /server/scripts/spool_clean.sh >/dev/null 2>&1' >>/var/spool/cron/root

8、变更默认的Ssh服务端口,禁止Root用户远程连接

  1. [root@c64 ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

  2. [root@c64 ~]# vim /etc/ssh/sshd_config

  3. Port 52113 #ssh连接默认的端口

  4. PermitRootLogin no #root用户黑客都知道,禁止它远程登录

  5. PermitEmptyPasswords no #禁止空密码登录

  6. UseDNS no #不使用DNS

  7. [root@c64 ~]# /etc/init.d/sshd reload #从新加载配置

  8. [root@c64 ~]# netstat -lnt #查看端口信息

  9. [root@c64 ~]# lsof -i tcp:52113 //lsof(list open files)是一个列出当前系统打开文件的工具


9、锁定关键文件系统


  1. [root@c64 ~]# chattr +i /etc/passwd

  2. [root@c64 ~]# chattr +i /etc/inittab

  3. [root@c64 ~]# chattr +i /etc/group

  4. [root@c64 ~]# chattr +i /etc/shadow

  5. [root@c64 ~]# chattr +i /etc/gshadow

使用chattr命令后,为了安全我们需要将其改名


  1. [root@c64 ~]# /bin/mv /usr/bin/chattr /usr/bin/任意名称

10、调整文件描述符大小

[root@localhost ~]# [root@localhost ~]# ulimit –n #查看文件描述符大小
1024
[root@localhost ~]# echo '* - nofile 65535' >> /etc/security/limits.conf

配置完成后,重新登录即可查看。
提示:也可以把ulimit -SHn 65535命令加入到/etc/rc.local,然后每次重启生效

[root@c64 ~]# cat >>/etc/rc.local<

扩展:文件描述符

文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于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、去除系统及内核版本登录前的屏幕显示

[root@c64 ~]# >/etc/redhat-release[root@c64 ~]# >/etc/issue

13、内核参数优化

说明:本优化适合apache,nginx,squid多种等web应用,特殊的业务也可能需要略作调整。


  1. [root@c64 ~]# vi /etc/sysctl.conf

  2. #by sun in 20131001

  3. net.ipv4.tcp_fin_timeout = 2

  4. net.ipv4.tcp_tw_reuse = 1

  5. net.ipv4.tcp_tw_recycle = 1

  6. net.ipv4.tcp_syncookies = 1

  7. net.ipv4.tcp_keepalive_time =600

  8. net.ipv4.ip_local_port_range = 4000 65000

  9. net.ipv4.tcp_max_syn_backlog = 16384

  10. net.ipv4.tcp_max_tw_buckets = 36000

  11. net.ipv4.route.gc_timeout = 100

  12. net.ipv4.tcp_syn_retries = 1

  13. net.ipv4.tcp_synack_retries = 1

  14. net.core.somaxconn = 16384

  15. net.core.netdev_max_backlog = 16384

  16. net.ipv4.tcp_max_orphans = 16384

  17. #一下参数是对iptables防火墙的优化,防火墙不开会有提示,可以忽略不理。

  18. net.ipv4.ip_conntrack_max = 25000000

  19. net.ipv4.netfilter.ip_conntrack_max = 25000000

  20. net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180

  21. net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120

  22. net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60

  23. net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120

  24. [root@localhost ~]# sysctl –p #使配置文件生效

提示:由于CentOS6.X系统中的模块名不是ip_conntrack,而是nf_conntrack,所以在/etc/sysctl.conf优化时,需要把net.ipv4.netfilter.ip_conntrack_max 这种老的参数,改成net.netfilter.nf_conntrack_max这样才可以。
即对防火墙的优化,


在5.8上是

  1. net.ipv4.ip_conntrack_max = 25000000

  2. net.ipv4.netfilter.ip_conntrack_max = 25000000

  3. net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180

  4. net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120

  5. net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60

  6. net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120

在6.4上是

net.nf_conntrack_max = 25000000

  1. net.netfilter.nf_conntrack_max = 25000000

  2. net.netfilter.nf_conntrack_tcp_timeout_established = 180

  3. net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120

  4. net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60

  5. net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120


另外,在此优化过程中可能会有报错:

1、5.8版本上

  1. error: "net.ipv4.ip_conntrack_max" is an unknown key

  2. error: "net.ipv4.netfilter.ip_conntrack_max" is an unknown key

  3. error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_established" is an unknown key

  4. error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait" is an unknown key

  5. error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait" is an unknown key

  6. error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait" is an unknown key

这个错误可能是你的防火墙没有开启或者自动处理可载入的模块ip_conntrack没有自动载入,解决办法有二,一是开启防火墙,二是自动处理开载入的模块ip_conntrack

  1. modprobe ip_conntrack

  2. echo "modprobe ip_conntrack" >> /etc/rc.local

2、6.4版本上

  1. error: "net.nf_conntrack_max" is an unknown key

  2. error: "net.netfilter.nf_conntrack_max" is an unknown key

  3. error: "net.netfilter.nf_conntrack_tcp_timeout_established" is an unknown key

  4. error: "net.netfilter.nf_conntrack_tcp_timeout_time_wait" is an unknown key

  5. error: "net.netfilter.nf_conntrack_tcp_timeout_close_wait" is an unknown key

  6. error: "net.netfilter.nf_conntrack_tcp_timeout_fin_wait" is an unknown key

这个错误可能是你的防火墙没有开启或者自动处理可载入的模块ip_conntrack没有自动载入,解决办法有二,一是开启防火墙,二是自动处理开载入的模块ip_conntrack

  1. modprobe nf_conntrack

  2. echo "modprobe nf_conntrack" >> /etc/rc.local

3、6.4版本上

  1. error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key

  2. error: "net.bridge.bridge-nf-call-iptables" is an unknown key

  3. error: "net.bridge.bridge-nf-call-arptables" is an unknown key

这个错误是由于自动处理可载入的模块bridge没有自动载入,解决办法是自动处理开载入的模块ip_conntrack

  1. modprobe bridge

  2. echo "modprobe bridge" >> /etc/rc.local


本文转载来自http://www.tiejiang.org/6076.html