分类 运维 下的文章

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

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

【服务器相关】
系统为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 例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。

- 阅读剩余部分 -

线上服务器硬盘安装LVM

LVM安装及使用:https://www.r1989.com/linux-1222.html

线上服务器硬盘由标准分区转为LVM

  1. 使用宝塔备份数据库
  2. 停止nginx mysql php
  3. mkdir /{web_bak,mysql_bak,backup_bak}
  4. 转移/web目录文件到/web_bak;转移/mysql目录到/mysql_bak;转移/backup目录到/backup_bak
  5. 执行转移命令:

    rsync -avzh /mysql/* /mysql_bak/
    rsync -avzh /backup/* /backup_bak/

    rsync -avzh /web/shell /web_bak/
    rsync -avzh /web/source /web_bak/
    rsync -avzh /web/upgrade /web_bak/
    rsync -avzh /web/www /web_bak/

    建议同时进行4个拷贝:
    rsync -avzh /web/oa/t0* /web_bak/oa/
    ......

LVM安装流程:

  1. 安装lvm并将vdc转为逻辑分区

    yum install lvm2
    lsblk
    vim /etc/fstab 注释vdc硬盘挂载

  2. 检查三个分区数据是否均已转换完成
  3. 卸载

    umount /backup
    umount /mysql
    umount /web

  4. 转lvm

    fdisk /dev/vdc
    [n -> p -> ...] t -> {1,2,3} -> 8e ->w
    fdisk -lu

    pvcreate /dev/vdc{1,2,3}

    vgcreate lv /dev/vdc1 默认PE为4M( -s 32M lvm1默认lv最多只能包含65536个PE,最大支持256G;lvm2不再限制PE数量)
    vgextend lv /dev/vdc2
    vgextend lv /dev/vdc3

    lvcreate -L 80G -n mysql lv
    lvcreate -L 20G -n backup lv
    vgdisplay
    lvcreate -l 100%FREE -n web lv

    mkfs -t ext4 /dev/lv/backup
    mkfs -t ext4 /dev/lv/mysql
    mkfs -t ext4 /dev/lv/web

    ;resize2fs /dev/lv/backup
    ;resize2fs /dev/lv/mysql
    ;resize2fs /dev/lv/web

    ;mount /dev/lv/backup /backup
    ;mount /dev/lv/mysql /mysql
    ;mount /dev/lv/web /web

    vim /etc/fstab
    /dev/lv/mysql /mysql ext4 defaults 0 0
    /dev/lv/backup /backup ext4 defaults 0 0
    /dev/lv/web /web ext4 defaults 0 0

    mount -a

  5. 数据还原

    rsync -avzh /backup_bak/* /backup/
    rsync -avzh /mysql_bak/* /mysql/

    rsync -avzh /web_bak/shell /web/
    rsync -avzh /web_bak/source /web/
    rsync -avzh /web_bak/upgrade /web/
    rsync -avzh /web_bak/www /web/

    具体依据实际情况转移:
    rsync -avzh /web_bak/oa/t0* /web/oa/
    ......


转移100个系统用时:约40分钟

测试backup分区
`lvreduce -L -4G -r /dev/lv/backup`
`lvextend -L +4G -r /dev/lv/backup`

  1. 检查数据是否完整转移
  2. reboot
  3. 启动各服务

php编译安装oci8 pdo_oci扩展

系统环境:centos7.8 + php7.4 + thinkphp6 + oracle 11g

注意:使用独立下载的扩展容易引起部分错误信息,不建议使用。推荐使用对应php版本中的ext扩展直接编译安装。

【安装oracle客户端】
下载地址
https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html

- 阅读剩余部分 -

脚本批量更新文件(即批量文件覆盖)

upgrade.sh
脚本功能:可对多个系统批量覆盖代码(可排除指定系统)需修改对应的目录变量。将zip升级包放置到指定目录中,通过定时任务完成更新。单次只能升级一个版本,不支持数据库升级,仅为文件覆盖功能。

#!/bin/bash

#---------------------------------------
# 批量更新多文件夹内容 支持排除指定目录
# 注:多系统升级时,为避免文件冲突,建议
# 单次单压缩包更新
# author: SenSen 1050575278
# date: 2021/09/10
# 注意:所有脚本需测试后方可使用!!!
#---------------------------------------

#添加定时任务 10min
# */10 * * * * /www/upgrade/upgrade.sh

#记录日志
log="/web/upgrade/upgrade.log"

#进入升级包所在目录 升级包必须包含version.txt文件
cd /web/upgrade/fix

#判断目录中是否有文件 原则上一次只能存在一个文件,避免多个升级包导致混乱
count=`ls -l|grep '^-'|wc -l`

#获取所有系统 废弃
# source ./wlt_dir.sh

#所在目录
baseDir='/web/oa/'

#自动获取系统目录文件 仅可包含oa系统文件
sysDir=`ls /web/oa`

#排除目录
excluded=()

#测试示例
#sysDir=('wlt_3163')

#获取当前目录下的升级包
fixFile=`ls`

if [ $count -ne 0 ]; then
  for i in ${fixFile}
    do
      #获取当前时间
      curtime=`date +"%Y/%m/%d %H:%M:%S"`

      for f in ${sysDir}
        do
          #排除指定目录
          if [[ ${excluded[@]/${f}/} != ${excluded[@]} ]]; then
            continue
          fi
          echo "系统:${f} 升级文件:${i}">>${log}
          #解压到对应系统目录
          unzip -oq ${i} -d ${baseDir}${f}
          echo "${curtime} ${i} done">>${log}
        done
    done
    #移动升级包
    mv ${i} /web/upgrade/bak;
    echo "${i} upgrade successfully">>$log
else
    echo "upgrade_fix is empty"
fi

使用gitolite搭建git服务器并自定义仓库目录

官网:https://gitolite.com/gitolite/index.html

安装:
su - git
mkdir -p ~/bin
git clone https://github.com/sitaramc/gitolite
gitolite/install -ln ~/bin # please use absolute path here
gitolite setup -pk yourname.pub

其中yourname.pub为管理员git公钥。git 跟 gitolite 服务器通信用的是 git 这个真正的系统用户,而 gitolite 控制仓库权限则是使用自己的虚拟用户。这里的 yourname 就是虚拟用户。

gitolite提供了一个 gitolite-shell。当你使用 ssh 访问 gitolite 时 ssh 服务会启动 gitolite-shell。这个脚本会检查当前用户是否有权限访问对应的仓库。如果用户通过 git push 修改了仓库内容,则会触发 gitolite 预先配置 git hook,这些 hook 会执行创建仓库、添加用户之类的操作。

下载主仓库:
git clone git@yourhost:gitolite-admin.git

通过对主仓库配置及公钥进行管理即可。

Gitolite自定义仓库目录
home/git/.gitolite.rc文件新增以下代码,并重新安装一次即可。

#sensen
GL_REPO_BASE    => "/diskb/git/repositories",


Nginx或Apache通过反向代理配置wss服务

为不影响网站正常业务,使用 xx.com/wss 作为代理入口,即客户端连接地址为:wss://xx.com/wss

nginx配置:

server {
  listen 443;
 
  ssl on;
  ssl_certificate /etc/ssl/server.pem;
  ssl_certificate_key /etc/ssl/server.key;
  ssl_session_timeout 5m;
  ssl_session_cache shared:SSL:50m;
  ssl_protocols SSLv3 SSLv2 TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
 
  location /wss
  {
    proxy_pass http://127.0.0.1:2345;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header X-Real-IP $remote_addr;
  }
  
  # location / {} 站点的其它配置...
}

apache配置:
需开启proxy_wstunnel_module模块
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

#extra/httpd-ssl.conf
DocumentRoot "/网站/目录"
ServerName 域名
 
# Proxy Config
SSLProxyEngine on
 
ProxyRequests Off
ProxyPass /wss ws://127.0.0.1:2345
ProxyPassReverse /wss ws://127.0.0.1:2345
 
# 添加 SSL 协议支持协议,去掉不安全的协议
SSLProtocol all -SSLv2 -SSLv3
# 修改加密套件如下
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on
# 证书公钥配置
SSLCertificateFile /server/httpd/cert/your.pem
# 证书私钥配置
SSLCertificateKeyFile /server/httpd/cert/your.key
# 证书链配置,
SSLCertificateChainFile /server/httpd/cert/chain.pem