Linux基线安全检测-服务器安全配置检测

LINUX基线安全检测-服务器安全配置检测

  • 前言
    • 各模块检测如下
      • 1、密码复杂度检测
      • 2、rsyslog服务是否启用检测
      • 3、禁止ROOT远程登录检测
      • 4、禁止空密码登录检测
      • 5、密码重用是否限制为5次检测
      • 6、是否设置密码失效时间检测
      • 7、密码修改最小间隔时间检测
      • 8、密码过期警告时间是否大于等于7天检测
      • 9、SSH访问是否受限制检测
      • 10、SSH LogLevel设置为INFO检测
      • 11、SSH的MaxAuthTries是否设置为小于等于6检测
      • 12、禁用ssh端口转发检测
      • 13、root是否为唯一的UID为0用户检测
      • 14、root用户默认组的GID是否为0检测
      • 15、SSH空闲超时间隔是否设置检测
      • 16、用户禁止使用高危命令检测
      • 17、普通用户禁止修改高危文件检测

前言

众所周知,服务器的安全配置是我们安全生产环境中很重要也是最为“硬性”的第一步;
譬如说,一个服务器创建好之后,它没有禁止空密码登录,那岂不是“人人都可以踩它两脚”,随便一个人都可以登录进去然后干一些“见不的人”的事情,因此,我们要打好第一枪,在第一步就要把一些小人卡在门外,在服务器创建好之后,立马进行安全配置检测,针对有问题的检测项进行修复处理;

以下则是我亲自编写测试上线使用的检测和修复脚本,如有不对的地方,欢迎大家留言,我会立马改正!!

各模块检测如下

1、密码复杂度检测

系统版本:
CentOS7/8
内容:
把minlen(密码最小长度)设置为8-32位,把minclass(至少包含小写字母、大写字母、数字、特殊字符等4类字符中等3类或4类)设置为3或4;
根据实际情况调整即可
检测方式:

!/usr/bin/env sh
echo "检测是否符合密码复杂度要求"
st1=`cat /etc/security/pwquality.conf | grep minlen| grep -v '#'`
st2=`cat /etc/security/pwquality.conf | grep minclass| grep -v '#'`
if [ -z "$st1" ] && [ -z "$st2" ]; then
echo "检测结果为:未设置密码复杂度"
elif [ `cat /etc/security/pwquality.conf | grep minlen| grep -v '#' |awk -F ' ' '{print $3}'` -gt 8 ] && [ `cat /etc/security/pwquality.conf | grep minclass| grep -v '#' |awk -F ' ' '{print $3}'` -gt 2 ]; then
echo "检测结果为:密码复杂度符合要求"
else
echo "检测结果为:密码复杂度不符合要求"
fi

2、rsyslog服务是否启用检测

系统版本:
CentOS7/8
内容:
确保rsyslog服务已启用,记录日志用于审计
检测方式:

#!/usr/bin/env sh
echo "检测rsyslog服务是否启用"
rsyslog="active(running)"
rsyslogstatus=`systemctl status rsyslog| grep Active | awk  '{print$2$3}' `
if [ "$rsyslogstatus" == "$rsyslog" ]; then
echo "检测结果为:rsyslog服务已启用"
else
echo "检测结果为:rsyslog服务未启用"
fi

3、禁止ROOT远程登录检测

系统版本:
CentOS 6/7/8
内容:
/etc/ssh/sshd_config文件中PermitRootLogin应设置为:no
检测方式:

#!/usr/bin/env sh
echo "检测是否禁止ROOT远程登录"
set -e
cfgfile='/etc/ssh/sshd_config'
if [ "`cat ${cfgfile} | grep -E '^PermitRootLogin' | awk '{print $1}'`" == "#PermitRootLogin" -o "`cat ${cfgfile} | grep '^PermitRootLogin'`" == "" -o "`cat ${cfgfile} | grep '^PermitRootLogin' | awk '{print $2}'`" == "yes" ]
then
echo "检测结果为:未禁止root远程登录"
exit 1
else
echo "检测结果为:已禁止root远程登录"
exit 0
fi

4、禁止空密码登录检测

系统版本:
CentOS 6/7/
内容:
/etc/ssh/sshd_config文件中PermitEmptyPasswords应设置为:no
检测方式:

#!/usr/bin/env sh
echo "检测是否禁止空密码登录"
set -e
cfgfile='/etc/ssh/sshd_config'
if [ "`cat ${cfgfile} | grep 'PermitEmptyPasswords' | awk '{print $1}'`" == "#PermitEmptyPasswords" -o "`cat ${cfgfile} | grep 'PermitEmptyPasswords'`" == "" -o "`cat ${cfgfile} | grep 'PermitEmptyPasswords' | awk '{print $2}'`" == "yes" ]
then
echo "检测结果为:未禁止空密码登录"
exit 1
else
echo "检测结果为:已禁止空密码登录"
exit 0
fi

5、密码重用是否限制为5次检测

系统版本:
CentOS 6/7/
内容:

  1. password sufficient pam_unix.so: 这部分指定了当用户尝试更改密码时,应使用pam_unix.so模块来验证新密码。sufficient意味着如果这个模块成功验证了密码,那么密码更改操作就成功,不需要继续检查其他PAM模块。
  2. remember=5: 这个参数指定了密码策略应检查新密码与过去5次使用的密码是否重复。如果新密码与这5次中的任何一次重复,该策略将拒绝更改密码。
  3. 根据实际情况调整即可
    检测方式:
#!/usr/bin/env sh
echo "检测密码重用是否限制为5次"
set -e
Authcfg='/etc/pam.d/password-auth /etc/pam.d/system-auth'
for filename in ${Authcfg}
do
if [ -z "`grep -E 'password' ${filename} | grep 'sufficient' | grep remember=5 | grep pam_unix.so`" ]
then
echo "检测结果为:检测密码重用未限制为5次"
exit 1
else
echo "检测结果为:检测密码重用已限制为5次"
exit 0
fi
done

6、是否设置密码失效时间检测

系统版本:
CentOS 7/8
内容:
/etc/login.defs 中将 PASS_MAX_DAYS 参数设置为 60-180之间;
根据实际情况调整即可
检测方式:

#!/usr/bin/env sh
echo "检测是否设置密码失效时间"
pass_max_days=`cat /etc/login.defs | grep PASS_MAX_DAYS | grep -v '#'`
if [ -z "$pass_max_days" ]; then
echo "检测结果为:未设置密码失效时间"
elif [ `cat /etc/login.defs | grep PASS_MAX_DAYS | grep -v '#'| awk '{print $2}'` -gt 180 ] || [ `cat /etc/login.defs | grep PASS_MAX_DAYS | grep -v '#'| awk '{print $2}'` -lt 60 ]; then
echo "检测结果为:设置密码失效时间不在60-180天范围内"
else
echo "检测结果为:设置密码失效时间在60-180天范围内"
fi

7、密码修改最小间隔时间检测

系统版本:
CentOS 7/8
内容:
在 /etc/login.defs 中将 PASS_MIN_DAYS 参数设置为7-14之间,建议为7:
根据实际情况调整即可
检测方式:

#!/usr/bin/env sh
echo "检测是否设置修改密码最小间隔时间"
pass_min_days=`cat /etc/login.defs | grep PASS_MIN_DAYS | grep -v '#'`
if [ -z "$pass_min_days" ]; then
echo "检测结果为:未设置修改密码最小间隔时间"
elif [ `cat /etc/login.defs | grep PASS_MIN_DAYS | grep -v '#'| awk '{print $2}'` -gt 14 ] || [ `cat /etc/login.defs | grep PASS_MAX_DAYS | grep -v '#'| awk '{print $2}'` -lt 7 ]; then
echo "检测结果为:设置修改密码最小间隔时间不在7-14天范围内"
else
echo "检测结果为:设置修改密码最小间隔时间在7-14天范围内"
fi

8、密码过期警告时间是否大于等于7天检测

系统版本:
CentOS 7/8
内容:
密码过期警告时间应:大于等于7天;
根据实际情况调整即可
检测方式:

#!/usr/bin/env sh
echo "检测密码过期告警时间是否大于等于7天"
set -e
cfgfile='/etc/login.defs'if [ `grep -E '^PASS_WARN_AGE' ${cfgfile} | awk '{print $2}'` -ge 7 ]
then
echo "检测结果为:密码过期告警时间已设置大于等于7天"
exit 0
else
echo "检测结果为:密码过期告警时间未设置大于等于7天"
exit 1
fi

9、SSH访问是否受限制检测

系统版本:
CentOS 6/7/8
内容:
/etc/ssh/sshd_config文件中应存以下其中之一:
AllowUsers <userlist>
AllowGroups <grouplist>
DenyUsers <userlist>
DenyGroups <grouplist>
检测方式:

#!/usr/bin/env sh
echo "检测SSH访问是否受限制"
set -e  ##返回任何非0状态即退出脚本执行
sshd_config='/etc/ssh/sshd_config'
sshstatus=`ps -ef | grep sshd | grep -v grep | awk -F ' ' '{print $8$9}'`
if [ -z "$sshstatus" ]
then
echo "检测结果为:未开启ssh服务"
exit 2
fi
if [ -z "`grep -E '^AllowUsers|^AllowGroups|^DenyUsers|^DenyGroups' ${sshd_config}`" ]
then
echo "检测结果为:SSH访问未受限制"
exit 1
else
echo "检测结果为:SSH访问已受限制"
exit 0
fi

10、SSH LogLevel设置为INFO检测

系统版本:
CentOS 6/7/8
内容:
开启日志info日志格式可以记录很多的日志信息以便回溯,比如登录操作告警失败等信息
检测方式:

/usr/bin/env sh
echo "检测SSH LogLevel设置是否为INFO"
sshd_config='/etc/ssh/sshd_config'
log_level=`cat $sshd_config | grep "LogLevel"| grep -v '#'`
if [ -z "$log_level" ]; then
echo "检测结果为:SSH LogLevel设置为INFO"
elif [ "`cat $sshd_config | grep "LogLevel"| grep -v '#' | awk '{print $2}'`" == "INFO" ]; then
echo "检测结果为:SSH LogLevel设置为INFO"
else
echo "检测结果为:SSH LogLevel设置为$log_level"
fi

11、SSH的MaxAuthTries是否设置为小于等于6检测

系统版本:
CentOS 6/7/8
内容:
用于指定SSH服务器允许客户端进行身份验证尝试的最大次数
根据实际情况调整即可
检测方式:

#!/usr/bin/env sh
echo "检测SSH的MaxAuthTries是否设置为小于等于4"
set -e
cfg='/etc/ssh/sshd_config'
cfgstatus1=`cat $cfg | grep MaxAuthTries | grep -v '#'| awk -F ' ' '{print$1}'`
if [ -z "$cfgstatus1" ]
then
echo "检测结果为:未设置此参数"
elif [ `cat $cfg | grep MaxAuthTries | grep -v '#'| awk -F ' ' '{print$2}'` -le 6 ]
then
echo "检测结果为:已设置为小于等于6"
else
echo "检测结果为:未设置为小于等于6"
fi

12、禁用ssh端口转发检测

系统版本:
CentOS 6/7/8
内容:
GatewayPorts 设置no或者注释掉
检测方式:

#!/usr/bin/env sh
echo "检测是否禁用ssh端口转发功能"
result=`cat /etc/ssh/sshd_config | grep GatewayPorts | grep -v '#' | awk -F ' ' '{print$NF}'`if [ "$result" == "no" ] | [ -z  "$result" ];thenecho "检测结果为:已禁用ssh端口转发"
elseecho "检测结果为:已启用ssh端口转发"
fi

13、root是否为唯一的UID为0用户检测

系统版本:
CentOS 6/7/8
内容:
root应为唯一的UID为0用户
检测方式:

#!/usr/bin/env sh
echo "检测ROOT是否UID为0的唯一用户"
set -e
cfgfile='/etc/passwd'
if [ `cat passwd | awk -F ':' '$3 == 0{print $1}'|wc -l` -eq 1 -a "`cat passwd | awk -F ':' '$3 == 0{print $1}'`" == "root" ]
then
echo "检测结果为:root是uid为0的唯一用户"
exit 0
else
echo "检测结果为:root不是uid为0的唯一用户"
exit 1
fi

14、root用户默认组的GID是否为0检测

系统版本:
CentOS 6/7/8
内容:
root应为唯一的GID为0用户
检测方式:

#!/usr/bin/env sh
echo "检测ROOT是否GID为0的唯一用户"
set -e
cfgfile='/etc/passwd'
root_gid=`cat ${cfgfile}|grep -E ^root | awk -F ':' '{print $4}'`
if [ ${root_gid} -eq 0 ]
then
echo "检测结果为:root是gid为0的唯一用户"
exit 0
else
echo "检测结果为:root不是gid为0的唯一用户"
exit 1
fi

15、SSH空闲超时间隔是否设置检测

系统版本:
CentOS 6/7/8
内容:
/etc/ssh/sshd_config文件中
ClientAliveInterval应设置为:等于18000
ClientAliveCountMax应设置为:等于2
根据实际情况调整即可
检测方式:

#!/usr/bin/env sh
echo "SSH空闲超时间隔是否设置"
set -e
cfgfile='/etc/ssh/sshd_config'
ClientAliveInterval_key=`cat ${cfgfile} | grep ClientAliveInterval | awk '{print $1}'`
ClientAliveInterval_value=`cat ${cfgfile} | grep ClientAliveInterval | awk '{print $2}'`
ClientAliveCountMax_key=`cat ${cfgfile} | grep ClientAliveCountMax | awk '{print $1}'`
ClientAliveCountMax_value=`cat ${cfgfile} | grep ClientAliveCountMax | awk '{print $2}'`
if [ "${ClientAliveInterval_key}" == "" -o "${ClientAliveInterval_key}" == "#ClientAliveInterval" -o "${ClientAliveCountMax_key}" == "" -o "${ClientAliveCountMax_key}" == "#ClientAliveCountMax" ]
then
echo "检测结果为:未设置最大空闲时间"
exit 1
else
if [ ${ClientAliveInterval_value} -eq 18000 -a ${ClientAliveCountMax_value} -eq 2 ]
then
echo "检测结果为:最大空闲时间已设置为18000秒(5小时)X2=36000秒(10小时)"
exit 0
else
echo "检测结果为:最大空闲时间未设置为18000秒(5小时)X2=36000秒(10小时)"
exit 1
fi
fi

16、用户禁止使用高危命令检测

系统版本:
CentOS 6/7/8
内容:
/usr/bin/yum 权限为700
/usr/bin/rpm权限为700
/usr/bin/rz权限为700
/usr/bin/sz权限为700
/usr/bin/scp权限为700
根据实际情况调整即可
检测方式:

#!/bin/bash  
echo "检测是否禁止普通用户执行高危命令"  
#file1="/usr/bin/rz" 禁止普通用户上传
file2="/usr/bin/sz"  ##禁止普通用户下载(办公网与运维网场景不一样可能需要开放)
file4="/usr/bin/yum" ##禁止普通用户执行
file5="/usr/bin/rpm" ##禁止普通用户执行
permission="700"  # 替换为你期望的权限值,此值为仅支持root用户执行  
if [[ -f "$file1" && "$(stat -c '%a' "$file1")" == "$permission" ]]; then  echo "检测结果为:已禁止普通用户执行rz命令"
elseecho "检测结果为:未禁止普通用户执行rz命令"    
fi  if [[ -f "$file2" && "$(stat -c '%a' "$file2")" == "$permission" ]]; then  echo "检测结果为:已禁止普通用户执行sz命令"
elseecho "检测结果为:未禁止普通用户执行sz命令"    fi  if [[ -f "$file3" && "$(stat -c '%a' "$file3")" == "$permission" ]]; then  echo "检测结果为:已禁止普通用户执行scp命令"
elseecho "检测结果为:未禁止普通用户执行scp命令"     
fi  if [[ -f "$file4" && "$(stat -c '%a' "$file4")" == "$permission" ]]; then  echo "检测结果为:已禁止普通用户执行yum命令"
elseecho "检测结果为:未禁止普通用户执行yum命令"    
fiif [[ -f "$file5" && "$(stat -c '%a' "$file5")" == "$permission" ]]; then  echo "检测结果为:已禁止普通用户执行rpm命令"
elseecho "检测结果为:未禁止普通用户执行rpm命令"      fi

17、普通用户禁止修改高危文件检测

系统版本:
CentOS 6/7/8
内容:
/etc/passwd权限为644
/etc/group权限为644
/etc/shadow权限为400
/etc/gshadow权限为400
/etc/hosts.deny权限为644
/etc/hosts.allow权限为644
根据实际情况调整即可
检测方式:

#!/usr/bin/env sh
echo "检测是否禁用普通用户修改高危文件"
file1="/etc/passwd" ##禁止普通用户更改
file2="/etc/shadow" ##禁止普通用户查看
file3="/etc/group" ##禁止普通用户更改
file4="/etc/gshadow" ##禁止普通用户查看
file5="/etc/hosts.deny" ##禁止普通用户更改
file6="/etc/hosts.allow" ##禁止普通用户更改
permission1="644"  # 替换为你期望的权限值,此值为仅支持root用户更改  
permission2="400"  # 替换为你期望的权限值,即只有root用户可查看
if [[ -f "$file1" && "$(stat -c '%a' "$file1")" == "$permission1" ]]; then  echo "检测结果为:已禁止普通用户更改passwd文件"
elseecho "检测结果为:未禁止普通用户更改passwd文件"    
fi  
if [[ -f "$file3" && "$(stat -c '%a' "$file3")" == "$permission1" ]]; then  echo "检测结果为:已禁止普通用户更改group文件"
elseecho "检测结果为:未禁止普通用户更改group文件"    
fi  if [[ -f "$file2" && "$(stat -c '%a' "$file2")" == "$permission2" ]]; then  echo "检测结果为:已禁止普通用户读取shadow文件"
elseecho "检测结果为:未禁止普通用户读取shadow文件"    fi
if [[ -f "$file4" && "$(stat -c '%a' "$file4")" == "$permission2" ]]; then  echo "检测结果为:已禁止普通用户读取gshadow文件"
elseecho "检测结果为:未禁止普通用户读取gshadow文件"    
fi  
if [[ -f "$file5" && "$(stat -c '%a' "$file5")" == "$permission2" ]]; then  echo "检测结果为:已禁止普通用户更改hosts.deny文件"
elseecho "检测结果为:未禁止普通用户更改hosts.deny文件"    
fi  
if [[ -f "$file6" && "$(stat -c '%a' "$file6")" == "$permission2" ]]; then  echo "检测结果为:已禁止普通用户更改hosts.allow文件"
elseecho "检测结果为:未禁止普通用户更改hosts.allow文件"    
fi  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/742906.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

洛谷P6866 [COCI2019-2020#5] Emacs

题目描述 给定一个 nm 的只含有 . 和 * 的矩阵。 矩阵中 * 形成一些不重叠的长方形。它们不在边缘或顶点接触。 求长方形有多少个? 输入格式 第一行:两个正整数 n 和 m。 以下 n 行:表示题目描述中的矩阵。矩阵只含有 . 和 *。 输出格…

22.3 分布式

22.3 分布式 1. 分布式2. 分布式作用3. 分布式与单体结构对比4. CAP定理4.1 CAP理论4.2 P:分区容错4.3 C:一致性4.4 A:可用性4.5 CAP如何选择5. 集群、分布式、微服务区别5.1 集群、分布式区别5.2 集群、微服务区别5.3 分布式、微服务区别************************************…

12、Linux-Shell01:变量、字符串和数组、注释

目录 一、基础知识 二、变量 1、定义变量 2、使用变量 3、只读变量 4、删除变量 三、字符串和数组 1、字符串 ①单引号和双引号的区别 ②# ③切片 2、数组 四、注释 1、单行注释 2、多行注释 一、基础知识 Linux的Shell有很多种,这里讨论的是Bash。 …

npm run build小技巧

在config/index.js中设置build.index与build.assetsRoot,这样之后在每次npm run build后会将编译后文件放在指定的路径下。 场景: 1、如果你本地有nginx服务,可将对应两个路径设置到nginx的html路径下,实现每次编译后即可生效的效果。 举例&…

OPENCV(0-1之0.2)

OPENCV-0.2 学习安排图像基础像素访问和修改像素值 色彩空间转换RGB到灰度的转换RGB到HSV的转换 图像操作裁剪缩放旋转和翻转 图像滤波平滑和模糊图像边缘检测 图像变换仿射变换透视变换 总结 官方文档 学习安排 图像基础 像素:了解像素的概念,包括像素…

Linux发展史目录结构Vim编辑器

Linux入门 一、Linux的发展史二、Linux的目录结构2.1 Linux系统中一切皆文件2.2 Linux中几个重要的目录 三、VIM编辑器3.1 用户名主机名 /xxx的含义3.2 一般模式3.3 编辑模式和指令模式3.4 三种模式之间的转换 一、Linux的发展史 上面俩兄弟用C语言写出了Unix操作系统(右边那个…

F5是什么意思?从BIG-IP Next核心价值了解F5

在日益变化的威胁环境中,企业必须配备兼具强大适应性和自动化特性的应用安全解决方案,这些解决方案不仅要易于使用,同时还需要具备全面的安全防御能力。当我们将目光聚焦于安全领域相关的产品,可以发现F5推出的产品不仅直观易用&a…

Unity WebGL ios 跳转URL

需求: WebGL跳转网址 现象: Application.OpenURL("https://www.baidu.com"); 这个函数在安卓上可以用,IOS 不管用 解决方案: 编写js插件,unity调用js函数,由js跳转网址 注意事项 : 插件后缀为.jsli…

springBean的三种实例化

spring容器创建javaBean的实例,有三种方式。 分别是通过构造方法、 静态工程方法、 实例工厂方法。 前言: 1.构造方法实例化方式: 我的理解: 通过bean标签结合property调用set方法;通过bean标签结合constructor-arg调用构造方法…

yolov5模型压缩-torch_pruning

参考论文:DepGraph: Towards Any Structural Pruning(https://arxiv.org/abs/2301.12900) 主要原理:物理的移除参数,并自动找出层与层以及层之间的依赖,完成模型的自动裁剪 模型压缩效果:yolov5剪枝流程如下: pip install torch_pruning 新建prune.py: import torch_…

Java项目:50 ssm010基于ssm的新能源汽车在线租赁管理系统+vue

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 管理员;首页、个人中心、用户管理,站点管理员管理、汽车信息管理,借车信息管理,我的收藏管理、系统管理…

走进网络世界 了解一些基础知识

走进网络 1.认识计算机 1.计算机网络是由计算机和通讯构成的,网络研究的是“通信”。 ------1946 世界上第一台计算机 2.终端:只有输入和输出功能,没有计算和处理功能。3.数据:一串数字(二进制数)&#x…

cesiumlab中shp转3dtiles白模效果一

安装cesiumlab 如果没有安装cesiumlab,去官网下载安装一个即可 http://www.cesiumlab.com/cesiumlab.html 效果 步骤 1、准备shp面数据 2、打开cesiumlab软件转换 选择shp面数据 设置高度,如果shp面中有高度字段,可以用高度字段&#xff…

基于Springboot的集团门户网站(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的集团门户网站(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&…

(C语言)球球大作战

前言: 这款简易版的球球大作战是一款单人游戏,玩家需要控制一个小球在地图上移动,吞噬其他小球来增大自己的体积。本游戏使用C语言和easyx图形库编写,旨在帮助初学者了解游戏开发的基本概念和技巧。 在开始编写代码之前&#xf…

基于FPGA的图像锐化算法(USM)设计

免费获取源码请关注微信号《FPGA学习笔记册》! 1.图像锐化算法说明 图像锐化算法在实际的图像处理应用很广泛,例如:医学成像、工业检测和军事领域等;它的作用就是将模糊的图像变的更加清晰。常用的图像锐化算法有拉普拉斯算子、s…

算法--每日一练

1.数字A除本身以外的因数之和为数字B,B除本身之外的因数之和为A,这样的数对称为相亲数,例如:220的真因数之和为1245101120224455110284,284的真因数之和为 12471142220,请找出2到10000之间所有的相亲数。 …

C#面:简单介绍枚举

枚举(Enumeration) 枚举类型 是由基础整型数值类型的一组命名常量定义的值类型。(这个拗口的表述来自官方文档) 翻译成人话: 枚举是值类型。枚举的成员是常量默认情况下,枚举成员的关联常数值为类型 int…

linux上MySQL的安装

(1)解压安装包 tar -xzvf mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz mv mysql-5.7.33-linux-glibc2.12-x86_64 /usr/local/mysql(2)创建数据目录 [roothecs-161929 3306]# mkdir -p /data/mysql/3306/data [roothecs-161929 3306]# mkdir -p /data/mysql/3306/binlog [roo…

react框架中无构建模式直接使用es6组件

react框架,看到的总是使用es5,通过webpack编译构建。react官方,直到现在的v18.1.0版本中,只有cjs和umd版本,都没有esm(es6)版本,看起来是对es6的不认可? 但是&#xff0…