CentOS7 企业服务器日常管理–Shell脚本

时间:2021-2-20 作者:admin

公司需求用shell日常管理

linux系统初始化

主要是对于我们新构建的CentOS之后做一个完整的初始化,分析Linux系统的初始化过程,剖析初始化所涉及的关键程序和配置文件。

#!/bin/bash

# Description: system init script
# Date: 2019-04-23
# Author: wangchao
# Blog: https://blog.csdn.net/wc1695040842

# Network
ping -c 1 -W 3 114.114.114.114 &> /dev/null
if [ ! $? = 0 ];then
  echo "Cannot be networked"
  exit 1
fi


# Set PATH Variables
export PATH=/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/root/bin
export LANG="en_US.UTF-8"

# Set output color
COLUMENS=80
SPACE_COL=$[ $COLUMENS-15 ]
#VERSION=`uname -r | awk -F'.' '{print $1}'`
VERSION=`uname -r | awk -F'.' '{print $4}' | awk -F 'l' '{print $2}'`  #根据是6还是7来判断
 
RED='\033[1;5;31m'
GREEN='\033[1;32m'
NORMAL='\033[0m'


success() {
  REAL_SPACE=$[ $SPACE_COL - ${#1} ]
  for i in `seq 1 $REAL_SPACE`; do
      echo -n " "
  done
  echo -e "[ ${GREEN}SUCCESS${NORMAL} ]"
}

failure() {
  REAL_SPACE=$[ $SPACE_COL - ${#1} ]
  for i in `seq 1 $REAL_SPACE`; do
      echo -n " "
  done
  echo -e "[ ${RED}FAILURE${NORMAL} ]"
  exit 1
}


# 01
Data="01) 关闭selinux..."
echo -n $Data
setenforce 0
/bin/cp /etc/selinux/config /etc/selinux/config.bak
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config &> /dev/null
[ `grep "SELINUX=enforcing" /etc/selinux/config|wc -l` -eq 0 ] && success "$Data" || failure "$Data"


# 02
Data="02) 关闭iptables或者firewalld..."
echo -n $Data
if [ $VERSION = 6 ];then
    service iptables stop &> /dev/null
	chkconfig iptables off &> /dev/null
	[ `chkconfig --list | grep iptables| grep 3:on | wc -l` -eq 0 ] && success "$Data" || failure "$Data"
else
    systemctl stop firewalld &> /dev/null
	systemctl disable firewalld &> /dev/null
	[ `systemctl list-unit-files | grep firewalld | grep enabled | wc -l` -eq 0 ] && success "$Data" || failure "$Data"
fi


# 03
Data="03) 设置公网DNS..."
echo -n $Data
cat << EOF >> /etc/resolv.conf
options timeout:1 attempts:1 rotate single-request-reopen
nameserver 114.114.114.114
nameserver 114.114.114.115
EOF
[ `grep '114.114.114.114' /etc/resolv.conf | wc -l` -ne 0 ] && success "$Data" || failure "$Data"


# 04
Data="04) 安装常用基础命令..."
echo -n $Data
yum -y install vim expect screen lrzsz tree openssl openssh-clients openssl-devel openssh-server telnet iftop iotop sysstat wget ntpdate dos2unix lsof net-tools mtr gcc gcc-c++ cmake zip unzip git sudo psmisc &> /dev/null
if [ ! $? = 0 ];then
    failure "$Data"
else
    success "$Data"
fi


# 05
Data="05) 配置阿里云yum源..."
echo -n $Data
cd /etc/yum.repos.d
mkdir -p /etc/yum.repos.d/repo_bak
mv *.repo /etc/yum.repos.d/repo_bak/
wget http://mirrors.aliyun.com/repo/Centos-$VERSION.repo &> /dev/null 
wget http://mirrors.aliyun.com/repo/epel-$VERSION.repo &> /dev/null
yum clean all &> /dev/null && yum makecache &> /dev/null
[ `grep aliyun.com /etc/yum.repos.d/Centos-$VERSION.repo | wc -l` -ne 0 -a `grep aliyun.com /etc/yum.repos.d/epel-$VERSION.repo | wc -l` -ne 0 ] && success "$Data" || failure "$Data"


# 06
Data="06) 与阿里云时间同步服务器进行时间同步..."
echo -n $Data
/usr/sbin/ntpdate ntp1.aliyun.com &> /dev/null &&  hwclock --systohc &> /dev/null
echo "*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &&  hwclock --systohc" >> /var/spool/cron/root
if [ $VERSION = 6 ];then
    service crond restart &> /dev/null
else
    systemctl restart crond &> /dev/null
fi
[ `grep ntpdate /var/spool/cron/root |wc -l` -ne 0 ] && success "$Data" || failure "$Data"

系统初始化脚本 详解

linux系统加固

在指导系统管理人员或安全检查人员进行Linux操作系统的安全合规性检查和加固。
针对Linux移动终端面临的主要安全威胁,通过分析操作系统的安全特性,提出相应的安全加固措施,如基于硬件的终端身份识别和动态的安全状态检测技术等.通过对目前流行虚拟专用网协议的应用范围和实现方式进行了分析和对比,结合本论文的系统需求,最终选择了安全套接层作为认证和加密传输的协议。

#!/bin/bash
#定义三个文件的变量
###修改密码强度长度及过期时间
login_file=/etc/login.defs
###密码复杂度
pw_file=/etc/security/pwquality.conf
###错误次数锁定
auth_file=/etc/pam.d/system-auth
#加固前先备份
date_time=$(date +%F_%T)
cp $login_file   /root/$date_time-login.defs
cp $pw_file      /root/$date_time-pwquality.conf
cp $auth_file    /root/$date_time-system-auth

#修改密码长度不低于10位
echo minlen = 11 > $pw_file
#用户的密码必须要包含:大小写字母、数字、特殊符号每样至少一个
#至少一个数字
echo dcredit = -1 >> $pw_file
#至少一个大写字母
echo ucredit = -1 >> $pw_file
#至少一个小写字母
echo lcredit = -1 >> $pw_file
#至少一个特殊字符
echo ocredit = -1 >> $pw_file
#用户密码的过期时间:30天
sed -i '/PASS_MAX_DAYS/s/99999/30/' $login_file
#密码过期前8天提醒用户
sed -i '/PASS_WARN_AGE/s/7/8/' $login_file

#用户密码输入错误3次后,锁定用户10分钟
#先判断系统文件里是否有pam_tally2.so这个模块
grep -q 'pam_tally2.so' $auth_file
#判断返回值,非零则没有这个模块 追加模块
if [ $? -ne 0 ];then
echo 'auth        required      pam_tally2.so deny=3 unlock_time=300 even_deny_root root_unlock_time=300' >> $auth_file
fi
#把策略应用到root用户上
#   sed -i '15s/type=/type=enforce_for_root/' $auth_file
#用户1分钟内没有操作,自动注销!
grep -q 'TMOUT' /etc/profile || echo "export 'TMOUT=10'">>/etc/profile
source /etc/profile

mysql日常备份

从企业的角度看全量和增量

1)对于中小公司,全量一般每天一次,在业务量低估时执行全备并锁表;
2)对于单台数据库如何实现增量。利用rsync(配合定时任务频率高点,或者inotify主从复制)把所有binlog备份到远程服务器。但是尽量还是要做主从复制!
3)对于大公司,有可能会做周备,其他时间都是增量;
4)一主多从,会有一个从库做备份,延迟同步;

需要mysql的mysqldump全量备份场合:
迁移或升级数据库;
增加从库的时候;
由于硬件或异常情况导致的主库或从库宕机,主从可互相切换,无需备份;但是由于人为操作导致主库误删,主从都会执行,此时需要备份;
做跨机房灾备,需要全量备份到异地。

需要mysql的增量恢复场合:
人为操作导致主库误删(如drop),主从都会执行,此时需要增量备份;
只有一个主库的情况下需要增量恢复

mysqldump 变量说明

–all-databases针对所有数据库进行备份
–databases databasename 针对单个数据库进行备份
–flush-logs为结束当前日志,生成新日志文件;
–master-data 选项的作用就是将二进制的信息写入到输出文件中,在这里是写入到备份的sql文件中
用于日后恢复时参考,例如输出的备份SQL文件中含有:
CHANGE MASTER TO MASTER_LOG_FILE=’MySQL-bin.000002′, MASTER_LOG_POS=106;

实战MYSQL完全备份和增量备份

1、安装mysql

yum -y install mariadb mariadb-server

2、需要开启log-bin日志

sed -i '11ilog-bin=mysql-bin' /etc/my.cnf
cat /etc/my.cnf

CentOS7 企业服务器日常管理--Shell脚本3、增量和全备脚本

vim mysql_dump.sh
#!/bin/bash

MYSQL_BACKUP=`date +%Y%m%d`
MYSQL_LOG_BIN=`ls /var/lib/mysql/mysql-bin.[0.9]* | head -n 1 | sort -rg | head -n 1`
num=$1
if [ ! -d /opt/$MYSQL_BACKUP ];then
    mkdir /opt/$MYSQL_BACKUP -p
fi

#全备
mysql_all(){
    mysqldump -uroot --flush-logs --master-data --all-databases > /opt/$MYSQL_BACKUP/${MYSQL_BACKUP}.sql
}
#增备
mysql_increment(){
    mysqldump -uroot --flush-logs
    cp $MYSQL_LOG_BIN /opt/$MYSQL_BACKUP
}

case $num in
    1)
        mysql_all
        ;;
    2)
        mysql_increment
        ;;
    *)
        exit
esac

4、计划任务

crontab -e #编写
0 2 * * 1 sh mysql_dump1.sh 1>> /tmp/test.log
0 2 * * 2-7 sh mysql_dump.sh 2>> /tmp/test_increment.log
crontab -l #查看编写

模拟数据丢失
1、新增数据

创建数据库
create database wg;
查看数据库
show databases;

CentOS7 企业服务器日常管理--Shell脚本

2、数据备份

sh mysql.sh 1
sh mysql.sh 2

CentOS7 企业服务器日常管理--Shell脚本
3、删除数据

drop database wg;

CentOS7 企业服务器日常管理--Shell脚本
4、数据的恢复

全备
mysql -uroot < /opt/20201125/20201125.sql
增备
mysqlbinlog /opt/20201125/mysql-bin.000001 | mysql -uroot

CentOS7 企业服务器日常管理--Shell脚本

linux系统巡检

服务器巡检是定期对服务器各类性能指标,系统日志进行采集,并对采集的数据分析汇总,从而形成巡检报告.通过服务器巡检可以了解服务器硬件健康状况,服务器资源使用情况,系统面临的安全威胁情况等.及时处理应对,可以保障服务器正常,安全,有序运行。

#!/bin/bash
echo "系统巡检脚本:Version `date +%F`"

echo -e "\033[33m*******************************************************  系统检查  *******************************************************\033[0m"
echo "系统:`uname -a | awk '{print $NF}'`"
echo "发行版本:`cat /etc/redhat-release`"
echo "内核:`uname -r`"
echo "主机名:`hostname`"
echo "SELinux:`/usr/sbin/sestatus | grep 'SELinux status:' | awk '{print $3}'`"
echo "语言/编码:`echo $LANG`"
echo "当前时间:`date +%F_%T`"
echo "最后启动:`who -b | awk '{print $3,$4}'`"
echo "运行时间:`uptime | awk '{print $3}' | sed 's/,//g'`"

echo -e "\033[33m*******************************************************  CPU检查  *******************************************************\033[0m"
echo "物理CPU个数: `cat /proc/cpuinfo | grep "physical id" | awk '{print $4}' | sort | uniq | wc -l`"
echo "逻辑CPU个数: `cat /proc/cpuinfo | grep "processor" | awk '{print $3}' | sort | uniq | wc -l`"
echo "每CPU核心数: `cat /proc/cpuinfo | grep "cores" | awk '{print $4}'`"
echo "CPU型号: `cat /proc/cpuinfo | grep "model name" | awk -F":" '{print $2}'`"
echo "CPU架构: `uname -m`"

echo -e "\033[33m*******************************************************  内存检查  *******************************************************\033[0m"
echo "总共内存:`free -mh | awk "NR==2"| awk '{print $2}'`"
echo "使用内存:`free -mh | awk "NR==2"| awk '{print $3}'` "
echo "剩余内存:`free -mh | awk "NR==2"| awk '{print $4}'`"
echo "内存剩余:`free |awk '/Mem/{printf "%.2f",$4/$2*100}'`"
echo "内存使用:`free |awk '/Mem/{printf "%.2f",$3/$2*100}'`"

echo -e "\033[33m*******************************************************  硬盘检查  *******************************************************\033[0m"
echo "总共磁盘大小:`df -hT | awk "NR==2"|awk '{print $3}'`"
disk_free=($(df -T | grep -v "tmpfs"|sed 1d |awk '{print $5}'))
sum=0
for i in ${disk_free[@]}
do
	let sum=sum+$i
done
	a=$[sum/1024/1024]
	echo "磁盘剩余$a"G

echo -e "\033[33m*******************************************************  网络检查  *******************************************************\033[0m"
echo `ip a | grep eno | awk "NR==2" | awk '{print $NF,":",$2}'`
echo "网关:`ip route | awk 'NR==1'| awk '{print $3}'`"
echo "DNS: `cat /etc/resolv.conf | grep "nameserver" | awk '{print $2}'`"
ping -c 4 www.baidu.com > /dev/null
if [ $? -eq 0 ];then
    echo "网络连接:正常"
else
    echo "网络连接:失败"
fi

echo -e "\033[33m*******************************************************  安全检查  *******************************************************\033[0m"
echo "登陆用户信息:`last | grep "still logged in" | awk '{print $1}'| sort | uniq`"
md5sum -c --quiet /etc/passwd > /dev/null 2&>1
if [ $? -eq 0 ];then
    echo "文件未被串改"
else
    echo "文件被串改"
fi
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。