很不错的centos5优化脚本,
持续更新源:https://github.com/leopku/centostweak/raw/master/centostweak.sh

如果遇到bug问题可以联系作者leo:leo.ss.pku@gmail.co

leo的个人网站:mwww.himysql.com

 

  1. #!/bin/env bash 
  2.  
  3. ################################################################################# 
  4. # WARNING - Read First Before Running This Script! 
  5. # Running this script maybe HARMFUL to your system. Therefor, the user shall 
  6. # carefully read all of this script and bear the relevant risks by  
  7. # himself/herself. Running this script means the user accepting agreement above. 
  8. ################################################################################# 
  9.  
  10. ################################################################################ 
  11. #   Centos Tweak script for server 
  12. #   Licenced under GPLv3 
  13. #   Writen by: leo <leo.ss.pku@gmail.com> 
  14. #   Inspired by: yzhkpli@gmail.com 
  15. #   Feed back: http://www.himysql.com/groups/centos-tweak/ 
  16. ################################################################################ 
  17.  
  18. ################################################################################ 
  19. #   History: 
  20. #   2012-12-22: 
  21. #       + add bash-completion. 
  22. #       * Fixed a bug of adding noatime option for ext3. 
  23. #       * Fixed a bug of disable env reset in sudoer. 
  24. #       - remove sohu dag yum repository. 
  25. #   2011-7-11: 
  26. #       + Disable reseting enviroment varirables while sudo. 
  27. #   2010-10-28: 
  28. #       Fixed: 
  29. #           Disable CentALT yum repo by default. 
  30. #           Change running ntpdate from daily to weekly. 
  31. #           Change default VIM coloscheme from elflord to delek. 
  32. #           Fixed auto yes(-y) while install fail2ban by yum. 
  33. #       Add: 
  34. #           Add expandta & autoindent in /etc/vimrc. 
  35. #           Add auto start fail2ban after install fail2ban. 
  36. #   2010-09-26: 
  37. #       Fixed: 
  38. #           A bug while generating /etc/yum.repo.d/dag-sohu.repo. 
  39. #           Change this file to UTF8-NOBOM. 
  40. #       Add: 
  41. #           CentALT yum repository(/etc/yum.repo.d/centalt.repo) while the OS is RHEL/CentOS 5. 
  42. #   2010-09-11: 
  43. #       Add: 
  44. #           Install fail2ban to prevent password exhaustion attacking and set ban time as 12 hours.(default not effect. recommend uncomment if your server had public IP.) 
  45. #       Fixed: 
  46. #           Command not found bug when running by sudo. 
  47. #   2010-08-25: 
  48. #       Add: 
  49. #           Disable Ctrl+Alt+Del rebooting(thanks 181789871).(default not effect. uncommnet to take effect.) 
  50. #           Add README file. 
  51. #   2010-08-18: 
  52. #       Fixed: 
  53. #           A bug while exporting path into /etc/bashrc caused by "\"(thanks 181789871). 
  54. #   2010-08-16: 
  55. #       Add: 
  56. #           Close the tty between second and sixth(thanks selboo). 
  57. #           Increase default open file limits from 1024 to 65525. 
  58. #   2010-08-14: 
  59. #       Fixed: 
  60. #           Optimize code of disabling selinux(thanks huichrist) 
  61. #   2010-08-10: 
  62. #       Fixed: 
  63. #           Disable ius yum repository by default. 
  64. #   2010-08-09: 
  65. #       Add: 
  66. #           Tweak enviroment like PATH, LDFLAGS and LD_LIBRARY_PATH for easy using sudo. 
  67. #   2010-08-08: 
  68. #       Add: 
  69. #           Firstly check running this script as root. 
  70. #           Disable gpgcheck and plugins for running fastly. 
  71. #           Increase yum cache expire time from 1h to 24h. 
  72. #           Turn off auto running fsck while days duration. 
  73. #           Turn off writing file reading time (add noatime in /etc/fstab). 
  74. #       Fixed: 
  75. #           Change file name to centostweak.sh 
  76. #           Change /etc/cron.daily/ntpdate with run mode(+x). 
  77. #   2010-08-04: 
  78. #       Add: 
  79. #           Install sudo. Enable wheel group to use nopasswrd sudo. 
  80. #   2010-08-02: 
  81. #       Add: 
  82. #           Install & config snmpd. 
  83. #           Default iptables rules. 
  84. #       Fixed: 
  85. #           ntp package name from ntpdate. 
  86. #   2010-08-01: 
  87. #       To avoid backup file overried, Change backup file name ended from ".origin" to ".%Y-%m-%d_%H-%M-%S". 
  88. #   2010-07-31:  
  89. #       Modified to be used with CentOS 5.x Server and sohu mirrors. 
  90. #       Removed some unuseful functions. 
  91. #       Add functions for turnning unuseful service off while system start. 
  92. #       Add functions for kernel & TCP parameters optimizing. 
  93. #   2010-06-06: 
  94. #       Copied from http://laohuanggua.info/archives/695. 
  95. ################################################################################ 
  96.  
  97. export PATH=$PATH:/bin:/sbin:/usr/sbin 
  98. # Require root to run this script. 
  99. if [[ "$(whoami)" != "root" ]]; then 
  100.   echo "Please run this script as root." >&2 
  101.   exit 1 
  102. fi 
  103.  
  104. SERVICE=`which service` 
  105. CHKCONFIG=`which chkconfig` 
  106.  
  107. # 设置升级源 
  108. cd /etc/yum.repos.d/ 
  109. cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.`date +"%Y-%m-%d_%H-%M-%S"` 
  110. sed -i -e 's/mirrorlist/#mirrorlist/' CentOS-Base.repo 
  111. sed -i -e 's/#baseurl/baseurl/' CentOS-Base.repo 
  112. sed -i -e 's/mirror.centos.org/mirrors.sohu.com/' CentOS-Base.repo 
  113.  
  114. cp /etc/yum.conf /etc/yum.conf.`date +"%Y-%m-%d_%H-%M-%S"` 
  115. sed -i 's/gpgcheck=1/gpgcheck=0/' /etc/yum.conf 
  116. sed -i 's/plugins=1/plugins=0/' /etc/yum.conf 
  117. sed -i 's/metadata_expire=1h/metadata_expire=24h/' /etc/yum.conf 
  118.  
  119. # 添加dag@sohu源 
  120. ## relver=`uname -r | awk -F. '{print $NF}'` 
  121. ##echo -e "# Name: SOHU RPM Repository for Red Hat Enterprise – dag\n"\ 
  122. ##"# URL: http://mirrors.sohu.com/dag/redhat/\n"\ 
  123. ##"[dag-sohu]\n"\ 
  124. ##"name = Red Hat Enterprise \$releasever – sohu.com – dag\n"\ 
  125. ##"baseurl = http://mirrors.sohu.com/dag/redhat/`uname -r | awk -F. '{print substr($NF,1,3)}'`/en/\$basearch/dag\n"\ 
  126. ##"enabled = 1\n"\ 
  127. ##"gpgcheck = 0"  > /etc/yum.repos.d/dag-sohu.repo 
  128. # 添加epel@sohu源 
  129. echo -e "# Name: SOHU RPM Repository for Red Hat Enterprise – EPEL\n"\ 
  130. "# URL: http://mirrors.sohu.com/fedora-epel/\n"\ 
  131. "[epel-sohu]\n"\ 
  132. "name = Fedora EPEL \$releasever - sohu.com\n"\ 
  133. "baseurl = http://mirrors.sohu.com/fedora-epel/\$releasever/\$basearch\n"\ 
  134. "enabled = 1\n"\ 
  135. "gpgcheck = 0"  > /etc/yum.repos.d/epel-sohu.repo 
  136. # 添加CentALT源 
  137. # 使用方法:--enablerepo=centalt 
  138. if [[ `uname -r | awk -F. '{print substr($NF,1,3)}'` == "el5" ]]; then 
  139. echo -e "[CentALT]\n"\ 
  140. "name=CentALT Packages for Enterprise Linux 5 - \$basearch\n"\ 
  141. "baseurl=http://centos.alt.ru/repository/centos/5/\$basearch/\n"\ 
  142. "enabled=0\n"\ 
  143. "gpgcheck=0> /etc/yum.repos.d/centalt.repo 
  144. fi 
  145. # 添加ius源 
  146. # 使用方法:--enablerepo=ius,如yum install python26 --enablerepo=ius 
  147. echo -e "# Name: IUS RPM Repository for Red Hat Enterprise 5\n"\ 
  148. "# URL: http://dl.iuscommunity.org/pub/ius/stable/Redhat/\n"\ 
  149. "[ius]\n"\ 
  150. "name = Red Hat Enterprise \$releasever – ius\n"\ 
  151. "baseurl = http://dl.iuscommunity.org/pub/ius/stable/Redhat/\$releasever/\$basearch/\n"\ 
  152. "enabled = 0\n"\ 
  153. "gpgcheck = 0"  > /etc/yum.repos.d/ius.repo 
  154.  
  155. # 安装工具软件sysstat, ntp, snmpd, sudo 
  156. yum install sysstat ntp net-snmp sudo screen bash-completion -y 
  157.  
  158. # 配置sudo 
  159. cp /etc/sudoers /etc/sudoers.`date +"%Y-%m-%d_%H-%M-%S"` 
  160. # 允许wheel组的系统用户通过无密码sudo方式行使root权限 
  161. sed -i -e '/NOPASSWD/s/^# //' /etc/sudoers 
  162. sed -i -e '/Defaults    env_reset/s/env_reset/!env_reset/; /Defaults    requiretty/s/requiretty/!requiretty/' /etc/sudoers 
  163. # 添加环境变量,保证sudo时不用绝对路径执行常用管理命令以及编译软件时能找到库文件 
  164. echo 'export PATH=$PATH:/sbin:/usr/sbin' >> /etc/bashrc 
  165. echo 'export LDFLAGS="-L/usr/local/lib -Wl,-rpath,/usr/local/lib">> /etc/bashrc 
  166. echo 'export LD_LIBRARY_PATH="/usr/local/lib">> /etc/bashrc 
  167. echo 'source /etc/bash_completion' >> /etc/bashrc 
  168. # echo -ne $(echo export PRMPT_COMMAND='{ cmd=$(history 1 | { read x y; echo $y; }); echo -ne [ $(date "+%c") ]$LOGNAME :: $SUDO_USER :: $SSH_CLIENT :: $SSH_TTY :: $cmd "\n"; } >> $HOME/.bash_history.log'>> /etc/bashrc 
  169.  
  170. # 优化硬盘 
  171. cp /etc/fstab /etc/fstab.`date +"%Y-%m-%d_%H-%M-%S"` 
  172. # 关闭系统写入文件最后读取时间 
  173. sed -i 's/ext3    defaults[[:space:]]/ext3    defaults,noatime/' /etc/fstab 
  174. # 关闭系统按时间间隔决定下次重启时运行fsck 
  175. grep ext3 /etc/fstab | grep -v boot | awk '{print $1}' | xargs -i tune2fs -i0 {} 
  176. # 关闭系统按mount次数决定下次重启时运行fsck 
  177. # grep ext3 /etc/fstab | grep -v boot | awk '{print $1}' | xargs -i tune2fs -c-1 {} 
  178.  
  179. # 配置时间同步 
  180. echo "/usr/sbin/ntpdate cn.pool.ntp.org" >> /etc/cron.weekly/ntpdate 
  181. chmod +x /etc/cron.weekly/ntpdate 
  182.  
  183. # 配置snmpd 
  184. cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.`date +"%Y-%m-%d_%H-%M-%S"` 
  185. sed -i 's/#view all/view all/' /etc/snmp/snmpd.conf 
  186. sed -i 's/#access MyROGroup/access MyROGroup/' /etc/snmp/snmpd.conf 
  187. ${CHKCONFIG} snmpd on 
  188. ${SERVICE} snmpd start 
  189.  
  190. # 修改vim配置文件 
  191. mv /etc/vimrc /etc/vimrc.`date +"%Y-%m-%d_%H-%M-%S"` 
  192. cp /usr/share/vim/vim70/vimrc_example.vim /etc/vimrc 
  193. # 屏蔽终端下鼠标功能 
  194. sed -i -e 's/set mouse=a/" set mouse=a/' /etc/vimrc 
  195. # 配置tab建、elflord颜色方案等 
  196. echo "set history=1000>> /etc/vimrc 
  197. echo "set expandtab" >> /etc/vimrc 
  198. echo "set ai" >> /etc/vimrc 
  199. echo "set tabstop=4>> /etc/vimrc 
  200. echo "set shiftwidth=4>> /etc/vimrc 
  201. echo "set paste" >> /etc/vimrc 
  202. #echo "colo elflord" >> /etc/vimrc 
  203. echo "colo delek" >> /etc/vimrc 
  204.   
  205. # 安装完成后做一些基本的设置 
  206. # 关闭SELINUX 
  207. cp /etc/sysconfig/selinux /etc/sysconfig/selinux.`date +"%Y-%m-%d_%H-%M-%S"` 
  208. sed -i '/SELINUX/s/\(enforcing\|permissive\)/disabled/' /etc/sysconfig/selinux 
  209. # 修改主机名,修改俩文件/etc/sysconfig /network和/etc/hosts 
  210. #sed -i -e "/HOSTNAME/s/^/#/" /etc/sysconfig/network 
  211. #sed -i -e "$ a HOSTNAME=$HOSTNAME" /etc/sysconfig/network 
  212. #sed -i -e "/127.0.0.1/c 127.0.0.1    $HOSTNAME localhost.localdomain localhost" /etc/hosts 
  213.  
  214. # disable IPV6 
  215. cp /etc/modprobe.conf /etc/modprobe.conf.`date +"%Y-%m-%d_%H-%M-%S"` 
  216. echo "alias net-pf-10 off" >> /etc/modprobe.conf 
  217. echo "alias ipv6 off" >> /etc/modprobe.conf 
  218.   
  219. # 设置ssh 
  220. cp /etc/ssh/sshd_config /etc/ssh/sshd_config.`date +"%Y-%m-%d_%H-%M-%S"` 
  221. # 允许root远程登录 
  222. # sed -i 's/#PermitRootLogin/PermitRootLogin/' /etc/ssh/sshd_config 
  223. # 屏蔽掉GSSAPIAuthentication yes和GSSAPICleanupCredentials yes 
  224. sed -i -e '74 s/^/#/' -i -e '76 s/^/#/' /etc/ssh/sshd_config 
  225. # 取消使用DNS 
  226. sed -i "s/#UseDNS yes/UseDNS no/" /etc/ssh/sshd_config 
  227. # 44行是#PubkeyAuthentication yes。48行是#RhostsRSAAuthentication no 
  228. # sed -i -e '44 s/^/#/' -i -e '48 s/^/#/' /etc/ssh/sshd_config 
  229. /etc/init.d/sshd restart 
  230.   
  231. # 将错误按键的beep声关掉。stop the “beep" 
  232. # cp /etc/inputrc /etc/inputrc.origin 
  233. # sed -i '/#set bell-style none/s/#set bell-style none/set bell-style none/' /etc/inputrc 
  234.  
  235. # 关闭不必要的服务 
  236. SERVICES="acpid atd auditd avahi-daemon bluetooth cpuspeed cups firstboot hidd ip6tables isdn mcstrans messagebus pcscd rawdevices sendmail yum-updatesd" 
  237. for service in $SERVICES 
  238. do 
  239.     ${CHKCONFIG} $service off 
  240.     ${SERVICE} $service stop 
  241. done 
  242.  
  243. # 优化内核参数 
  244. mv /etc/sysctl.conf /etc/sysctl.conf.`date +"%Y-%m-%d_%H-%M-%S"` 
  245. echo -e "kernel.core_uses_pid = 1\n"\ 
  246. "kernel.msgmnb = 65536\n"\ 
  247. "kernel.msgmax = 65536\n"\ 
  248. "kernel.shmmax = 68719476736\n"\ 
  249. "kernel.shmall = 4294967296\n"\ 
  250. "kernel.sysrq = 0\n"\ 
  251. "net.core.netdev_max_backlog = 262144\n"\ 
  252. "net.core.rmem_default = 8388608\n"\ 
  253. "net.core.rmem_max = 16777216\n"\ 
  254. "net.core.somaxconn = 262144\n"\ 
  255. "net.core.wmem_default = 8388608\n"\ 
  256. "net.core.wmem_max = 16777216\n"\ 
  257. "net.ipv4.conf.default.rp_filter = 1\n"\ 
  258. "net.ipv4.conf.default.accept_source_route = 0\n"\ 
  259. "net.ipv4.ip_forward = 0\n"\ 
  260. "net.ipv4.ip_local_port_range = 5000 65000\n"\ 
  261. "net.ipv4.tcp_fin_timeout = 1\n"\ 
  262. "net.ipv4.tcp_keepalive_time = 30\n"\ 
  263. "net.ipv4.tcp_max_orphans = 3276800\n"\ 
  264. "net.ipv4.tcp_max_syn_backlog = 262144\n"\ 
  265. "net.ipv4.tcp_max_tw_buckets = 6000\n"\ 
  266. "net.ipv4.tcp_mem = 94500000 915000000 927000000\n"\ 
  267. "# net.ipv4.tcp_no_metrics_save=1\n"\ 
  268. "net.ipv4.tcp_rmem = 4096    87380   16777216\n"\ 
  269. "net.ipv4.tcp_sack = 1\n"\ 
  270. "net.ipv4.tcp_syn_retries = 1\n"\ 
  271. "net.ipv4.tcp_synack_retries = 1\n"\ 
  272. "net.ipv4.tcp_syncookies = 1\n"\ 
  273. "net.ipv4.tcp_timestamps = 0\n"\ 
  274. "net.ipv4.tcp_tw_recycle = 1\n"\ 
  275. "net.ipv4.tcp_tw_reuse = 1\n"\ 
  276. "net.ipv4.tcp_window_scaling = 1\n"\ 
  277. "net.ipv4.tcp_wmem = 4096    16384   16777216\n" > /etc/sysctl.conf 
  278. sysctl -p 
  279.  
  280. # 设置iptables 
  281. if [ -f /etc/sysconfig/iptables ]; then 
  282.     cp /etc/sysconfig/iptables /etc/sysconfig/iptables.`date +"%Y-%m-%d_%H-%M-%S"` 
  283. fi 
  284. echo -e "*filter\n"\ 
  285. ":INPUT DROP [0:0]\n"\ 
  286. "#:INPUT ACCEPT [0:0]\n"\ 
  287. ":FORWARD ACCEPT [0:0]\n"\ 
  288. ":OUTPUT ACCEPT [0:0]\n"\ 
  289. "-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT\n"\ 
  290. "-A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT\n"\ 
  291. "# setting trust ethernet.\n"\ 
  292. "-A INPUT -i eth0 -j ACCEPT\n"\ 
  293. "-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT\n"\ 
  294. "-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT\n"\ 
  295. "-A INPUT -d 127.0.0.1 -j ACCEPT\n"\ 
  296. "-A INPUT -j DROP\n"\ 
  297. "-A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m limit --limit 1/sec -j ACCEPT \n"\ 
  298. "-A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -m limit --limit 1/sec -j ACCEPT \n"\ 
  299. "#-A FORWARD -p icmp -m icmp --icmp-type 8 -m limit --limit 1/sec -j ACCEPT \n"\ 
  300. "COMMIT\n" > /etc/sysconfig/iptables 
  301. ${SERVICE} iptables restart 
  302.  
  303. # Linux 大多都是远程维护 pts连接的,可以关闭多余的 tty,保留一个用于物理登陆 
  304. cp /etc/inittab /etc/inittab.`date +"%Y-%m-%d_%H-%M-%S"` 
  305. sed -i '/tty[2-6]/s/^/#/' /etc/inittab 
  306.  
  307. # 增加文件描述符限制 
  308. cp /etc/security/limits.conf /etc/security/limits.conf.`date +"%Y-%m-%d_%H-%M-%S"` 
  309. sed -i '/# End of file/i\*\t\t-\tnofile\t\t65535' /etc/security/limits.conf 
  310.  
  311. # 使ctrl+alt+del关机键无效 
  312. # cp /etc/inittab /etc/inittab.`date +"%Y-%m-%d_%H-%M-%S"` 
  313. # sed -i "s/ca::ctrlaltdel:\/sbin\/shutdown -t3 -r now/#ca::ctrlaltdel:\/sbin\/shutdown -t3 -r now/" /etc/inittab 
  314. # /sbin/init q 
  315.  
  316. # 安装fail2ban防暴力工具遍历弱口令利器,有外网IP的推荐打开注释。 
  317. # yum install -y fail2ban 
  318. # cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.`date +"%Y-%m-%d_%H-%M-%S"` 
  319. # sed -i 's/bantime  = 600/bantime  = 43200/' /etc/fail2ban/jail.conf 
  320. # ${SERVICE} fail2ban start