centos7初始化脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了centos7初始化脚本相关的知识,希望对你有一定的参考价值。

#!/bin/bash

Author: guop

centos7初始化脚本

PASSWD=password
HOSTNAME=EIFM
DNS1=119.29.29.29
DNS2=223.5.5.5

cat << EOF
+------------------------------------------------------------------+
| ** Welcome to CentOS 7 System init ** |
+------------------------------------------------------------------+
EOF

[ whoami != "root" ] && echo "please use root" && exit 1

function format()
echo -e "\033[32m Success!!! \033[0m\n"
echo "#########################################################"

###修改root用户密码
echo "set root passwd"
echo $PASSWD | passwd root --stdin &> /dev/null
format

###修改主机名
echo "set hostname"
hostname $HOSTNAME && echo "HOSTNAME=$HOSTNAME" >> /etc/sysconfig/network
format

###配置DNS解析
echo "set DNS"
echo "" > /etc/resolv.conf
echo "nameserver $DNS1" > /etc/resolv.conf
echo "nameserver $DNS2" >> /etc/resolv.conf
ping -c 3 www.baidu.com &> /dev/null || echo "请检查网络连接,此脚本需要访问外网" || exit 3
format

###关闭Selinux服务
echo "disable selinux"
[ getenforce != "Disabled" ] && setenforce 0 &> /dev/null && sed -i s/"^SELINUX=.*$"/"SELINUX=disabled"/g /etc/sysconfig/selinux
format

###更新yum源为阿里云
echo "set yum repo"
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo &> /dev/null
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo &> /dev/null
yum makecache &> /dev/null
format

###锁定重要配置文件
echo "chattr files"
chattr +i /etc/passwd
chattr +i /etc/inittab
chattr +i /etc/group
chattr +i /etc/shadow
chattr +i /etc/gshadow
chattr +i /etc/resolv.conf
chattr +i /etc/hosts
chattr +i /etc/fstab
#chattr -i /etc/passwd
format

###设置字符集为中文
echo "set LANG"
echo ‘LANG="zh_CN.UTF-8"‘ > /etc/locale.conf
format

###自动更新服务器时间
echo "set ntptime"
yum install ntpdate -y
cp -fr /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
cat >> /etc/crontab << EOF
#sync time
/30 * /usr/sbin/ntpdate pool.ntp.org &> /dev/null && /sbin/hwclock -w &> /dev/null
EOF
sed -i "/server/d" /etc/chrony.conf
echo ‘server ntp.aliyun.com iburst &>/dev/null‘ >> /etc/chrony.conf
format

###内核参数优化
echo "Set sysctl.conf"
cat > /etc/sysctl.conf << EOF
net.ipv4.ip_forward = 0
#开启路由功能
net.ipv4.conf.all.rp_filter = 1
#加强入站过滤和出站过滤
net.ipv4.conf.default.rp_filter = 1
#开启反向路径过滤
net.ipv4.conf.default.accept_source_route = 0
#处理无源路由的包
kernel.sysrq = 0
#控制系统调试内核的功能要求
kernel.core_uses_pid = 1
#用于调试多线程应用程序
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
kernel.msgmnb = 65536
#所有在消息队列中的消息总和的最大值
kernel.msgmax = 65536

指定内核中消息队列中消息的最大值

kernel.shmmax = 68719476736
#于定义单个共享内存段的最大值,64位linux系统:可取的最大值为物理内存值-1byte,建议值为多于物理内存的一半,一般取值大于SGA_MAX_SIZE即可,可以取物理内存-1byte。例如,如果为64GB物理内存,可取6410241024*1024-1=68719476735
kernel.shmall = 4294967296
#inux共享内存页大小为4KB,共享内存段的大小都是共享内存页大小的整数倍。一个共享内存段的最大大小是 16G,那么需要共享内存页数是16GB/4KB=16777216KB /4KB=4194304(页),也就是64Bit系统下16GB物理内存,设置kernel.shmall = 4194304才符合要求(几乎是原来设置2097152的两倍)
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv4.neigh.default.gc_stale_time = 120
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
###内存资源使用相关设定
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 65536 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_mem = 8388608 8388608 8388608
##应对DDOS***,TCP连接建立设置
net.ipv4.tcp_syncookies = 1
#防止syn flood***
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_max_syn_backlog = 262144
#SYN队列的长度,默认为1024,加大队列长度为262144,可以容纳更多等待连接的网络连接数
##应对timewait过高,TCP连接断开设置
net.ipv4.tcp_max_tw_buckets = 10000
#默认是180000。表示系统同时保持TIME_WAIT的最大数量,如果超过这个数字,TIME_WAIT将立刻被清除并打印警告信息
net.ipv4.tcp_tw_recycle = 1
#表示开启TCP连接中TIME-WAIT sockets的快速收回功能,默认为 0 ,表示关闭。
net.ipv4.tcp_tw_reuse = 1
#表示开启重用。允许将TIME-WAIT sockets重新用于新的 TCP 连接,默认为 0 表示关闭
net.ipv4.tcp_timestamps = 0
#时间戳可以避免序列号的卷绕
net.ipv4.tcp_fin_timeout = 5

表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60 秒。2.2 内核的通常值是180 秒,3你可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB 服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT-2 的危险性比FIN-WAIT-1 要小,因为它最多只能吃掉1.5K 内存,但是它们的生存期长些

net.ipv4.ip_local_port_range = 4000 65000

表示用于向外连接的端口范围

###TCP keepalived 连接保鲜设置
net.ipv4.tcp_keepalive_time = 1200
#表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟
net.ipv4.tcp_keepalive_intvl = 15

当探测没有确认时,重新发送探测的频度。缺省是75

net.ipv4.tcp_keepalive_probes = 5

在认定连接失效之前,发送多少个TCP的keepalive探测包。缺省值是9。这个值乘以tcp_keepalive_intvl之后决定了,一个连接发送了keepalive之后可以有多少时间没有回应

###其他TCP相关调节
net.core.somaxconn = 262144
#isten(函数)的默认参数,挂起请求的最大数量限制。web 应用中listen 函数的backlog 默认会给我们内核参数的net.core.somaxconn 限制到128,而nginx 定义的NGX_LISTEN_BACKLOG 默认为511,所以有必要调整这个值
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
EOF
sysctl -p
format

#安装必要的软件包
echo "install pack"
yum -y install make gcc gcc-c++ cmake snmp asciidoc libxslt-devel libxslt flex kernel-headers kernel-devel autoconf automake psmisc bzip2 bzip2-devel libxml2 libxml2-devel openssl openssl-devel libcurl libcurl-devel pcre pcre-devel libaio libmcrypt libmcrypt-devel mhash mhash-devel git zip unzip pigz ntpdate telnet nmap-ncat rsync vim-enhanced openssh-clients nfs-utils jemalloc screen mailx haveged xz iotop iotop tcpdump sysstat wget vim lsof bash-completion &> /dev/null
format

read -p "系统初始化完毕,是否需要重启(y/n)?"
if [ "$TT" == "y" ];then
reboot
elif [ "$TT" == "n" ];then
exit 4
else
echo "请输入y/n"
fi

以上是关于centos7初始化脚本的主要内容,如果未能解决你的问题,请参考以下文章

centos7 初始化脚本

CentOS7 初始化脚本 2.0

CentOS7 初始化脚本 1.0

CentOS7系统初始化脚本

centos7最小安装初始脚本

centos7.3系统的初始化脚本