1. #!/usr/bin/env bash
  2. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
  3. export PATH
  4. clear
  5.  
  6. echo "#========================================================="
  7. echo "# System Required: CentOS 6/7+ Debian 6/7+ Ubuntu 14.04+"
  8. echo "# Description: Linux系统初始化脚本"
  9. echo "# Version: 3.6.0"
  10. echo "# Author:Chuyio"
  11. echo "# Date:18/06/2017"
  12. echo "# Blog:https://www.cnblogs.com/chuyiwang"
  13. echo "# Github:https://github.com/Chuyio"
  14. echo "#========================================================="
  15.  
  16. CENTOS_VERSION=`cat /etc/redhat-release | awk -F'release' '{print $2}' | awk -F'[ .]+' '{print $2}'`
  17. STDOUT=`>/dev/null 2>&1`
  18. GREEN_FONT_PREFIX="\033[46;34m" && PURPLE_FONT_PREFIX="\033[35m" && RED_FONT_PREFIX="\033[41;33;5m" && GREEN_BACKGROUND_PREFIX="\033[42;37m" && FONT_COLOR_SUFFIX="\033[0m"
  19. INFO="${GREEN_FONT_PREFIX}[信息]${FONT_COLOR_SUFFIX}"
  20. ERROR="${RED_FONT_PREFIX}[错误]${FONT_COLOR_SUFFIX}"
  21. TIP="${PURPLE_FONT_PREFIX}[注意]${FONT_COLOR_SUFFIX}"
  22.  
  23. VERSION_ERROR() {
  24. echo -e "
  25. ${RED_FONT_PREFIX}
  26. 本脚本仅支持 CentOS6+/7+ 版本系统 暂时不支持本系统版本
  27. System Version Error,Scripts only apply to Centos 6 and 7 versions
  28. ${FONT_COLOR_SUFFIX}"
  29. exit 110
  30. }
  31.  
  32. JDT(){
  33. echo "准备中..."
  34. i=0
  35. str=""
  36. arr=("|" "/" "-" "\\")
  37. while [ $i -le 20 ]
  38. do
  39. let index=i%4
  40. let indexcolor=i%8
  41. let color=30+indexcolor
  42. let NUmbER=$i*5
  43. printf "\e[0;$color;1m[%-20s][%d%%]%c\r" "$str" "$NUmbER" "${arr[$index]}"
  44. sleep 0.1
  45. let i++
  46. str+='+'
  47. done
  48. printf "\n"
  49. echo "正在执行...稍候!"
  50. }
  51.  
  52. #CHECK_RESULT() {
  53. #if [ ! $? -eq 0 ]; then
  54. # echo -e "${ERROR} ERROR,Please To Check "
  55. # exit 110
  56. #fi
  57. #}
  58.  
  59. # 检查系统是否符合&是否已经初始化过该机器
  60.  
  61. CHECK_ROOT() {
  62. [[ $EUID != 0 ]] && echo -e "${ERROR} 当前账号非ROOT(或没有ROOT权限),无法继续操作,请使用${GREEN_BACKGROUND_PREFIX} sudo su ${FONT_COLOR_SUFFIX}来获取临时ROOT权限(执行后会提示输入当前账号的密码)。" && exit 1
  63. }
  64.  
  65. CHECK_SYS() {
  66. if [[ -f /etc/redhat-release ]]; then
  67. release="centos"
  68. elif cat /etc/issue | grep -q -E -i "debian"; then
  69. release="debian"
  70. elif cat /etc/issue | grep -q -E -i "ubuntu"; then
  71. release="ubuntu"
  72. elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat"; then
  73. release="centos"
  74. elif cat /proc/version | grep -q -E -i "debian"; then
  75. release="debian"
  76. elif cat /proc/version | grep -q -E -i "ubuntu"; then
  77. release="ubuntu"
  78. elif cat /proc/version | grep -q -E -i "centos|red hat|redhat"; then
  79. release="centos"
  80. fi
  81. bit=$(uname -m)
  82. }
  83. CHECK_SYS
  84. #[[ ${release} != "debian" ]] && [[ ${release} != "ubuntu" ]] && [[ ${release} != "centos" ]] && echo -e "${ERROR} 本脚本不支持当前系统 ${release} !" && exit 1
  85. [[ ${release} != "centos" ]] && echo -e "${ERROR} 本脚本暂时不支持当前系统 ${release} ! 当前仅支持CentOS6/7+ 感谢理解" && exit 110
  86.  
  87. CHECK_RESULT() {
  88. if [ ! $? -eq 0 ]; then
  89. echo -e "${ERROR} ERROR,Please To Check !!!"
  90. exit 110
  91. fi
  92. }
  93.  
  94. NETWORK() {
  95. CHECK_ROOT
  96. NETPATH="/etc/sysconfig/network-scripts/"
  97. NETCNF=`ls ${NETPATH} | grep if | head -1`
  98. NETNAME=`ip a | grep -E '^2:' | awk -F'[: ]+' '{print $2}'`
  99. CHECK_CNF=`echo ${NETCNF} | awk -F'-' '{print $2}'`
  100. if [[ ! ${CHECK_CNF} == ${NETNAME} ]]; then
  101. NET_CHECK=`echo ${NETCNF} | awk -F'-' '{print $1}'`
  102. NETCNF=`echo ${NET_CHECK}-${NETNAME}`
  103. fi
  104. cp $NETPATH$NETCNF /tmp/$NETCNF-$(date +%m%d%H%M)
  105. echo "###########################################"
  106. echo && stty erase '^H' && read -p "Please Input IPAddress :" IPA
  107. echo && stty erase '^H' && read -p "Please Input Netmask :" NTM
  108. echo && stty erase '^H' && read -p "Please Input Gateway :" GTW
  109. echo && stty erase '^H' && read -p "Please Input DNS (Default[223.5.5.5]):" DNS
  110. if [[ $DNS == "" ]]; then
  111. DNS="223.5.5.5"
  112. fi
  113. echo -e "${PURPLE_FONT_PREFIX} 配置中请稍候... 完成后请使用新地址 $IPA 进行SSH登陆 ${FONT_COLOR_SUFFIX}"
  114. NET_RULES="/etc/udev/rules.d/70-persistent-net.rules"
  115. if [ -f $NET_RULES ]
  116. then
  117. mv -bf $NET_RULES /tmp $STDOUT
  118. fi
  119. case $CENTOS_VERSION in
  120. 6)
  121. C6NETWORK
  122. ;;
  123. 7)
  124. C7NETWORK
  125. ;;
  126. *)
  127. VERSION_ERROR
  128. ;;
  129. esac
  130. }
  131.  
  132. HINT() {
  133. echo -e "
  134. ${PURPLE_FONT_PREFIX}
  135. [ ## Network configuration succeeded ## ]
  136. [ ##### Please restart the server ##### ]
  137. [ CentOS 6+: server restart network ]
  138. [ CentOS 7+: systemctl restart network.service ]${FONT_COLOR_SUFFIX}"
  139. }
  140.  
  141. C6NETWORK() {
  142. cat > $NETPATH$NETCNF << END
  143. DEVICE=$NETNAME
  144. TYPE=Ethernet
  145. ONBOOT=yes
  146. NM_CONTROLLED=yes
  147. BOOTPROTO=static
  148. IPADDR=$IPA
  149. NETMASK=$NTM
  150. GATEWAY=$GTW
  151. DNS=$DNS
  152. END
  153. if [ -e NetworkManager ]; then
  154. service NetworkManager stop $STDOUT
  155. chkconfig NetworkManager off $STDOUT
  156. fi
  157. chkconfig network on $STDOUT
  158. JDT
  159. HINT
  160. }
  161.  
  162. C7NETWORK() {
  163. cat > $NETPATH$NETCNF << EOF
  164. TYPE=Ethernet
  165. PROXY_METHOD=none
  166. BROWSER_ONLY=no
  167. BOOTPROTO=static
  168. DEFROUTE=yes
  169. IPV4_FAILURE_FATAL=no
  170. NAME=$NETNAME
  171. DEVICE=$NETNAME
  172. ONBOOT=yes
  173. IPADDR=$IPA
  174. NETMASK=$NTM
  175. GATEWAY=$GTW
  176. DNS=$DNS
  177. EOF
  178. if [ -e "/usr/lib/systemd/system/NetworkManager.service" ]; then
  179. systemctl stop NetworkManager $STDOUT
  180. systemctl disable NetworkManager $STDOUT
  181. fi
  182. systemctl enable network.service $STDOUT
  183. JDT
  184. HINT
  185. }
  186.  
  187. HISTORY() {
  188. #history modify
  189. FILE_PATH="/var/log/Command"
  190. FILE_NAME="Command.log"
  191. PROFILE_PATH="/etc/profile"
  192. PROFILE=`cat ${PROFILE_PATH} | grep HISTORY_FILE | wc -l`
  193. COMMAND=`cat /var/spool/cron/root | grep history.sh | wc -l`
  194. CROND='/var/spool/cron/root'
  195.  
  196. CLUSTER1() {
  197. touch $FILE_PATH/$FILE_NAME
  198. chown -R nobody:nobody $FILE_PATH
  199. chmod 001 $FILE_PATH
  200. chmod 002 $FILE_PATH/$FILE_NAME
  201. chattr +a $FILE_PATH/$FILE_NAME
  202. }
  203. CLUSTER2() {
  204. cat >> ${PROFILE_PATH} << EPP
  205. export HISTORY_FILE=$FILE_PATH/$FILE_NAME
  206. export PROMPT_COMMAND='{ date "+%y-%m-%d %T ## \$(who am i |awk "{print \\\$1,\\\$2,\\\$5}") ## \$(whoami) ## \$(history 1 | { read x cmd; echo "\$cmd"; })"; } >>\$HISTORY_FILE'
  207. EPP
  208. }
  209.  
  210. if [ ! -d $FILE_PATH ]
  211. then
  212. mkdir -p $FILE_PATH
  213. CLUSTER1
  214. else
  215. if [ ! -f $FILE_PATH/$FILE_NAME ]
  216. then
  217. CLUSTER1
  218. fi
  219. fi
  220. if [ $PROFILE -lt 1 ]
  221. then
  222. CLUSTER2
  223. else
  224. sed -i '/.*HISTORY_FILE.*/d' ${PROFILE_PATH}
  225. CLUSTER2
  226. fi
  227. if [ ! -f $FILE_PATH/history.sh ]
  228. then
  229. cat >> $FILE_PATH/history.sh << EOF
  230. #!/bin/bash
  231.  
  232. #Time=\`date +%Y%m%d%H -d '-1 hours'\`
  233. Time=\`date +%Y%m%d%H\`
  234. logs_path="$FILE_PATH/"
  235. logs_name="$FILE_NAME"
  236. new_file="\$logs_path\$logs_name-\$Time"
  237. old_file=\`find \$logs_path -mtime +30 -type f -name "Command.*"\`
  238. chattr -a \$logs_path\$logs_name
  239. mv \$logs_path\$logs_name \$new_file
  240. chattr +a \$new_file
  241. touch \$logs_path\$logs_name
  242. chown -R nobody:nobody \$logs_path\$logs_name
  243. chmod -R 002 \$logs_path\$logs_name
  244. chattr +a \$logs_path\$logs_name
  245. if [[ ! -z \$old_file ]]
  246. then
  247. echo "delet \$old_file \$Time" >> /var/log/messages
  248. chattr -a \$old_file
  249. rm -rf \$old_file
  250. fi
  251. EOF
  252. chmod 100 $FILE_PATH/history.sh
  253. fi
  254. if [ $COMMAND -lt 1 ]
  255. then
  256. echo "30 10 * * 6 /bin/bash $FILE_PATH/history.sh $STDOUT" >> $CROND
  257. else
  258. sed -i '/.*history\.sh.*/d' $CROND
  259. echo "30 10 * * 6 /bin/bash $FILE_PATH/history.sh $STDOUT" >> $CROND
  260. fi
  261. case $CENTOS_VERSION in
  262. 6)
  263. service crond restart $STDOUT
  264. ;;
  265. 7)
  266. systemctl restart crond $STDOUT
  267. ;;
  268. *)
  269. VERSION_ERROR
  270. ;;
  271. esac
  272. source ${PROFILE_PATH}
  273. if [ $? -eq 0 ]
  274. then
  275. JDT
  276. echo "###########################################"
  277. echo -e "${TIP} 配置完成 命令审计文件位于:/var/log/Command/Command.log "
  278. else
  279. echo -e "${ERROR},Please To Check "
  280. exit 110
  281. fi
  282. }
  283.  
  284. YUMREPO() {
  285. YUM='/etc/yum.repos.d'
  286. if [ ! -d $YUM/oldbackup ]
  287. then
  288. mkdir -p $YUM/oldbackup
  289. fi
  290. REPO=`ls $YUM | grep -E "*.repo$"`
  291. if [[ ! $REPO == "" ]]; then
  292. for repo in REPO; do
  293. mv -bf $YUM/$repo $YUM/oldbackup $STDOUT
  294. done
  295. fi
  296. /bin/ping -c 3 -i 0.1 -w 1 baidu.com $STDOUT
  297. CHECK_RESULT
  298.  
  299. echo -e "${INFO} 网络正常"
  300.  
  301. echo "正在执行中ing...请确保网络连接正常..."
  302. wget -P $YUM http://mirrors.aliyun.com/repo/Centos-$CENTOS_VERSION.repo $STDOUT
  303. if [ ! $? -eq 0 ]
  304. then
  305. echo "wget 命令执行失败 正在尝试使用curl命令..."
  306. curl -Os http://mirrors.aliyun.com/repo/Centos-$CENTOS_VERSION.repo
  307. CHECK_RESULT
  308. mv Centos-$CENTOS_VERSION.repo $YUM
  309. fi
  310. rpm -e $(rpm -qa | grep epel-release) $STDOUT
  311. rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-$CENTOS_VERSION.noarch.rpm $STDOUT
  312. CHECK_RESULT
  313. echo "重新构建YUM仓库中稍候...如果网络不佳会造成失败"
  314. yum clean all && yum makecache
  315. CHECK_RESULT
  316. }
  317.  
  318. MYSQL_REPO() {
  319. REPO_PATH="/etc/yum.repos.d/mysql-community.repo"
  320. MYSQL_INSTALL() {
  321. yum -y install mysql-community-server
  322. CHECK_RESULT
  323. }
  324. /bin/ping -c 3 -i 0.1 -w 1 baidu.com $STDOUT
  325. CHECK_RESULT
  326. echo -e "${INFO} 网络正常"
  327. echo "正在执行中ing...请确保网络连接正常..."
  328. rpm -e $(rpm -qa | grep -E "mysql.*release") $STDOUT
  329. echo -e "
  330. ${PURPLE_FONT_PREFIX}
  331. #################### 本脚本不支持一个系统安装多个数据库 ########################
  332. 也不建议使用其他方法安装多个数据库
  333. 如果有多个数据库的需求,可以使用多实例来实现
  334. 正在检查是否已安装过MySQL,如已安装MySQL将尝试自动卸载...
  335. ######### 注意 如果不想卸载当前数据库 请在进度条处按Ctrl+C结束脚本运行 #########${FONT_COLOR_SUFFIX}"
  336. sleep 10
  337. JDT
  338. for PACKAGE in $(rpm -qa | grep -i mysql)
  339. do
  340. rpm -e $PACKAGE
  341. if [ $? -eq 0 ]; then
  342. echo -e "${TIP} $PACKAGE 已成功卸载..."
  343. else
  344. yum remove $PACKAGE
  345. if [ ! $? -eq 0 ]; then
  346. #yum remove $(rpm -qa | grep -i mysql)
  347. echo -e "${ERROR} $PACKAGE 自动卸载失败,请手动卸载!!!"
  348. fi
  349. fi
  350. done
  351. rpm -Uvh https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-connectors-community-el$CENTOS_VERSION/mysql-community-release-el$CENTOS_VERSION-5.noarch.rpm
  352. CHECK_RESULT
  353. yum repolist enabled | grep "mysql.*-community.*"
  354. sed -i '/^#/d' $REPO_PATH
  355. echo -e "${TIP}以下为目前仅支持安装的MySQL版本"
  356. MYSQL_VER=`cat ${REPO_PATH} | grep -E "^\[mysql5.*" | awk -F'[[-]' '{print $2}'`
  357. sed -i '/.*mysql56.*/,/.*mysql57.*/s/enabled=1/enabled=0/' ${REPO_PATH}
  358. echo -e "${PURPLE_FONT_PREFIX}
  359. ${MYSQL_VER}${FONT_COLOR_SUFFIX}"
  360. echo && stty erase '^H' && read -p "请输入你要安装的MySQL版本 (55/56/57) :" NMB
  361. case $NMB in
  362. 55)
  363. sed -i '/.*mysql55.*/,/.*mysql56.*/s/enabled=0/enabled=1/' ${REPO_PATH}
  364. MYSQL_INSTALL
  365. ;;
  366. 56)
  367. sed -i '/.*mysql56.*/,/.*mysql57.*/s/enabled=0/enabled=1/' ${REPO_PATH}
  368. MYSQL_INSTALL
  369. ;;
  370. 57)
  371. echo "# INSTALL_SCRIPT #" >> ${REPO_PATH}
  372. sed -i '/.*mysql57.*/,/.*INSTALL_SCRIPT.*/s/enabled=0/enabled=1/' ${REPO_PATH}
  373. MYSQL_INSTALL
  374. ;;
  375. *)
  376. echo -e "${ERROR} 输入信息有误,请输入正确的数字!!!"
  377. ;;
  378. esac
  379. }
  380.  
  381. ##########################################################################
  382. # 以下为系统优化项
  383. ##########################################################################
  384.  
  385. ######################## 配置SSH服务优化 ########################
  386.  
  387. MUTUAL() {
  388. echo && stty erase '^H' && read -p "Whether or not to perform? (y/n):" NMB
  389. if [[ $NMB == y ]] || [[ $NMB == "" ]]; then
  390. echo -e "${PURPLE_FONT_PREFIX}正在执行此项优化...${FONT_COLOR_SUFFIX}"
  391. JDT
  392. else
  393. echo -e "${PURPLE_FONT_PREFIX}即将跳过此项优化...${FONT_COLOR_SUFFIX}"
  394. JDT
  395. return 100
  396. fi
  397. }
  398.  
  399. OPTSSH() {
  400. clear
  401. echo -e "
  402. ${GREEN_FONT_PREFIX}
  403. #########################################################
  404. [ 配置SSH端口 关闭DNS反向解析 ]
  405. ${FONT_COLOR_SUFFIX}"
  406. MUTUAL
  407. if [ ! $? -eq 0 ]; then
  408. return 100
  409. fi
  410. SSHD_CONF_PATH="/etc/ssh/sshd_config"
  411. echo && stty erase '^H' && read -p "Please enter the SSH port :" PT
  412. if [[ $PT =~ ^[1-65534]$ ]]; then
  413. echo -e "${ERROR} 输入端口有误,请输入[1-65534]之间的数字"
  414. exit 110
  415. fi
  416. sed -i 's/^GSSAPIAuthentication yes$/GSSAPIAuthentication no/' ${SSHD_CONF_PATH}
  417. sed -i 's/#UseDNS yes/UseDNS no/' ${SSHD_CONF_PATH}
  418. sed -i "s/#Port 22/Port $PT/" ${SSHD_CONF_PATH}
  419. sed -i "s/^Port.*/Port $PT/g" ${SSHD_CONF_PATH}
  420. sed -i 's/#PrintMotd yes/PrintMotd yes/' ${SSHD_CONF_PATH}
  421. case $CENTOS_VERSION in
  422. 6)
  423. service sshd restart $STDOUT
  424. ;;
  425. 7)
  426. systemctl restart sshd $STDOUT
  427. ;;
  428. *)
  429. VERSION_ERROR
  430. ;;
  431. esac
  432. }
  433.  
  434. ######################## 关闭IPv6服务 ########################
  435.  
  436. OFFIPV6() {
  437. clear
  438. echo -e "
  439. ${GREEN_FONT_PREFIX}
  440. ##########################################
  441. [ 关闭IPv6服务 ]
  442. ${FONT_COLOR_SUFFIX}"
  443. MUTUAL
  444. if [ ! $? -eq 0 ]; then
  445. return 100
  446. fi
  447. MODPROBE_CONF_PATH="/etc/modprobe.conf"
  448. sed -i '/.*net-pf-10.*/d' ${MODPROBE_CONF_PATH}
  449. sed -i '/.*ipv6.*/d' ${MODPROBE_CONF_PATH}
  450. echo "alias net-pf-10 off" >> ${MODPROBE_CONF_PATH}
  451. echo "alias ipv6 off" >> ${MODPROBE_CONF_PATH}
  452. }
  453.  
  454. ######################## 关闭selinux ########################
  455.  
  456. OFFSELINUX() {
  457. clear
  458. echo -e "
  459. ${GREEN_FONT_PREFIX}
  460. #########################################
  461. [ 关闭selinux ]
  462. ${FONT_COLOR_SUFFIX}"
  463. MUTUAL
  464. if [ ! $? -eq 0 ]; then
  465. return 100
  466. fi
  467. SELINUX_CONF_PATH="/etc/selinux/config"
  468. sed -i '/SELINUX/s/enforcing/disabled/' ${SELINUX_CONF_PATH}
  469. setenforce 0 $STDOUT
  470. }
  471.  
  472. ######################## 关闭防火墙 ########################
  473.  
  474. OFFFIREWALL() {
  475. clear
  476. echo -e "
  477. ${GREEN_FONT_PREFIX}
  478. ########################################
  479. [ 关闭防火墙 ]
  480. ${FONT_COLOR_SUFFIX}"
  481. MUTUAL
  482. if [ ! $? -eq 0 ]; then
  483. return 100
  484. fi
  485. case $CENTOS_VERSION in
  486. 6)
  487. service iptables stop $STDOUT
  488. chkconfig iptables off $STDOUT
  489. ;;
  490. 7)
  491. systemctl stop firewalld $STDOUT
  492. systemctl disable firewalld $STDOUT
  493. ;;
  494. *)
  495. VERSION_ERROR
  496. ;;
  497. esac
  498. }
  499.  
  500. ######################## 设置时间同步 ########################
  501.  
  502. TIMELOCK() {
  503. clear
  504. echo -e "
  505. ${GREEN_FONT_PREFIX}
  506. ##########################################
  507. [ 设置时间同步 ]
  508. ${FONT_COLOR_SUFFIX}"
  509. MUTUAL
  510. if [ ! $? -eq 0 ]; then
  511. return 100
  512. fi
  513. CROND_PATH="/var/spool/cron/root"
  514. sed -i '/.*ntpdate.*/d' ${CROND_PATH}
  515. echo "*/5 * * * * /usr/sbin/ntpdate 203.107.6.88 $STDOUT" >> ${CROND_PATH}
  516. ntpdate 203.107.6.88
  517. CHECK_RESULT
  518. case $CENTOS_VERSION in
  519. 6)
  520. service crond restart $STDOUT
  521. ;;
  522. 7)
  523. systemctl restart crond $STDOUT
  524. ;;
  525. *)
  526. VERSION_ERROR
  527. ;;
  528. esac
  529. }
  530.  
  531. ######################## 配置用户最大文件打开数 ########################
  532.  
  533. LIMITSCONF() {
  534. clear
  535. echo -e "
  536. ${GREEN_FONT_PREFIX}
  537. ####################################################
  538. [ 配置用户最大文件打开数 ]
  539. ${FONT_COLOR_SUFFIX}"
  540. MUTUAL
  541. if [ ! $? -eq 0 ]; then
  542. return 100
  543. fi
  544. CONF_PATH="/etc/security/limits.conf"
  545. CHECK_OLD=`tail -4 ${CONF_PATH} | grep -E 'nofile|nproc' | wc -l`
  546. if [[ ! $CHECK_OLD -eq 4 ]]; then
  547. cat >> ${CONF_PATH} << COMMENTBLOCK
  548. * soft nofile 102400
  549. * hard nofile 102400
  550. * soft nproc 102400
  551. * hard nproc 102400
  552. COMMENTBLOCK
  553. CHECK_RESULT
  554. fi
  555. }
  556.  
  557. ######################## 配置用户最大进程数 ########################
  558.  
  559. NPROCCONF() {
  560. clear
  561. echo -e "
  562. ${GREEN_FONT_PREFIX}
  563. ################################################
  564. [ 配置用户最大进程数 ]
  565. ${FONT_COLOR_SUFFIX}"
  566. MUTUAL
  567. if [ ! $? -eq 0 ]; then
  568. return 100
  569. fi
  570. NPROC_CONF_PATH="/etc/security/limits.d"
  571. SYSTEM_CONF_PATH="/etc/systemd/system.conf"
  572. case $CENTOS_VERSION in
  573. 6)
  574. sed -i 's/1024$/102400/' ${NPROC_CONF_PATH}/90-nproc.conf
  575. ;;
  576. 7)
  577. sed -i 's/4096$/20480/' ${NPROC_CONF_PATH}/20-nproc.conf
  578. sed -i 's/^#DefaultLimitNOFILE=.*/DefaultLimitNOFILE=100000/g' ${SYSTEM_CONF_PATH}
  579. sed -i 's/^#DefaultLimitNPROC=.*/DefaultLimitNPROC=100000/g' ${SYSTEM_CONF_PATH}
  580. ;;
  581. *)
  582. VERSION_ERROR
  583. ;;
  584. esac
  585. }
  586.  
  587. ######################## 优化系统内核参数项 ########################
  588.  
  589. SYSCTLCONF() {
  590. clear
  591. echo -e "
  592. ${GREEN_FONT_PREFIX}
  593. ################################################
  594. [ 优化系统内核参数项 ]
  595. ${FONT_COLOR_SUFFIX}"
  596. MUTUAL
  597. if [ ! $? -eq 0 ]; then
  598. return 100
  599. fi
  600. SYSCTL_CONF_PATH="/etc/sysctl.conf"
  601. true > ${SYSCTL_CONF_PATH}
  602. cat >> ${SYSCTL_CONF_PATH} << EIZ
  603. net.ipv4.ip_forward = 0
  604. #该文件内容为0 表示禁止数据包转发 1表示允许
  605. net.ipv4.conf.default.rp_filter = 0
  606. #是否忽略arp请求
  607. net.ipv4.conf.default.accept_source_route = 0
  608. #是否接受源路由(source route)
  609. kernel.sysrq = 0
  610. #是否开启sysrq,0为disable sysrq, 1为enable sysrq completely
  611. kernel.core_uses_pid = 1
  612. #如果这个文件的内容被配置成1,那么即使core_pattern中没有设置%p,最后生成的core dump文件名仍会加上进程ID
  613. kernel.unknown_nmi_panic = 0
  614. #该参数的值影响的行为(非屏蔽中断处理).当这个值为非0,未知的NMI受阻,PANIC出现.这时,内核调试信息显示控制台,则可以减轻系统中的程序挂起.
  615. kernel.msgmnb = 65536
  616. #指定内核中每个消息队列的最大字节限制
  617. kernel.msgmax = 65536
  618. #指定内核中单个消息的最大长度(bytes).进程间的消息传递是在内核的内存中进行的,不会交换到磁盘上,所以如果增大该值,则将增大操作系统所使用的内存数量
  619. kernel.shmmax = 68719476736
  620. #指定共享内存片段的最大尺寸(bytes)
  621. kernel.shmall = 4294967296
  622. #指定可分配的共享内存数量
  623. vm.swappiness = 10
  624. #内存不足时=0,进行少量交换 而不禁用交换=1,系统内存足够时=10 提高性能,默认值=60,值=100将积极使用交换空间
  625.  
  626. net.ipv4.tcp_tw_reuse = 1
  627. #开启重用,允许Time-WAIT sockets重新用于新的TCP连接
  628. net.ipv4.tcp_syncookies = 1
  629. #开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies来处理
  630. net.ipv4.tcp_fin_timeout = 30
  631. #如果套接字有本端要求关闭,这个参数决定了保持在FIN-WAIT-2状态的时间,对端可以出错并永远关闭连接,甚至以外宕机,缺省值是60秒,2.2内核的通常值是180秒,你可以按这个设置,但要记住的是,即时你的机器是一个轻载的WEB服务器,也有因为大量的死套接字而内存溢出的风险,FIN-WAIT-2的危险性比FIN-WAIT-1要小,因为它最多只能吃掉1.5K内存,但是他们生存期长些
  632. net.ipv4.tcp_syn_retries = 3
  633. #在内核放弃建立连接之前发送SYN包的数量可以设置为1
  634. net.ipv4.tcp_synack_retries = 3
  635. #为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK,也就是所谓的三次握手中的第二次握手,这个设置决定了内核放弃连接之前发送SYN+ACK包的数量可以设置为1
  636. net.ipv4.tcp_max_orphans = 262144
  637. #系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上,如果超过这个数字,孤儿连接将即刻被复位并打印出警告信息,这个限制仅仅是为了防止简单的Dos攻击,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)
  638. net.ipv4.tcp_keepalive_time = 60
  639. #当keepzlived起作用的时候,TCP发送keepzlived消息的频度,缺省是两小时,可以设置为30
  640. net.ipv4.tcp_max_tw_buckets = 180000
  641. #time_wait的数量,默认是180000
  642. net.ipv4.conf.all.send_redirects = 0
  643. #禁止转发重定向报文
  644. net.ipv4.conf.default.send_redirects = 0
  645. #不充当路由器
  646. net.ipv4.conf.all.secure_redirects = 0
  647. #如果服务器不作为网关/路由器,该值建议设置为0
  648. net.ipv4.conf.default.secure_redirects = 0
  649. #禁止转发安全ICMP重定向报文
  650. net.ipv4.conf.all.accept_redirects = 0
  651. #禁止包含源路由的ip包
  652. net.ipv4.conf.default.accept_redirects = 0
  653. #禁止包含源路由的ip包
  654.  
  655. ##### iptables ##############
  656. net.ipv4.neigh.default.gc_thresh1 = 2048
  657. #存在于ARP高速缓存中的最少层数,如果少于这个数,垃圾收集器将不会运行.缺省值是128。
  658. net.ipv4.neigh.default.gc_thresh2 = 4096
  659. #保存在 ARP 高速缓存中的最多的记录软限制.垃圾收集器在开始收集前,允许记录数超过这个数字 5 秒.缺省值是 512
  660. net.ipv4.neigh.default.gc_thresh3 = 8192
  661. #保存在 ARP 高速缓存中的最多记录的硬限制,一旦高速缓存中的数目高于此,垃圾收集器将马上运行.缺省值是1024
  662. net.ipv4.ip_local_port_range = 1024 65535
  663. #用于定义网络连接可用作其源(本地)端口的最小和最大端口的限制,同时适用于TCP和UDP连接.
  664. net.ipv6.conf.all.disable_ipv6 = 1
  665. #禁用整个系统所有接口的IPv6
  666. fs.file-max = 1000000
  667. #系统最大打开文件描述符数
  668. fs.inotify.max_user_watches = 10000000
  669. #表示同一用户同时可以添加的watch数目(watch一般是针对目录,决定了同时同一用户可以监控的目录数量)
  670. net.core.rmem_max = 16777216
  671. #接收套接字缓冲区大小的最大值(以字节为单位)
  672. net.core.wmem_max = 16777216
  673. #发送套接字缓冲区大小的最大值(以字节为单位)
  674. net.core.wmem_default = 262144
  675. #发送套接字缓冲区大小的默认值(以字节为单位)
  676. net.core.rmem_default = 262144
  677. #接收套接字缓冲区大小的默认值(以字节为单位)
  678. net.core.somaxconn = 65535
  679. #用来限制监听(LISTEN)队列最大数据包的数量,超过这个数量就会导致链接超时或者触发重传机制
  680. net.core.netdev_max_backlog = 262144
  681. #当网卡接收数据包的速度大于内核处理的速度时,会有一个队列保存这些数据包.这个参数表示该队列的最大值
  682. net.ipv4.tcp_max_syn_backlog = 8120
  683. #表示系统同时保持TIME_WAIT套接字的最大数量.如果超过此数,TIME_WAIT套接字会被立刻清除并且打印警告信息.之所以要设定这个限制,纯粹为了抵御那些简单的DoS攻击,不过,过多的TIME_WAIT套接字也会消耗服务器资源,甚至死机
  684. net.netfilter.nf_conntrack_max = 1000000
  685. #CONNTRACK_MAX 允许的最大跟踪连接条目,是在内核内存中netfilter可以同时处理的"任务"(连接跟踪条目)
  686.  
  687. EIZ
  688. /sbin/sysctl -p
  689. echo -e "
  690. ${PURPLE_FONT_PREFIX}
  691. 内核参数已优化完毕,请按需自行修改/etc/sysctl.conf配置文件${FONT_COLOR_SUFFIX}"
  692. }
  693.  
  694. ###################################################################################
  695. ###################################################################################
  696.  
  697. echo -e " CentOS 初始化一键配置脚本 ${PURPLE_FONT_PREFIX}Powered By Chuyio${FONT_COLOR_SUFFIX}
  698.  
  699. ${GREEN_FONT_PREFIX}1.${FONT_COLOR_SUFFIX} 配置网络
  700. ${GREEN_FONT_PREFIX}2.${FONT_COLOR_SUFFIX} 配置审计
  701. ${GREEN_FONT_PREFIX}3.${FONT_COLOR_SUFFIX} 优化系统
  702. ${GREEN_FONT_PREFIX}4.${FONT_COLOR_SUFFIX} 配置YUM仓库
  703. ${GREEN_FONT_PREFIX}5.${FONT_COLOR_SUFFIX} 安装MySQL数据库
  704. "
  705. echo && stty erase '^H' && read -p "Please Input Number (1/2/3/4/5) :" NMB
  706. case "$NMB" in
  707. 1)
  708. NETWORK
  709. ;;
  710. 2)
  711. HISTORY
  712. ;;
  713. 3)
  714. OPTSSH
  715. OFFIPV6
  716. OFFSELINUX
  717. OFFFIREWALL
  718. TIMELOCK
  719. LIMITSCONF
  720. NPROCCONF
  721. SYSCTLCONF
  722. ;;
  723. 4)
  724. YUMREPO
  725. ;;
  726. 5)
  727. MYSQL_REPO
  728. ;;
  729. *)
  730. echo -e "${ERROR} 请输入正确的数字 [1-4]"
  731. ;;
  732. esac

CentOS系统优化一键配置脚本的更多相关文章

  1. Centos 环境一键部署脚本(shell脚本)

    谨以此文纪念吊炸天的Centos环境一键部署方案的新鲜出炉 辛苦大半年,产品准备上线了,BOSS亲自体验安装部署,看着超过200+页的安装文档直接崩溃了(需要部署23个基础服务),经历了超过3个小时的 ...

  2. CentOS 6一键系统优化 Shell 脚本

    CentOS 6一键系统优化 Shell 脚本 脚本的内容如下: #!/bin/bash#author suzezhi#this script is only for CentOS 6#check t ...

  3. 一键系统优化15项脚本,适用于Centos6.x

    #!/bin/sh ################################################ #Author:nulige # qqinfo:1034611705 # Date ...

  4. CentOS 升级 Python3 (附带: 一键升级脚本)

      升级环境   应用名称 版本 Python 3.5.2 Syatem CentOS 6.7         升级方法   [1]下载 Python 3: wget http://mirrors.s ...

  5. CentOS 6、7下pptp vpn一键安装脚本

    之前有折腾过<CentOS 6.7下IPSEC/L2TP VPN一键安装脚本>,不稳定.不支持IOS,因此换成pptp,并已经添加到<lnmp一键安装包>.这个脚本可以单独使用 ...

  6. centos一键优化脚本

    centos一键优化脚本:细节:http://oldboy.blog.51cto.com/2561410/1336488网络状态优化:http://oldboy.blog.51cto.com/2561 ...

  7. centos shell编程5 LANMP一键安装脚本 lamp sed lnmp 变量和字符串比较不能用-eq cat > /usr/local/apache2/htdocs/index.php <<EOF重定向 shell的变量和函数命名不能有横杠 平台可以用arch命令,获取是i686还是x86_64 curl 下载 第三十九节课

    centos shell编程5  LANMP一键安装脚本 lamp  sed  lnmp  变量和字符串比较不能用-eq  cat > /usr/local/apache2/htdocs/ind ...

  8. MySQL For Linux(CentOS/Ubuntu/Debian/Fedora/Arch)一键安装脚本(5.1-8.0)

    简介 很多童鞋不懂这么在Linux系统安装MySQL,网上大多数教程较复杂,不太适合小白安装,本教程提供一键安装脚本供大家使用,教大家怎么在Linux操作系统( 支持CentOS/Ubuntu/Deb ...

  9. Centos下Oracle11gR2安装教程与自动化配置脚本

    系统环境准备 开发组件与依赖库安装 安装centos时选择Server with GUI,右面的可以不勾选,后面统一来装 配置本地yum源 以上包如果缺乏可配置本地yum源进行安装 sudo moun ...

随机推荐

  1. 判断页面是在pc端还是移动端打开不同的页面

    在pc端页面上的判断 var mobileAgent = new Array("iphone", "ipod", "ipad", " ...

  2. Java优化if-else代码

    前言 开发系统一些状态,比如订单状态:数据库存储是数字或字母,但是需要显示中文或英文,一般用到if-else代码判断,但这种判断可读性比较差,也会影响后期维护,也比较容易出现bug.比如: 假设状态对 ...

  3. js简单化技巧

    1.交换两个变量而没有第三个 let x = 1;let y = 2;[x, y] = [y, x];console.log(x, y); 输出: 2 1 2.将数字转换为字符串 const num  ...

  4. cmd中输出换行和转义字符

    cmd 中输出换行和转义字符 今天想写一个安装 Windows 任务的 bat 脚本,在命令行界面输出换行和转义一些字符,居然搜索了好久才搜到正确操作,因此记录一下. 在命令行界面输出换行 echo. ...

  5. VS Code + WSL 搭建 RaspberryPi Pico 开发环境

    前面老周写一堆 .NET 与树莓派相关的水文.其实使用的是.net的 IOT 库,并不只是树莓派,其他运行 Linux 的开发板都适用,只要有 GPIO 就行.老周好像在哪看到过,有 USB 转GPI ...

  6. Linux系列(20) - shutdown

    作用 用于关机或重启 例子 [shutdown -h 05:30]:设定凌晨05:30关机 [shutdown -h +30]:30分钟后关机 [shutdown -h now] 立即关机 [shut ...

  7. python线程threading

    线程示例: import threading import time # 唱歌任务 def sing(): # 扩展: 获取当前线程 # print("sing当前执行的线程为:" ...

  8. python学习1-博客-DB操作类

    #学习python,准备写一个博客,第一天:在别人代码基础上写一个数据库操作的db.py1)python代码 #!/usr/bin/env python # -*- coding: UTF-8 -*- ...

  9. 『GoLang』控制结构

    条件语句 if 是用于测试某个条件(布尔型或逻辑型)的语句,如果该条件成立,则会执行if后由大括号括起来的代码块,否则就忽略该代码块继续执行后续的代码. if condition { // do so ...

  10. P4585-[FJOI2015]火星商店问题【线段树,可持久化Trie】

    正题 题目链接:https://www.luogu.com.cn/problem/P4585 题目大意 \(n\)个集合,开始每个集合中有一个数字. 开启新的一天并且往集合\(s\)中插入数字\(v\ ...