shell基礎優化腳本

  1 #!/bin/bash
  2 #########################################################
  3 #Created Time: Tue Aug  7 01:29:09 2018                 #
  4 #version:1.0    by:kingle    Mail: kingle122@vip.qq.com #
  5 #基於oldboy書籍優化編寫                                    #
  6 #實現功能:一鍵系統優化15項腳本,適用於Centos6.x               #
  7 #########################################################
  8 #Source function library.
  9 . /etc/init.d/functions
 10 #date
 11 DATE=`date +"%y-%m-%d %H:%M:%S"`
 12 #ip
 13 IPADDR=`grep "IPADDR" /etc/sysconfig/network-scripts/ifcfg-eth0|cut -d= -f 2 `
 14 #hostname
 15 HOSTNAME=`hostname -s`
 16 #user
 17 USER=`whoami`
 18 #disk_check
 19 DISK_SDA=`df -h |grep -w "/" |awk '{print $5}'`
 20 #cpu_average_check
 21 cpu_uptime=`cat /proc/loadavg|awk '{print $1,$2,$3}'`
 22 #set LANG
 23 export LANG=zh_CN.UTF-8
 24 #Require root to run this script.
 25 uid=`id | cut -d\( -f1 | cut -d= -f2`
 26 if [ $uid -ne 0 ];then
 27   action "Please run this script as root." /bin/false
 28   exit 1
 29 fi
 30 #"stty erase ^H"
 31 \cp /root/.bash_profile  /root/.bash_profile_$(date +%F)
 32 erase=`grep -wx "stty erase ^H" /root/.bash_profile |wc -l`
 33 if [ $erase -lt 1 ];then
 34     echo "stty erase ^H" >>/root/.bash_profile
 35     source /root/.bash_profile
 36 fi
 37 #Config Yum CentOS-Bases.repo and save Yum file
 38 configYum(){
 39 echo "================更新爲國內YUM源=================="
 40   cd /etc/yum.repos.d/
 41   \cp CentOS-Base.repo CentOS-Base.repo.$(date +%F)
 42   ping -c 1 mirrors.aliyun.com >/dev/null
 43   if [ $? -eq 0 ];then
 44   wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
 45   else
 46     echo "沒法鏈接網絡。"
 47     exit $?
 48   fi
 49 echo "==============保存YUM源文件======================"
 50 sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf     
 51 grep keepcache /etc/yum.conf
 52 sleep 5
 53 action "配置國內YUM完成"  /bin/true
 54 echo "================================================="
 55 echo ""
 56   sleep 2
 57 }
 58 #Charset zh_CN.UTF-8
 59 initI18n(){
 60 echo "================更改成中文字符集================="
 61   \cp /etc/sysconfig/i18n /etc/sysconfig/i18n.$(date +%F)
 62 >/etc/sysconfig/i18n
 63 cat >>/etc/sysconfig/i18n<<EOF
 64 LANG="zh_CN.UTF-8"
 65 #LANG="en_US.UTF-8"
 66 SYSFONT="latarcyrheb-sun16"
 67 EOF
 68   source /etc/sysconfig/i18n
 69   echo '#cat /etc/sysconfig/i18n'
 70   grep LANG /etc/sysconfig/i18n
 71 action "更改字符集zh_CN.UTF-8完成" /bin/true
 72 echo "================================================="
 73 echo ""
 74   sleep 2
 75 }
 76 #Close Selinux and Iptables
 77 initFirewall(){
 78 echo "============禁用SELINUX及關閉防火牆=============="
 79   \cp /etc/selinux/config /etc/selinux/config.$(date +%F)
 80   /etc/init.d/iptables stop
 81   sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
 82   setenforce 0
 83   /etc/init.d/iptables status
 84   echo '#grep SELINUX=disabled /etc/selinux/config ' 
 85   grep SELINUX=disabled /etc/selinux/config 
 86   echo '#getenforce '
 87   getenforce 
 88 action "禁用selinux及關閉防火牆完成" /bin/true
 89 echo "================================================="
 90 echo ""
 91   sleep 2
 92 }
 93 #Init Auto Startup Service
 94 initService(){
 95 echo "===============精簡開機自啓動===================="
 96   export LANG="en_US.UTF-8"
 97   for A in `chkconfig --list |grep 3:on |awk '{print $1}' `;do chkconfig $A off;done
 98   for B in rsyslog network sshd crond sysstat;do chkconfig $B on;done
 99   echo '+--------which services on---------+'
100   chkconfig --list |grep 3:on
101   echo '+----------------------------------+'
102   export LANG="zh_CN.UTF-8"
103 action "精簡開機自啓動完成" /bin/true
104 echo "================================================="
105 echo ""
106   sleep 2
107 }
108 #Removal system and kernel version login before the screen display
109 initRemoval(){
110 echo "======去除系統及內核版本登陸前的屏幕顯示======="
111 #must use root user run scripts
112 if    
113    [ $UID -ne 0 ];then
114    echo This script must use the root user ! ! ! 
115    sleep 2
116    exit 0
117 fi
118     >/etc/redhat-release
119     >/etc/issue
120 action "去除系統及內核版本登陸前的屏幕顯示" /bin/true
121 echo "================================================="
122 echo ""
123   sleep 2
124 }
125 #Change sshd default port and prohibit user root remote login.
126 initSsh(){
127 echo "========修改ssh默認端口禁用root遠程登陸=========="
128   \cp /etc/ssh/sshd_config /etc/ssh/sshd_config.$(date +%F)
129   sed -i 's/#Port 22/Port 52113/g' /etc/ssh/sshd_config
130   sed -i 's/#PermitEmptyPasswords no/PermitEmptyPasswords no/g' /etc/ssh/sshd_config
131   sed -i 's/#PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config
132   sed -i 's/#UseDNS yes/UseDNS no/g' /etc/ssh/sshd_config
133   echo '+-------modify the sshd_config-------+'
134   echo 'Port 52113'
135   echo 'PermitEmptyPasswords no'
136   echo 'PermitRootLogin no'
137   echo 'UseDNS no'
138   echo '+------------------------------------+'
139   /etc/init.d/sshd reload && action "修改ssh默認參數完成" /bin/true || action "修改ssh參數失敗" /bin/false
140 echo "================================================="
141 echo ""
142   sleep 2
143 }
144 #time sync
145 syncSysTime(){
146 echo "================配置時間同步====================="
147   \cp /var/spool/cron/root /var/spool/cron/root.$(date +%F) 2>/dev/null
148   NTPDATE=`grep ntpdate /var/spool/cron/root 2>/dev/null |wc -l`
149   if [ $NTPDATE -eq 0 ];then
150     echo "#times sync by lee at $(date +%F)" >>/var/spool/cron/root
151     echo "*/5 * * * * /usr/sbin/ntpdate time.windows.com &>/dev/null" >> /var/spool/cron/root
152   fi
153   echo '#crontab -l'  
154   crontab -l
155 action "配置時間同步完成" /bin/true
156 echo "================================================="
157 echo ""
158   sleep 2
159 }
160 #install tools
161 initTools(){
162     echo "#####安裝升級系統補裝工具及重要工具升級(選擇最小化安裝minimal)#####"
163     ping -c 2 mirrors.aliyun.com
164     sleep 2
165     yum install tree nmap sysstat lrzsz dos2unix -y
166     sleep 2
167     rpm -qa tree nmap sysstat lrzsz dos2unix
168     sleep 2
169     yum install openssl openssh bash -y
170     sleep 2
171 action "安裝升級系統補裝工具及重要工具升級(選擇最小化安裝minimal)" /bin/true
172 echo "================================================="
173 echo ""
174   sleep 2
175 }
176 #add user and give sudoers
177 addUser(){
178 echo "===================新建用戶======================"
179 #add user
180 while true
181 do  
182     read -p "請輸入新用戶名:" name
183     NAME=`awk -F':' '{print $1}' /etc/passwd|grep -wx $name 2>/dev/null|wc -l`
184     if [ ${#name} -eq 0 ];then
185        echo "用戶名不能爲空,請從新輸入。"
186        continue
187     elif [ $NAME -eq 1 ];then
188        echo "用戶名已存在,請從新輸入。"
189        continue
190     fi
191 useradd $name
192 break
193 done
194 #create password
195 while true
196 do
197     read -p "爲 $name 建立一個密碼:" pass1
198     if [ ${#pass1} -eq 0 ];then
199        echo "密碼不能爲空,請從新輸入。"
200        continue
201     fi
202     read -p "請再次輸入密碼:" pass2
203     if [ "$pass1" != "$pass2" ];then
204        echo "兩次密碼輸入不相同,請從新輸入。"
205        continue
206     fi
207 echo "$pass2" |passwd --stdin $name
208 break
209 done
210 sleep 1
211 #add visudo
212 echo "#####add visudo#####"
213 \cp /etc/sudoers /etc/sudoers.$(date +%F)
214 SUDO=`grep -w "$name" /etc/sudoers |wc -l`
215 if [ $SUDO -eq 0 ];then
216     echo "$name  ALL=(ALL)       NOPASSWD: ALL" >>/etc/sudoers
217     echo '#tail -1 /etc/sudoers'
218     grep -w "$name" /etc/sudoers
219     sleep 1
220 fi
221 action "建立用戶$name並將其加入visudo完成"  /bin/true
222 echo "================================================="
223 echo ""
224 sleep 2
225 }
226 #Adjust the file descriptor(limits.conf)
227 initLimits(){
228 echo "===============加大文件描述符===================="
229   LIMIT=`grep nofile /etc/security/limits.conf |grep -v "^#"|wc -l`
230   if [ $LIMIT -eq 0 ];then
231   \cp /etc/security/limits.conf /etc/security/limits.conf.$(date +%F)
232   echo '*                  -        nofile         65535'>>/etc/security/limits.conf
233   fi
234   echo '#tail -1 /etc/security/limits.conf'
235   tail -1 /etc/security/limits.conf
236   ulimit -HSn 65535
237   echo '#ulimit -n'
238   ulimit -n
239 action "配置文件描述符爲65535" /bin/true
240 echo "================================================="
241 echo ""
242 sleep 2
243 }
244 #set ssh
245 initSsh(){
246 echo "======禁用GSSAPI來認證,也禁用DNS反向解析,加快SSH登錄速度======="
247 sed -i 's/^GSSAPIAuthentication yes$/GSSAPIAuthentication no/' /etc/ssh/sshd_config
248 sed -i 's/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
249 service sshd restart
250 action "禁用GSSAPI來認證,也禁用DNS反向解析,加快SSH登錄速度" /bin/true
251 echo "================================================="
252 echo ""
253 sleep 2
254 }
255 #set the control-alt-delete to guard against the miSUSE
256 initRestart(){
257 sed -i 's#exec /sbin/shutdown -r now#\#exec /sbin/shutdown -r now#' /etc/init/control-alt-delete.conf
258 action "將ctrl alt delete鍵進行屏蔽,防止誤操做的時候服務器重啓" /bin/true
259 echo "================================================="
260 echo ""
261 sleep 2
262 }
263 #Optimizing the system kernel
264 initSysctl(){
265 echo "================優化內核參數====================="
266 SYSCTL=`grep "net.ipv4.tcp" /etc/sysctl.conf |wc -l`
267 if [ $SYSCTL -lt 10 ];then
268 \cp /etc/sysctl.conf /etc/sysctl.conf.$(date +%F)
269 cat >>/etc/sysctl.conf<<EOF
270 net.ipv4.tcp_fin_timeout = 2
271 net.ipv4.tcp_tw_reuse = 1
272 net.ipv4.tcp_tw_recycle = 1
273 net.ipv4.tcp_syncookies = 1
274 net.ipv4.tcp_keepalive_time = 600
275 net.ipv4.ip_local_port_range = 4000 65000
276 net.ipv4.tcp_max_syn_backlog = 16384
277 net.ipv4.tcp_max_tw_buckets = 36000
278 net.ipv4.route.gc_timeout = 100
279 net.ipv4.tcp_syn_retries = 1
280 net.ipv4.tcp_synack_retries = 1
281 net.core.somaxconn = 16384
282 net.core.netdev_max_backlog = 16384
283 net.ipv4.tcp_max_orphans = 16384
284 net.netfilter.nf_conntrack_max = 25000000
285 net.netfilter.nf_conntrack_tcp_timeout_established = 180
286 net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
287 net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
288 net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
289 EOF
290 fi
291   \cp /etc/rc.local /etc/rc.local.$(date +%F)  
292   modprobe nf_conntrack
293   echo "modprobe nf_conntrack">> /etc/rc.local
294   modprobe bridge
295   echo "modprobe bridge">> /etc/rc.local
296   sysctl -p  
297 action "內核調優完成" /bin/true
298 echo "================================================="
299 echo ""
300   sleep 2
301 }
302 #setting history and login timeout
303 initHistory(){
304 echo "======設置默認歷史記錄數和鏈接超時時間======"
305 echo "TMOUT=300" >>/etc/profile
306 echo "HISTSIZE=5" >>/etc/profile
307 echo "HISTFILESIZE=5" >>/etc/profile
308 tail -3 /etc/profile
309 source /etc/profile
310 action "設置默認歷史記錄數和鏈接超時時間" /bin/true
311 echo "================================================="
312 echo ""
313 sleep 2
314 }
315 #chattr file system
316 initChattr(){
317 echo "======鎖定關鍵文件系統======"
318 chattr +i /etc/passwd
319 chattr +i /etc/inittab
320 chattr +i /etc/group
321 chattr +i /etc/shadow
322 chattr +i /etc/gshadow
323 /bin/mv /usr/bin/chattr /usr/bin/lock
324 action "鎖定關鍵文件系統" /bin/true
325 echo "================================================="
326 echo ""
327 sleep 2
328 }
329 del_file(){
330 echo "======定時清理郵件任務======"
331 [ -f /server/scripts/ ] || mkdir -p /server/scripts/
332 echo "find /var/spool/postfix/maildrop/ -type f|xargs rm -f" >/server/scripts/del_file.sh
333 echo '#this is del mail task by kingle at 2018-8-8' >>/var/spool/cron/root
334 echo "*/1 * * * * /bin/bash /server/scripts/del_file.sh &>/dev/null" >>/var/spool/cron/root
335 echo "================================================="
336 echo ""
337 sleep 2
338 }
339 hide_info(){
340 echo "======!!隱藏系統信息!!======"    
341 echo "======此項注意不要本身忘記了那就沒救了======"
342 echo "======不建議使用======"
343 Version_information=`cat /etc/issue|grep "CentOS"`
344 >/etc/issue 
345 >/etc/issue.net
346 if [ `cat /etc/issue|grep cent|wc -l` -eq 0 -a `cat /etc/issue|grep cent|wc -l` -eq 0 ];then
347 echo "======清除成功====="
348 else
349 >/etc/issue 
350 >/etc/issue.net
351 fi
352 echo "$Version_information"
353 echo "=====認準本系統版本======"
354 sleep 10
355 echo "================================================="
356 }
357 grub_md5(){
358 echo "======grub_md5加密======"
359 echo "======命令行輸入:/sbin/grub-md5-crypt 進行交互式加密======"
360 echo "把密碼寫入/etc/grub.conf 格式:password --MD5 密碼"
361 echo ""
362 sleep 10
363 }
364 ban_ping(){
365     #內網能夠ping 其餘不能ping 這個因爲本身也要ping測試不必定要設置
366 echo '#內網能夠ping 其餘不能ping 這個因爲本身也要ping測試不必定要設置'
367 echo 'iptables -t filter -I INPUT -p icmp --icmp-type 8 -i eth0 -s 10.0.0.0/24 -j ACCEPT'
368 sleep 10
369 }
370 
371 #menu2
372 menu2(){
373 while true
374 do
375 clear
376 cat <<EOF
377 ----------------------------------------
378 |****Please Enter Your Choice:[0-15]****|
379 ----------------------------------------
380 (1)  新建一個用戶並將其加入visudo
381 (2)  配置爲國內YUM源鏡像和保存YUM源文件
382 (3)  配置中文字符集
383 (4)  禁用SELINUX及關閉防火牆
384 (5)  精簡開機自啓動
385 (6)  去除系統及內核版本登陸前的屏幕顯示
386 (7)  修改ssh默認端口及禁用root遠程登陸
387 (8)  設置時間同步
388 (9)  安裝系統補裝工具(選擇最小化安裝minimal)
389 (10) 加大文件描述符
390 (11) 禁用GSSAPI來認證,也禁用DNS反向解析,加快SSH登錄速度
391 (12) 將ctrl alt delete鍵進行屏蔽,防止誤操做的時候服務器重啓
392 (13) 系統內核調優
393 (14) 設置默認歷史記錄數和鏈接超時時間
394 (15) 鎖定關鍵文件系統
395 (16) 定時清理郵件任務
396 (17) 隱藏系統信息
397 (18) grub_md5加密
398 (19) ban_ping
399 (0) 返回上一級菜單
400 
401 EOF
402 read -p "Please enter your Choice[0-15]: " input2
403 case "$input2" in
404   0)
405   clear
406   break 
407   ;;
408   1)
409   addUser
410   ;;
411   2)
412   configYum
413   ;;
414   3)
415   initI18n
416   ;;
417   4)
418   initFirewall
419   ;;
420   5)
421   initService
422   ;;
423   6)
424   initRemoval
425   ;;
426   7)
427   initSsh
428   ;;
429   8)
430   syncSysTime
431   ;;
432   9)
433   initTools
434   ;;
435   10)
436   initLimits
437   ;;
438   11)
439   initSsh
440   ;;
441   12)
442   initRestart
443   ;;
444   13)
445   initSysctl
446   ;;
447   14)
448   initHistory
449   ;;
450   15)
451   initChattr
452   ;;
453   16)
454   del_file
455   ;;
456   17)
457   hide_info
458   ;;
459   18)
460   grub_md5
461   ;;
462   19)
463   ban_ping
464   ;;
465   *) echo "----------------------------------"
466      echo "|          Warning!!!            |"
467      echo "|   Please Enter Right Choice!   |"
468      echo "----------------------------------"
469      for i in `seq -w 3 -1 1`
470        do 
471          echo -ne "\b\b$i";
472   sleep 1;
473      done
474      clear
475 esac
476 done
477 }
478 #initTools
479 #menu
480 while true
481 do
482 clear
483 echo "========================================"
484 echo '          Linux Optimization            '   
485 echo "========================================"
486 cat << EOF
487 |-----------System Infomation-----------
488 | DATE       :$DATE
489 | HOSTNAME   :$HOSTNAME
490 | USER       :$USER
491 | IP         :$IPADDR
492 | DISK_USED  :$DISK_SDA
493 | CPU_AVERAGE:$cpu_uptime
494 ----------------------------------------
495 |****Please Enter Your Choice:[1-3]****|
496 ----------------------------------------
497 (1) 一鍵優化
498 (2) 自定義優化
499 (3) 退出
500 EOF
501 #choice
502 read -p "Please enter your choice[0-3]: " input1
503 case "$input1" in
504 1) 
505   addUser
506   configYum
507   initI18n
508   initFirewall
509   initService
510   initRemoval
511   initSsh
512   syncSysTime
513   initTools
514   initLimits
515   initSsh
516   initRestart
517   initSysctl
518   initHistory
519   initChattr
520   ;;
521 2)
522   menu2
523   ;;
524 3) 
525   clear 
526   break
527   ;;
528 *)   
529   echo "----------------------------------"
530   echo "|          Warning!!!            |"
531   echo "|   Please Enter Right Choice!   |"
532   echo "----------------------------------"
533   for i in `seq -w 3 -1 1`
534       do
535         echo -ne "\b\b$i";
536         sleep 1;
537   done
538   clear
539 esac  
540 done

--- 借鑑於各路大神---linux

----致謝----windows

相關文章
相關標籤/搜索