通过脚本案例学习shell(四) --- 通过脚本初始化并加固新安装的Linux系统

 近来喜欢无人值守安装RHEL6.3系统,可是安装好每次都要做很多初始化工作,实在麻烦就写了个简单脚本省去了不少麻烦,由于本人是小牛,跟大牛比起来差的很远,还请大家提出一些宝贵意见!

本脚本是在rhel6.3环境下运行的,稍作修改同样适合其他Linux版本环境,不过脚本前半部分都是针对我自己的环境进行优化的,大家可以自行修改成自己的环境.

下面我对Linux系统初始化脚本进行简单讲解:

 
   
  1. #!/bin/bash 
  2. echo "New system configuration" 
  3. sleep 1 
  4. echo "Environment RHEL6.3"  
  5. sleep 1 
  6. echo "The kernel version configuration!" 
  7. sleep 1 
  8. echo "Designed by www.rsyslog.org http://dreamfire.blog.51cto.com" 
  9. sleep 1 
  10. input_fun() //定义一个可以重复输入的函数(空值回车情况下 也可用参考http://dreamfire.blog.51cto.com/418026/1152672)
  11.         OUTPUT_VAR=$1 
  12.         INPUT_VAR="" 
  13.                 while [ -z $INPUT_VAR ];do 
  14.                         read -p "$OUTPUT_VAR" INPUT_VAR 
  15.                 done 
  16.         echo $INPUT_VAR 
  17.  
  18. input_again() //定义网络参数函数,交互式读取输入.
  19. MYHOSTNAME=$( input_fun "Please input the hostname: ") 
  20. DOMAINNAME=$( input_fun "Please intput the domainname(rsyslog.org): ")  
  21. CARD_TYPE=$( input_fun "Please input card type(eth0): ")  
  22. IPADDR=$( input_fun "Please input ipaddress(192.168.100.1): ")  
  23. NETMASK=$( input_fun "Please input netmask(255.255.255.0): ")  
  24. GATEWAY=$( input_fun "Please input gateway(192.168.100.1): ")  
  25. MYDNS1=$( input_fun "Please input DNS1(192.168.100.102): ")  
  26. MYDNS2=$( input_fun "Please input DNS2(192.168.100.103): ")  
  27.  
  28. BEGIN_INIT=$( input_fun "Whether you initialize the Linux operating system(YES/NO): ") //如果你不需要运行此脚本,可以按n退出.
  29. if [ "$BEGIN_INIT" = "NO" ] || [ "$BEGIN_INIT" = "no" ] || [ "$BEGIN_INIT" = "N" ] ||[  "$BEGIN_INIT" = "n" ];then 
  30.     kill -9 $$ //$$为夫进程PID,也就是脚本PID
  31.     elif [ "$BEGIN_INIT"   = "YES" ] || [  "$BEGIN_INIT" = "yes" ] || [ "$BEGIN_INIT" = "y" ] || [ "$BEGIN_INIT" = "Y"  ];then 
  32.         echo "The script is begin....." 
  33.     else 
  34.     kill -9 $$ 
  35.     
  36. fi 
  37. input_again 
  38. BEGIN_INIT=$( input_fun "If you need input again[YES/NO]: ")  //为了防止出错再给你一次机会.
  39.     if [ "$BEGIN_INIT" = "YES" ] || [ "$BEGIN_INIT" = "YES" ] || [ "$BEGIN_INIT" = "Y" ] ||[  "$BEGIN_INIT" = "y" ];then 
  40.     input_again 
  41.     fi 
  42.      
  43. MAC=`ifconfig $CARD_TYPE | grep "HWaddr" | awk -F[" "]+ '{print $5}'` //取网卡MAC地址. 
  44. cat >/etc/sysconfig/network << ENDF  //配置network文件,激活网卡
  45. NETWORKING=yes 
  46. HOSTNAME=$MYHOSTNAME 
  47. ENDF 
  48. echo "Configure the HOSTNAME................................ OK !" 
  49. sleep 1 
  50. ########################## 
  51. cat >/etc/sysconfig/network-scripts/ifcfg-$CARD_TYPE <<endf  //配置网卡(静态环境下配置,动态获取不适合)
  52. DEVICE=$CARD_TYPE 
  53. BOOTPROTO=none 
  54. HWADDR=$MAC 
  55. NM_CONTROLLED=yes 
  56. ONBOOT=yes 
  57. TYPE=Ethernet 
  58. DNS2=$MYDNS2 
  59. DNS1=$MYDNS1 
  60. IPV6INIT=no 
  61. USERCTL=no 
  62. IPADDR=$IPADDR 
  63. NETMASK=$NETMASK 
  64. GATEWAY=$GATEWAY 
  65. endf 
  66. /etc/rc.d/init.d/network restart 
  67. chkconfig --level 35 network off 
  68. echo "Configure the $CARD_TYPE............................OK!" 
  69. sleep 1 
  70. ########################### 
  71. cat >/etc/hosts <<endf  //配置本地hosts文件
  72. 127.0.0.1 $MYHOSTNAME $MYHOSTNAME.$DOMAINNAME 
  73. $IPADDR $MYHOSTNAME $MYHOSTNAME.$DOMAINNAME 
  74. endf 
  75. echo "Configure the hosts.............................. OK !" 
  76. sleep 1 
  77. ############################### 
  78. cat >/etc/resolv.conf <<endf  //配置dns
  79. domain $DOMAINNAME 
  80. search $DOMAINNAME 
  81. nameserver $MYDNS1 
  82. nameserver $MYDNS2 
  83. endf 
  84. echo "Configure the resolv.conf......................OK!" 
  85. sleep 1 
  86. ############################### 
  87. mount | grep dev/sr0 >/dev/null  //挂载安装光盘到 /media/cdrom下为yum仓库做准备
  88. if [ $? -eq 0 ];then 
  89.         umount `mount | grep dev/sr0 | awk -F[" "] '{print $3}'` 
  90.         [ ! -d /media/cdrom ] && mkdir /media/cdrom 
  91.         mount /dev/sr0 /media/cdrom 
  92.     else 
  93.         mount | grep dev/sr0 
  94. fi 
  95. echo "mount the iso of system................OK!" 
  96. sleep 1 
  97. #################################
  98. cp -p /etc/yum.repos.d/rhel-source.repo{,.bak} //配置yum仓库 
  99. cat >/etc/yum.repos.d/rhel-source.repo <<endf 
  100. [rhel-source-beta] 
  101. name=RHEL6U3-ISO 
  102. baseurl=file:///media/cdrom 
  103. enabled=1 
  104. gpgcheck=0 
  105. endf 
  106. echo "Configure YUM.........................OK!"  
  107. #####################################
  108. yum clean all && yum makecache  //安装系统必须的一些测试工具,方便后期维护
  109. yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel zip unzip ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssh openssl-devel nss_ldap openldap openldap-devel openldap-clients openldap-servers libxslt-devel libevent-devel ntp  libtool-ltdl bison libtool vim-enhanced python wget lsof iptraf strace lrzsz kernel-devel kernel-headers pam-devel Tcl/Tk  cmake  ncurses-devel bison setuptool  
  110. echo "Install the system view command......................OK!" 
  111. ######################################### 
  112. sed -i 's/id:.*$/id:3:initdefault:/g' /etc/inittab  //设置系统从init 3级别启动
  113. echo "alias net-pf-10 off" >> /etc/modprobe.conf 
  114. echo "alias ipv6 off" >> /etc/modprobe.conf 
  115. /sbin/chkconfig --level 35 ip6tables off  //关闭ipv6,虽然ipv6是未来发展趋势,但是现在不用
  116. sed -i 's/SELINUX=enforcing/SELINUX=disabled' /etc/sysconfig/selinux  //关闭selinux,后期如果需要可以打开
  117. sed -i -e 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/' -e 's/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config  //加速ssh连接
  118. echo "Stop iptables ang set selinux=disable,If you need,please open them!,Optimization to speed up access to ssh,init 3" 
  119. #########################################//以下是锁定系统不需要登录的账号 
  120. passwd -l news 
  121. passwd -l nscd 
  122. passwd -l dbus 
  123. passwd -l vcsa 
  124. passwd -l games 
  125. passwd -l nobody 
  126. passwd -l avahi 
  127. passwd -l haldaemon 
  128. passwd -l gopher 
  129. passwd -l ftp 
  130. passwd -l mailnull 
  131. passwd -l pcap 
  132. passwd -l mail 
  133. passwd -l shutdown 
  134. passwd -l halt 
  135. passwd -l uucp 
  136. passwd -l operator 
  137. passwd -l sync 
  138. passwd -l adm 
  139. passwd -l lp 
  140. echo "Lock useless users.......................OK" 
  141. sleep 1 
  142. ############################ 
  143. echo "TMOUT=1800>>/etc/profile  //设置30分钟无活动自动退出,可自行设置
  144. echo "* soft nofile 66666" >> /etc/security/limits.conf  //修改系统打开的最大文件数
  145. echo "* hard nofile 66666" >> /etc/security/limits.conf 
  146. echo "30 minutes of inactivity, automatic exit && To modify the system to open the maximum number of files.....OK" 
  147. sleep 1 
  148. ############################### 
  149. cat >> /etc/sysctl.conf << endf  //优化内核参数调整
  150. #michaelkang add 120724 
  151. net.ipv4.tcp_abort_on_overflow = 1 
  152. net.ipv4.tcp_syncookies = 1 
  153. net.ipv4.tcp_tw_reuse = 1 
  154. net.ipv4.tcp_tw_recycle = 1 
  155. net.ipv4.tcp_fin_timeout = 20 
  156. net.ipv4.tcp_retries1 = 2 
  157. net.ipv4.tcp_retries2 = 5 
  158. net.ipv4.tcp_max_orphans = 2000 
  159. net.ipv4.tcp_keepalive_time = 1200 
  160. net.ipv4.tcp_keepalive_intvl = 15 
  161. net.ipv4.tcp_keepalive_probes = 5 
  162. net.ipv4.tcp_syn_retries = 2 
  163. net.ipv4.tcp_synack_retries = 3 
  164. net.ipv4.tcp_max_syn_backlog = 8192 
  165. net.ipv4.tcp_max_tw_buckets = 5000 
  166. endf 
  167. sysctl -p 
  168. echo "Adjust the kernel parameters!......................OK!" 
  169. sleep 1 
  170. ############################################# 
  171. for I in `ls /etc/rc3.d/S*` //关闭系统不需要的服务,其中S打头的都是正在运行的服务,K打头的是没有运行的服务.
  172. do 
  173.         STOP_SRV=`echo $I|cut -c 15-` //过滤服务名称,从15个字符往后.
  174.         echo $STOP_SRV 
  175.         case $STOP_SRV in 
  176.                 local | cpuspeed | crond | irqbalance | microcode_ctl | xinetd | network | mon | partmon | messagebus| udev-post | sshd | rsyslog | syslog ) 
  177.                 echo "Base services, Skip!" 
  178.                 ;; 
  179.                 *) 
  180.                 echo "change $STOP_SRV to off" 
  181.                 chkconfig --level 235 $STOP_SRV off 
  182.                 service $STOP_SRV stop 
  183.                 ;; 
  184.         esac 
  185. done 
  186. echo "Close useless services.........................ok" 
  187. sleep 1 
  188. ############################################## //系统一些安全密码文件加锁,不允许修改创建
  189. chattr +i /etc/passwd  
  190. chattr +i /etc/shadow  
  191. chattr +i /etc/group  
  192. chattr +i /etc/gshadow  
  193. chattr +a /root/.bash_history  //root执行命令数据只运行添加
  194. sed -i "s/HISTSIZE=1000/HISTSIZE=10/" /etc/profile //设置使用history命令只能查看10条命令
  195. echo "The passwd shadow group gshadow is locked,if you use them,please use chattr -i!..............ok" 
  196. sleep 1 
  197. ############################################## 
  198. cat >> /etc/hosts.allow << ENDF  //设置运行远程使用ssh登录的网段
  199. sshd:192.168.100.0/255.255.255.0 
  200. ENDF 
  201. echo 'sshd:all' >>/etc/hosts.deny 
  202. echo "Allowd 192.168.100.0 to use ssh................ok " 
  203. ############################################ //设置默认创建用户密码最大存活天数以及密码长度
  204. sed -i -e "s/PASS_MAX_DAYS.*$/PASS_MAX_DAYS  90/" -e "s/PASS_MIN_LEN.*$/PASS_MIN_LEN 8/"  /etc/login.defs  
  205. echo "###################The script is stop!!####################" 

 

本文转自凌激冰51CTO博客,原文链接:http://blog.51cto.com/dreamfire/1155542,如需转载请自行联系原作者

你可能感兴趣的:(通过脚本案例学习shell(四) --- 通过脚本初始化并加固新安装的Linux系统)