`

[转] Linux服务器安全初始化自选安装Shell脚本

阅读更多
#!/bin/bash
#
# Script Name: initSystem.sh
# Description: setup linux system init.
# Author: 300second - 51cto.com
# Date: 2012-10-30
#  
#set env
export PATH=$PATH:/bin:/sbin:/usr/sbin
export LANG="zh_CN.GB18030"
#require root to run this script.
if [[ "$(whoami)" != "root" ]]; then
 echo "Please run this script as root." >&2
 exit 1
fi
#define cmd var
SERVICE=`which service`
CHKCONFIG=`which chkconfig`
#Source function library.
. /etc/init.d/functions
#Modify the system yum source  //修改系统Yum源
initYum() {
cat << EOF
+--------------------------------------------------------------+
+------      Welcome to Modify the system yum source.    ------+
+--------------------------------------------------------------+
EOF
 
cd /etc/yum.repos.d/
\cp CentOS-Base.repo CentOS-Base.repo.ori.$(date +%F)
ping -c 1 baidu.com >/dev/null
[ ! $? -eq 0 ] && echo $"Networking not configured - exiting" && exit 1
wget --quiet -o /dev/null http://mirrors.sohu.com/help/CentOS-Base-sohu.repo
\cp CentOS-Base-sohu.repo CentOS-Base.repo
echo "Modify the system yum source.------->OK"
sleep 3
}
#Set the character encoding  //设置字符编码
initI18n() {
cat << EOF
+--------------------------------------------------------------+
+------       Welcome to Set the character encoding.     ------+
+--------------------------------------------------------------+
EOF
echo "#set LANG="zh_cn.gb18030""
\cp /etc/sysconfig/i18n /etc/sysconfig/i18n.$(date +%F)
sed -i 's#LANG="en_US.UTF-8"#LANG="zh_CN.GB18030"#' /etc/sysconfig/i18n
source /etc/sysconfig/i18n
grep LANG /etc/sysconfig/i18n
echo "Set the character encoding.------->OK"
sleep 3
}
#Close the firewall and Selinux  //关闭防火墙和Selinux
initFirewall() {
cat << EOF
+--------------------------------------------------------------+
+------     Welcome to Close the firewall and Selinux.   ------+
+--------------------------------------------------------------+
EOF
\cp /etc/selinux/config /etc/selinux/config.`date +"%Y-%m-%d_%H-%M-%S"`
/etc/init.d/iptables stop
chkconfig iptables off
sed -i 's/SELINUX=enable/SELINUX=disabled/' /etc/selinux/config
setenforce 0
/etc/init.d/iptables status
grep SELINUX=disabled /etc/selinux/config
echo "Close the firewall and Selinux.------->OK"
sleep 3
}
#Close unnecessary system service  //关闭不必要系统服务
initService() {
cat << EOF
+--------------------------------------------------------------+
+------   Welcome to Close unnecessary system service .  ------+
+--------------------------------------------------------------+
EOF
export LANG="en_US.UTF-8"
for i in `chkconfig --list |grep 3:on|awk '{print $1}'`;do chkconfig --level 3 $i off;done
for i in crond network sshd syslog;do chkconfig --level 3 $i on;done
export LANG="zh_CN.GB18030"
echo "Close unnecessary system service.------>OK"
sleep 3
}
#Set the sshConfig banned root login  //设置sshConfig,禁止root登录
initSsh() {
cat << EOF
+--------------------------------------------------------------+
+------  Welcome to Set the sshConfig banned root login. ------+
+--------------------------------------------------------------+
EOF
\cp /etc/ssh/sshd_config /etc/ssh/sshd_config.`date +"%Y-%m-%d_%H-%M-%S"`
sed -i 's%#Port 22%Port 52113%' /etc/ssh/sshd_config
sed -i 's%#PermitRootLogin yes%PermitRootLogin no%' /etc/ssh/sshd_config
sed -i 's%#PermitEmptyPasswords no%PermitEmptyPasswords no%' /etc/ssh/sshd_config
sed -i 's%#UseDNS yes%UseDNS no' /etc/ssh/sshd_config
egrep "UseDNS|52113|RootLogin|EmptyPass" /etc/ssh/sshd_config
/etc/init.d/sshd reload
echo "Set the sshConfig banned root login.------>OK"
sleep 3
}
#Disable ctrlaltdel three key to reboot system  //禁止ctrl+alt+del三个键重启系统
initSafe() {
cat << EOF
+--------------------------------------------------------------+
+-- Welcome to Disable ctrlaltdel three key to reboot system.--+
+--------------------------------------------------------------+
EOF
\cp /etc/inittab /etc/inittab.`date +"%Y-%m-%d_%H-%M-%S"`
sed -i "s/ca::ctrlaltdel:\/sbin/shutdown -t3 -r now/#ca::ctrlaltdel:\/sbin/shutdown -t3 -r now/" /etc/inittab
/sbin/init q
echo "Disable ctrlaltdel three key to reboot system.------>OK"
sleep 3
}
#Add users and set permissions in sudo //添加SA用户并设置sudo权限
initAddUser() {
cat << EOF
+--------------------------------------------------------------+
+------Welcome to Add  users and set permissions in sudo.------+
+--------------------------------------------------------------+
EOF
datetmp=`date +"%Y-%m-%d_%H-%M-%S"`
\cp /etc/sudoers /etc/sudoers.${datetmp}
saUserArr=(test test1 test2)
groupadd -g 901 sa
for((i=0;i<${#saUserArr[@]};i++))
do
#add user //添加用户
useradd -g sa -u 90${i} ${saUserArr[$i]}
#set password //设置密码
echo "${saUserArr[$i]}123"|passwd ${saUserArr[$i]} --stdin
#set permissions //设置sudo权限
[ $(grep "${saUserArr[$i]} ALL=(ALL) NOPASSWD: ALL" /etc/sudoers|wc -l) -le 0 ] &&echo "${saUserArr[$i]} ALL=(ALL) NOPASSWD: ALL" >>/etc/sudoers 
[ `grep "\%sa" /etc/sudoers|grep -v grep |wc -l` -ne 1 ] && \
echo "%sa ALL=(ALL) NOPASSWD: ALL" >>/etc/sudoers
done 
/usr/sbin/visudo -c
[ $? -ne 0 ] && /bin/cp /etc/sudoers.${datetmp} /etc/sudoers && echo $"Sudoers not configured - exiting" && exit 1
echo "Add  users and set permissions in sudo.------>OK"
sleep 3
}
#Adjust the number of open files  //调整系统打开文件数
initOpenFiles() {
cat << EOF
+--------------------------------------------------------------+
+------    Welcome to Adjust the number of open files.   ------+
+--------------------------------------------------------------+
EOF
\cp /etc/security/limits.conf /etc/security/limits.conf.`date +"%Y-%m-%d_%H-%M-%S"`
sed -i ' /# End of file/i\*\t\t-\tnofile\t\t65535' /etc/security/limits.conf
ulimit -HSn 65535
echo "ulimit -HSn 65535" >> /etc/rc.local
echo "Adjust the number of open files.------>OK"
sleep 3 
}
#Set system time synchronization  //设置系统同步时间
initSysTime() {
cat << EOF
+--------------------------------------------------------------+
+------    Welcome to Set system time synchronization.   ------+
+--------------------------------------------------------------+
EOF
 
yum -y install ntp >>/dev/null 2>&1
ntpdate time.windows.com 
echo "*/5 * * * * /usr/sbin/ntpdate time.windows.com >/dev/null 2>&1" >>/var/spool/cron/root
echo "Set system time synchronization.------>OK"
sleep 3
}
#Optimization of system kernel   //优化系统内核
initKernel() {
cat << EOF
+--------------------------------------------------------------+
+------     Welcome to Optimization of system kernel.    ------+
+--------------------------------------------------------------+
EOF
\cp /etc/sysctl.conf /etc/sysctl.conf.`date +"%Y-%m-%d_%H-%M-%S"`
cat>>/etc/sysctl.conf<<EOF
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800
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 87380 16777216
net.ipv4.tcp_wmem = 4096 87380 16777216
net.core.netdev_max_backlog = 32768
net.core.somaxconn = 32768
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.ip_local_port_range = 1024 65535
EOF
/sbin/sysctl -p 
echo "Optimization of system kernel.------>OK"
sleep 3
}
#Installation system tools  //安装系统工具
initTool() {
cat << EOF
+--------------------------------------------------------------+
+------       Welcome to Installation system tools.      ------+
+------        <sysstat ntp net-snmp lrzsz rsync>        ------+
+--------------------------------------------------------------+
EOF
yum -y install sysstat ntp net-snmp lrzsz rsync >/dev/null 2>&1
echo "Installation system tools.------->OK"
sleep 3
}
#Prohibit the use of IPV6  //禁止使用IPV6
initIPV6() {
cat << EOF
+--------------------------------------------------------------+
+------        Welcome to Prohibit the use of IPV6.      ------+
+--------------------------------------------------------------+
EOF
\cp /etc/modprobe.conf /etc/modprobe.conf.`date +"%Y-%m-%d_%H-%M-%S"`
echo "alias net-pf-10 off" >> /etc/modprobe.conf
echo "alias ipv6 off" >> /etc/modprobe.conf
echo "Prohibit the use of IPV6.------>OK"
sleep 3
}
AStr="修改系统Yum源,设置字符编码,关闭防火墙和Selinux,关闭不必要系统服务"
BStr="配置sshConfig,修改默认端口22->52113和禁止root登录"
CStr="禁止Ctrl+Alt+Del三个键重启系统"
DStr="添加SA用户并设置sudo权限"
EStr="调整系统打开文件数"
FStr="设置系统同步时间"
GStr="优化系统内核"
HStr="安装系统工具"
IStr="禁止使用IPV6"
JStr="一键初始化"
echo "+--------------------------------------------------------------+"
echo "+-----------------欢迎对系统进行初始化安全设置!---------------+"
echo "A:${AStr}"
echo "B:${BStr}"
echo "C:${CStr}"
echo "D:${DStr}"
echo "E:${EStr}"
echo "F:${FStr}"
echo "G:${GStr}"
echo "H:${HStr}"
echo "I:${IStr}"
echo "J:${JStr}"
echo "+--------------------------------------------------------------+"
echo "注意:如果没有选择初始化选项,20秒后将自动选择一键初始化安装!"
echo "+--------------------------------------------------------------+"
option="-1"
read -n1 -t20 -p "请选择初始化选项【A-B-C-D-E-F-G-H-I-J】:" option
flag1=$(echo $option|egrep "\-1"|wc -l)
flag2=$(echo $option|egrep "[A-Ja-j]"|wc -l)
if [ $flag1 -eq 1 ];then
    option="K"
elif [ $flag2 -ne 1 ];then
    echo -e "\n\n请重新运行脚本,输入从A--->J的字母!"
    exit 1
fi
echo -e "\n你选择的选项是:$option\n"
echo "5秒之后开始安装 ......"
sleep 5
case $option in
    A|a)
          initYum
          initI18n
          initFirewall
          initService
       ;;
    B|b)
          initSsh
       ;;
    C|c)
          initSafe
       ;;
    D|d)
          initAddUser
       ;;
    E|e)
          initOpenFiles
       ;;
    F|f)
          initSysTime
       ;;
   G|g)
          initKernel
       ;;
   H|h)
          initTool
       ;;
    I|i)
          initIPV6
       ;;
    J|j)
          initYum
          initI18n
          initFirewall
          initService
          initSsh
          initSafe
          initAddUser
          initOpenFiles
          initSysTime
          initKernel
          initTool
          initIPV6
       ;;
      *)
          echo "请输入从A--->J的字母,谢谢!"
          exit
       ;;
esac   

 

 

 

使用方法:将其复制,保存为一个shell文件,比如initSystem.sh。执行sh initSystem.sh,就可以使用该脚本了,如下图所示:
 



BTW:如果大家认为我写的还可以,希望能给我的博客投个票,谢谢!O(∩_∩)O
http://blog.51cto.com/contest2012/7582

 

本文出自 “300second的运维小站” 博客,请务必保留此出处http://300second.blog.51cto.com/7582/1043603

分享到:
评论

相关推荐

    linux下批量执行oracle脚本的shell脚本

    首先,我们来看标题中的"linux下批量执行oracle脚本的shell脚本",这指的是在Linux操作系统中,通过编写shell脚本来自动化执行一系列针对Oracle数据库的SQL命令。Shell脚本是Linux系统中的一种强大的自动化工具,它...

    初始化服务器一键部署脚本

    这是一个初始化服务器一键部署脚本,希望可以帮助到大家, 此脚本由“大宝不胖,但是很壮”“黑哥”编写 #如有不足的地方或是疑问请联系我 #邮箱:db88788@163.com #感谢大家的使用,谢谢。

    linux一键初始化oracle11g安装环境脚本(centos)

    最近频繁在Centos7.3上安装oracle,设置基础安装环境工序太多,所以写了一个脚本起到能在linux一键初始化oracle11g安装环境脚本的目的,其中主要更改主机名、关闭防火墙、禁用Selinx、配置用户和组、创建目录、更改...

    18个Linux Shell脚本经典案例视频.zip

    网盘文件永久链接 ...服务器系统配置初始化脚本 查看网卡实时流量脚本 监控100台服务器磁盘利用率脚本 监控MySQL主从同步状态是否异常脚本 目录文件变化监控和实时文件同步 自动发布Java项目 自动发布PHP项目脚本

    Linux系统初始化相关脚本分析

    `rc.sysinit`是Linux系统初始化的核心脚本,通常位于/etc目录下,它是系统引导过程中的第一步。这个脚本主要负责进行一些系统级别的设置和初始化工作,例如: 1. **硬件检测**:对系统硬件进行检测,包括磁盘、内存...

    oraclep安装shell脚本

    总结来说,`oraclep安装shell脚本`是Linux环境下简化Oracle安装和管理的强大工具,通过自动化流程极大地提高了效率,降低了出错的可能性。对于熟悉Linux和Oracle的IT专业人士而言,这是一个非常有价值的资源。

    服务器初始化脚本.sh

    可以通过脚本进行服务器的初始化、挂载磁盘、安装常用软件等等

    Nacos 2.1.2 数据库初始化脚本

    Nacos 2.1.2 数据库初始化脚本

    Linux-CentOS 7.6 系统初始化脚本

    内容概括:禁用防火墙,修改selinux,修改yum源,安装常用软件,同步系统时间,DNS域名配置...操作:用xftp将文件导入到Linux中,chmod a+x init.sh给予脚本执行权限后./init.sh,执行脚本就可以实现虚拟机的初始化了。

    常用shell 脚本,dos攻击防范,

    服务器系统配置初始化脚本.sh 本教程由我爱学it提供.url 查看网卡实时流量脚本.sh 监控100台服务器磁盘利用率脚本.sh 监控MySQL主从同步状态是否异常脚本.sh 目录文件变化监控和实时文件同步.sh 自动发布Java...

    Linux Shell脚本经典案例合集

    服务器系统配置初始化脚本.sh 监控100台服务器磁盘利用率脚本.sh 监控MySQL主从同步状态是否异常脚本.sh 秒传_18个Linux Shell脚本经典案例(视... 目录文件变化监控和实时文件同步.sh 批量创建100用户并设置密码脚本...

    使用Ubuntu 22.04.2 LTS编写shell脚本(上)

    在Ubuntu 22.04.2 LTS中编写Shell脚本是系统管理和自动化任务执行的重要方式。Shell脚本,通常以.sh文件结尾,是一系列在Linux或Unix环境中执行的命令集合,可以极大地提升工作效率。在Ubuntu中,我们可以利用内置的...

    linux的shell脚本快速部署java环境jdk+tomcat+mysql

    `mysql.sh`脚本会负责安装MySQL服务器,创建用户,设置权限,以及可能的初始化数据库工作。 在实际操作中,使用这三份脚本可以大大简化部署过程,避免手动执行一系列复杂的命令。`一键部署linux环境脚本使用说明....

    树莓派linux内核交叉编译shell脚本.zip

    这个压缩包文件"树莓派linux内核交叉编译shell脚本.zip"提供了在Ubuntu环境下为树莓派进行Linux内核交叉编译的工具和指南。交叉编译是在一个操作系统上编译另一个操作系统上的软件,这里是Ubuntu为树莓派编译Linux...

    使用 Bash shell 脚本进行功能测试

    相比之下,Bash shell脚本作为Linux系统自带的工具,为功能测试提供了一种快速、灵活且无需额外成本的解决方案。本文将深入探讨如何利用Bash shell脚本来高效执行功能测试,涵盖脚本创建、移植策略、最佳实践等多个...

    shell脚本实现linux系统文件完整性检测

    3. **Shell脚本**: Linux/Unix系统下的脚本语言,用于编写自动化任务、命令序列等。 #### 脚本详解 下面是对所提供的脚本进行的逐行解析与说明: ```bash #!/bin/bash # 变量首先声明才能使用 shopt -s nounset #...

    初始化Linux数据盘脚本

    初始化Linux数据盘脚本,用于初始化华为云等机器的数据盘

    linux初始化调优脚本

    centos6、7系统初始化调优脚本,自动配置yum源、初始化安装常用包,配置系统内核参数

    阿里云的centos/linux服务器一键安装环境脚本

    总的来说,阿里云的一键安装环境脚本是为快速部署Web服务而设计的实用工具,结合了多种服务器组件,简化了Linux服务器的初始设置过程。使用者只需按照指南操作,就能在短时间内拥有一个功能齐全的Web服务器环境。

    linux C程序中获取shell脚本输出(如获取system命令输出)

    ### Linux C程序中获取Shell脚本输出方法详解 在Linux环境下进行C语言编程时,我们经常需要执行系统命令并获取其输出结果。这种需求在多种场景下都非常常见,比如自动化脚本开发、系统监控工具编写等。本文将详细...

Global site tag (gtag.js) - Google Analytics