等保测评中对服务器、数据库等相关优化

等保测评中对服务器及数据库的部分安全处理

【服务器相关】
系统为CentOS7.8

  1. 密码有效期设置/etc/login.defs
    PASS_MAX_DAYS    90 #密码使用天数
    PASS_MIN_DAYS    0
    PASS_MIN_LEN    9
    PASS_WARN_AGE    15 #提醒用户修改密码天数

注:修改配置后仅针对新增帐号才会生效,原帐号可通过chage命令调整,可通过chage -l root查看。

vi /etc/pam.d/system-auth 优先级高于login.defs

# 配置最小长度为8位,至少包含1位大写字母、1位小写字母、1位数字和1位特殊字符。
password requisite pam_cracklib.so minlen=8 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1 retry=5 difok=3
# minlen:最小密码长度
# dcredit:最少数字
# ucredit:最少大写字母
# ocredit:最少特殊字符
# lcredit:最少小写字符
# retry:尝试次数
# difok:最少不同字符
    chage:密码失效是通过此命令来管理的。
     
      参数意思:
      -m 密码可更改的最小天数。为零时代表任何时候都可以更改密码。
      -M 密码保持有效的最大天数。
      -W 用户密码到期前,提前收到警告信息的天数。
      -E 帐号到期的日期。过了这天,此帐号将不可用。
      -d 上一次更改的日期
      -I 停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
      -l 例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。

- 阅读剩余部分 -

windows下php7.4安装imagick、ImageMagick、GhostScript实现pdf转图片

实现word转pdf->pdf转图片->对转换后的图片处理完成后再生成pdf功能。

php3.png

本地windows开发环境配置方式:

  1. 查看phpinfo确定需下载的imagick扩展类型,下载地址为:https://windows.php.net/downloads/pecl/releases/imagick 考虑到ImageMagick官网不支持历史版本下载,imagick扩展优先使用高版本,确保两者版本一致。

- 阅读剩余部分 -

按月全量备份/按天增量备份 脚本

backup.sh 月初全量备份,之后按天增量备份。建议将历年附件等归档内容下载备份后,线上不再备份此数据。每月备份目录可自动上传到OSS中。

    #!/bin/bash
    
    # 整站文件按月备份并同步到oss
    # 按天增量备份
    # /web仅保存增量备份
    
    tar=/bin/tar
    projectPath=/web_lv/
    project=folderName
    #增量备份存放位置
    bakPath=/web/site/"$project"
    #全量备份存在位置
    fullPath=/web_lv/full_bak
    
    ym=`date +%Y%m`
    ymd=`date +%Y%m%d`
    nowMonth=`date +%Y%m01`
    last=`date -d"$nowMonth last month" +%Y%m`
    monthBakPath=$fullPath/$ym
    gidShot=Gid$project$ym
    fullName=$ym
    dailyName=$ymd
    log=$bakPath/$project.log
    
    chk_month()
    {
      if [ -e "$monthBakPath"/"$project"_"$ym"_month.tar.gz ];then
        echo ""$project"_"$ym"_month.tar.gz file exist!! ====`date +%Y-%m-%d-%T` " >>$log
      else
        tar_month
      fi
    }
    
    chk_daily()
    {
      while [ -e "$bakPath"/"$ym"/"$project"_"$dailyName"_daily.tar.gz ]
        do
          dailyName=`echo "$dailyName + 0.1" | bc `
        done
    }
    
    #增量备份
    tar_daily()
    {
      cd $projectPath
      echo "START=====`date +%Y-%m-%d-%T` ==== CREATE "$project"_"$dailyName"_daily.tar.gz" >> $log
      sleep 3
      $tar -g $fullPath/$gidShot -zcf $bakPath/$ym/"$project"_"$dailyName"_daily.tar.gz --exclude=runtime --exclude=app --exclude=sensen --exclude=vendor --exclude=public/tmp --exclude=public/uploads/tmp --exclude=public/uploads/attach/2021 $project
      echo "END========`date +%Y-%m-%d-%T` ==== CREATE "$project"_"$dailyName"_daily.tar.gz" >> $log
    }
    
    #全量备份
    tar_month()
    {
      touch $fullPath/$gidShot
      cd $projectPath
      echo "START=====`date +%Y-%m-%d-%T` ==== CREATE "$project"_"$fullName"_month.tar.gz" >> $log
      $tar -g $fullPath/$gidShot -zcf $monthBakPath/"$project"_month.tar.gz --exclude=runtime --exclude=app --exclude=sensen --exclude=vendor --exclude=public/tmp --exclude=public/uploads/tmp --exclude=public/uploads/attach/2021 $project
      echo "END========`date +%Y-%m-%d-%T` ==== CREATE "$project"_"$fullName"_month.tar.gz" >> $log
    }
    
    # 废弃方法,直接将全量及增量数据备份到指定目录
    move_full()
    {
      echo "start----move" >> $log
      mv -f $monthBakPath/"$project"_month.tar.gz /web/site/full/
      echo "end----move" >> $log
    }
    
    backup()
    {
      if [ -d $monthBakPath ]; then
        #chk_month
        chk_daily
        tar_daily
      else
        #delete last month
        echo "start----delete last month data" >> $log
        rm -rf $bakPath/$last
        rm -rf $fullPath/*
        mkdir -p $fullPath/$ym
        mkdir -p $bakPath/$ym
        tar_month
        #move_full
      fi
    }
    
    if [ -d $bakPath ];then
      backup
    else
      mkdir -p $bakPath
      backup
    fi

查看dm-0对应的设备映射

在使用iostat命令时可能会看到dm-xx的设备(即Device Mapper缩写),为linux提供的一种从逻辑设备到物理设备的映射框架机制,如LVM2都是基于该机制实现的。
lvdisplay|awk '/LV Name/{n=$3} /Block device/{d=$3; sub(".*:","dm-",d); print d,n;}'

从备份数据中恢复脚本

recover.sh
backup.sh脚本备份后的数据进行恢复(恢复前需先确保已部署系统)

#!/bin/bash

#---------------------------------------
# 从备份数据中恢复OA数据
# author: SenSen 1050575278
# date: 2022/04/13
# 需先创建完oa系统后方可使用
# 注意:所有脚本需测试后方可使用!!!
#---------------------------------------

read -p "Warning! Enter 'recover' to continue : " input

if [ "$input" == 'recover' ]; then
  oaDir='/web/oa/'
  backDir='/bak_oa/'
  sysDir=`ls /web/oa`

  for f in ${sysDir}
    do
      if [ ! -f "${backDir}${f}.tar.gz" ]; then
        echo "${f}.tar.gz not found" >> /backup/recover.log
        continue
      fi
      curtime=`date +"%Y/%m/%d %H:%M:%S"`
      tar -zxf ${backDir}${f}.tar.gz -C ${oaDir}${f}
      echo "${curtime} ${f} done" >> /backup/recover.log
    done
else
  echo "Error: invalid input"
fi

批量备份数据到指定目录脚本

backup.sh 后期数据量增大可考虑调整为增量备份(指定备份目录)

#!/bin/bash

#---------------------------------------
# 备份oa数据到指定目录下
# author: SenSen 1050575278
# date: 2022/04/13
# todo 调整为增量备份(当前数据量有限,暂不处理)
# 注意:所有脚本需测试后方可使用!!!
#---------------------------------------

#所在目录
dir='/web/oa/'
dist='/bak_oa/'
#指定天开始备份
backDay=(06 14 21 28)
dayNum=`date +"%d"`
#单次备份的oa数量
perNum=10
day=`date +"%Y%m%d"`
dayFile='/backup/'${day}
#自动获取系统目录文件 仅可包含oa系统文件
sysDir=`ls /web/oa`
num=0
tmp=()

for i in "${backDay[@]}"
  do
    if [[ "${i}" == "${dayNum}" ]]; then

      if [ ! -f "${dayFile}" ]; then
        touch ${dayFile}
      fi

      #获取指定数量的未备份oa
      for f in ${sysDir}
        do
          #判断是否今日已执行备份
          if [ `grep -c ${f} ${dayFile}` -eq 0 ];then
            #记入到新数组
            tmp[${num}]=${f}
            ((num++))
            if [ ${num} -eq ${perNum} ]; then
              break
            fi
          fi
        done

      #执行备份
      for f in "${tmp[@]}"
        do
          curtime=`date +"%Y/%m/%d %H:%M:%S"`
          cd ${dir}${f}
          echo "${f}" >> ${dayFile}
          tar -zcf ${dist}/${f}.tar.gz public/uploads/attach public/uploads/seal_apply public/uploads/ueditor public/uploads/work .env
          echo "${curtime} ${f} done" >> /backup/site.log
        done
    fi
  done