项目安全等保测评加固手册

打印 上一主题 下一主题

主题 821|帖子 821|积分 2463


文章目录



  • 前言
  • 一、服务器侧等保测评项目及加固
    1. * 1、服务器未启用密码长度以及口令复杂度、且未定期更新口令
    复制代码

    • 2、服务器未限制非法登录次数,未设置登录连接超时自动退出
    • 3、服务器只采用暗码技术对用户的身份举行辨别,未采用双因子认证;服务器未限制管理终端登录
    • 4、Rc3.d文件权限过大755
    • 5、未有第三方审计体系,未对审计记录举行定期备份
    • 6、服务器未安装杀毒

  • 二、MySql数据库等保加固
    1. * 1、采用用户名+口令进行身份鉴别,未启用口令复杂度策略,未定期更换口令
    复制代码

    • 2、未启用登录失败处理功能,未有登录连接超时退出策略
    • 3、采用用户名+口令验证码举行身份辨别,未实现使用两种或两种以上组合辨别技术举行身份辨别,未实现双因子登录;未对接入方式或网络地址范围举行限制且网络不可控
    • 4、未实现管理用户的最小权限分离
    • 5、未有加密技术保证数据在传输过程中的完整性;
    • 6、未定期举行数据备份恢复测试功能

  • 三、中央件版本过低产生的各种漏洞
    1. * 1、nginx漏洞示例及修复
    复制代码
  • 四、Harbor 访问控制错误漏洞
  • 五、Swagger API 未授权访问漏洞
  • 六、服务器常见安全加固脚本分享
  • 总结

前言

安全等级测评的目的是通过对目标体系在安全技术及管理方面的测评,对目标体系的安全技术状态及安全管理状况做出初步判定,给出目标体系在安全技术及安全管理方面与其相应安全等级掩护要求之间的差距。测评结论作为委托方进一步完满体系安全策略及安全技术防护措施依据

一、服务器侧等保测评项目及加固

1、服务器未启用暗码长度以及口令复杂度、且未定期更新口令

  1.         整改建议:
  2.                 建议修改密码长度、口令复杂度以及定期90天更换口令。
  3.                
  4.         整改方法:
  5.                 logindefs(){
  6.                   echo "---口令生存期---"
  7.                   cp -p /etc/login.defs /etc/login.defs_bak
  8.                   sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/g' /etc/login.defs
  9.                   sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS 10/g' /etc/login.defs
  10.                   sed -i 's/^PASS_WARN_AGE.*/PASS_WARN_AGE 7/g' /etc/login.defs
  11.                 }
  12.                 system_auth_crack(){
  13.                   echo "---口令复杂度及密码长度---"
  14.                   # 判断 system-auth 配置文件中是否包含 password requisite pam_cracklib.so 的配置
  15.                   if grep -q 'password requisite pam_cracklib.so' /etc/pam.d/system-auth; then
  16.                   # 如果有,则使用 sed 命令替换原有的行
  17.                         sed -i 's/^password.*requisite.*pam_cracklib.so$/& try_first_pass retry=3 dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 minlen=8/g' /etc/pam.d/system-auth
  18.                   else
  19.                     # 如果没有,则添加新的一行
  20.                        echo "password requisite  pam_cracklib.so try_first_pass retry=3 dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 minlen=8" >> /etc/pam.d/system-auth
  21.                   fi
  22.                 }
复制代码
2、服务器未限制非法登录次数,未设置登录连接超时自动退出

  1.         整改建议:
  2.                 建议限制非法登录次数;设置登录连接超时自动退出,如:连续登录3次锁定10分钟,并无操作10分钟自动退出。
  3.        
  4.         整改方法:
  5.                 login_timeout(){
  6.                           # 检查 /etc/profile 文件是否存在
  7.                         if [ ! -f /etc/profile ]; then
  8.                           echo "/etc/profile 文件不存在"
  9.                           exit 1
  10.                         fi
  11.                        
  12.                         # 使用 sed 命令检查文件末尾是否已经存在所需的两行内容,不存在则添加
  13.                         if ! grep -q '^TMOUT=' /etc/profile; then
  14.                           echo 'TMOUT=300' >> /etc/profile
  15.                         else
  16.                           sed -i 's/^TMOUT=.*/TMOUT=300/' /etc/profile
  17.                         fi
  18.                        
  19.                         if ! grep -q '^export TMOUT' /etc/profile; then
  20.                           echo 'export TMOUT' >> /etc/profile
  21.                         fi
  22.         }
复制代码
3、服务器只采用暗码技术对用户的身份举行辨别,未采用双因子认证;服务器未限制管理终端登录

  1.         整改建议:
  2.                 服务器只采用密码技术对用户的身份进行鉴别,未采用双因子认证。
  3.                 因为维护的项目都是通过vpn(短信验证)-->堡垒机(短信验证)-->登录服务器,最后沟通这项可以按如下修复。即服务器配置ssh白名单,只允许堡垒机登录
  4.        
  5.         整改方法:
  6.                 vim /etc/hosts.deny #添加以下配置
  7.                 sshd:all:deny
  8.                 vim /etc/hosts.allow #添加以下配置
  9.                 sshd:堡垒机IP:allow
复制代码
4、Rc3.d文件权限过大755

  1.         整改建议:
  2.                 建议修改rc3.d的读写权限为755以下
  3.        
  4.         整改方法:
  5.                 chmod 644  -R /etc/rc.d/rc3.d
复制代码
5、未有第三方审计体系,未对审计记录举行定期备份

  1.         整改建议:
  2.                 未有第三方审计系统,未对审计记录进行定期备份;
  3.         整改方法:
  4.                 1、服务器开启audit服务
  5.                 2、使用aidutctl -l命令查看审计策略
  6.                 3、使用auditctl -w 路径/文件 -p 权限 命令对文件或目录配置审计策略
  7.                    补充: 使用auditctl -W 路径/文件 -p 权限 命令是取消审计策略
  8.                 4、使用ausearch -f 配置的路径/文件  查看对应的审计日志
  9.                 5、使用AuditLogSync.py脚本+ip_address.txt文件实现将全部服务器的audit.log日志备份并同步到日志归档服务器。脚本如下所示
  10.                 6、在日志归档服务器配置定时同步,即可
  11.                         [root@LogArchive]# crontab -e
  12.                                 * */23 * * *  /usr/bin/python3 -W ignore /path/AuditLogSync.py
  13.     #!/usr/bin/env python3
  14.         #Date: 202403212005
  15.         import os
  16.         import time
  17.         import paramiko
  18.         import logging
  19.         from datetime import datetime
  20.         import threading
  21.         import inspect
  22.        
  23.        
  24.         class AuditLogSync:
  25.             def __init__(self, ip_file,audit_path,username,password,port):
  26.                 """
  27.                 初始化AuditLogSync类
  28.        
  29.                 Parameters:
  30.                 ip_file (str): 包含IP地址列表的文件路径
  31.                 audit_path (str): 审计日志路径
  32.                 username (str): 用户名
  33.                 password (str): 密码
  34.                 port    (int):  端口
  35.                 """
  36.                 self.ip_file = ip_file
  37.                 self.audit_path=audit_path
  38.                 self.username = username
  39.                 self.password = password
  40.                 self.port = port
  41.                 #生成日期
  42.                 self.current_time = datetime.now().strftime("%Y%m%d")
  43.                 #生成审计日志归档目录
  44.                 self.export_dir = f"/export/AuditLogSync/{self.current_time}"
  45.                 #生成执行日志
  46.                 self.info_log_file = "/export/AuditLogSync/sync_info.log"
  47.                 self.error_log_file = "/export/AuditLogSync/sync_error.log"
  48.                  # 设置 info 日志记录器
  49.                 self.info_logger = logging.getLogger('info_logger')
  50.                 info_handler = logging.FileHandler(self.info_log_file)
  51.                 info_handler.setLevel(logging.INFO)
  52.                 info_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
  53.                 info_handler.setFormatter(info_formatter)
  54.                 self.info_logger.addHandler(info_handler)
  55.                 self.info_logger.setLevel(logging.INFO)
  56.                 # 设置 error 日志记录器
  57.                 self.error_logger = logging.getLogger('error_logger')
  58.                 error_handler = logging.FileHandler(self.error_log_file)
  59.                 error_handler.setLevel(logging.ERROR)
  60.                 error_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
  61.                 error_handler.setFormatter(error_formatter)
  62.                 self.error_logger.addHandler(error_handler)
  63.                 #判断审计日志归档目录是否存在
  64.                 if not os.path.exists(self.export_dir):
  65.                     os.makedirs(self.export_dir)
  66.             
  67.             def run_operations(self):
  68.                 """
  69.                 运行一系列操作:连接到服务器,打包日志文件,执行rsync同步
  70.                 """
  71.                 # 从文件中读取IP地址列表
  72.                 with open(self.ip_file, 'r') as file:
  73.                     ip_addresses = file.readlines()
  74.                 threads= []
  75.                 # 拿到ip地址调用连接服务器方法
  76.                 for ip_address in ip_addresses:
  77.                     ip_address = ip_address.strip()
  78.                     # 创建线程并启动,不采用多线程容易卡死
  79.                     thread = threading.Thread(target=self.process_server, args=(ip_address,))
  80.                     threads.append(thread)
  81.                     thread.start()
  82.                     #ssh_client = self.connect_to_server(ip_address)
  83.                     #判断服务器连接是否成功,如果成功调用打包审计日志方法、执行rsync同步方法,最后关闭连接
  84.                     #if ssh_client is not None:
  85.                     #    self.package_logs(ssh_client, ip_address)
  86.                     #    self.execute_rsync(ssh_client, ip_address)
  87.                     #    ssh_client.close()
  88.                 # 等待所有线程完成
  89.                 for thread in threads:
  90.                     thread.join()
  91.             def process_server(self, ip_address):
  92.                 """
  93.                 处理单个服务器的操作
  94.                 """
  95.                 ssh_client = self.connect_to_server(ip_address)
  96.                 #判断服务器连接是否成功,如果成功调用打包审计日志方法、执行rsync同步方法,最后关闭连接
  97.                 if ssh_client is not None:
  98.                     self.package_logs(ssh_client, ip_address)
  99.                     self.execute_rsync(ssh_client, ip_address)
  100.                     ssh_client.close()
  101.             def connect_to_server(self, ip_address):
  102.                 """
  103.                 建立SSH连接到远程服务器
  104.        
  105.                 Parameters:
  106.                 ip_address (str): 目标服务器的IP地址
  107.        
  108.                 Returns:
  109.                 paramiko.SSHClient: SSH客户端对象
  110.                 """
  111.                 ssh_client = paramiko.SSHClient()
  112.                 ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  113.        
  114.                 try:
  115.                     ssh_client.connect(ip_address, username=self.username, password=self.password, port=self.port,timeout=20)
  116.                     self.info_logger.info(f"成功连接到服务器 {ip_address} - {inspect.currentframe().f_code.co_name}")
  117.                 except paramiko.ssh_exception.AuthenticationException:
  118.                     self.error_logger.error(f"连接服务器失败 {ip_address}. 请检查服务器信息是否正确 - {inspect.currentframe().f_code.co_name}")
  119.                     return None
  120.        
  121.                 return ssh_client
  122.        
  123.             def package_logs(self, ssh_client, ip_address):
  124.                 """
  125.                 打包远程服务器上的日志文件
  126.        
  127.                 Parameters:
  128.                 ssh_client (paramiko.SSHClient): SSH客户端对象
  129.                 ip_address (str): 目标服务器的IP地址
  130.                 """
  131.                 check_dir_cmd = f"""
  132.                 if [ -d {self.audit_path} ]; then
  133.                     echo 'Directory exists'
  134.                 else
  135.                    echo 'Directory does not exist'
  136.                 fi
  137.               """
  138.                 stdin, stdout, stderr = ssh_client.exec_command(check_dir_cmd)
  139.                 dir_check_output = stdout.read().decode('utf-8')
  140.                 if "Directory exists" in dir_check_output:
  141.                    self.info_logger.info(f"{ip_address}: 审计日志目录 {self.audit_path} 存在 - {inspect.currentframe().f_code.co_name}")
  142.                    tar_cmd = f"cd {self.audit_path} && tar -zcf /tmp/{ip_address}_{self.current_time}_audit.tar.gz ."
  143.                    stdin, stdout, stderr = ssh_client.exec_command(tar_cmd)
  144.                    exit_status = stdout.channel.recv_exit_status()
  145.                 
  146.                    # 判断打包是否成功
  147.                    if exit_status == 0:
  148.                       self.info_logger.info(f"{ip_address}: 审计日志打包成功 - {inspect.currentframe().f_code.co_name}")
  149.                    else:
  150.                       self.error_logger.error(f"{ip_address}: 审计日志打包失败 - {stderr.read().decode('utf-8')} - {inspect.currentframe().f_code.co_name}")
  151.                 else:
  152.                    self.error_logger.error(f"{ip_address}: 审计日志目录 {self.audit_path} 不存在 - {inspect.currentframe().f_code.co_name}")
  153.             def execute_rsync(self, ssh_client, ip_address):
  154.                 """
  155.                 执行rsync同步操作
  156.        
  157.                 Parameters:
  158.                 ssh_client (paramiko.SSHClient): SSH客户端对象
  159.                 ip_address (str): 目标服务器的IP地址
  160.                 """
  161.                 rsync_check_cmd = "which rsync"
  162.                 stdin, stdout, stderr = ssh_client.exec_command(rsync_check_cmd)
  163.                 #调试
  164.                 #print(f"execute_rsync_stdout: {stdout.read().decode('utf-8')}")
  165.                 if "rsync" not in stdout.read().decode('utf-8'):
  166.                     install_rsync_cmd = "yum -y install rsync"
  167.                     ssh_client.exec_command(install_rsync_cmd)
  168.                     #安装rsync命令可能需要20s左右
  169.                     self.info_logger.info(f"{ip_address}: 安装rsync中,请等待... - {inspect.currentframe().f_code.co_name}")
  170.                     time.sleep(20)
  171.                     # 再次检查rsync命令是否安装成功
  172.                     stdin, stdout, stderr = ssh_client.exec_command(rsync_check_cmd)
  173.                     if "rsync" not in stdout.read().decode('utf-8'):
  174.                         self.error_logger.error(f"{ip_address} 安装rsync失败 - {inspect.currentframe().f_code.co_name}")
  175.                         return
  176.                 # 已经安装rsync,执行目标服务器的操作
  177.                 rsync_cmd = f"rsync -az -e 'ssh -p {self.port}' {self.username}@{ip_address}:/tmp/{ip_address}_{self.current_time}_audit.tar.gz {self.export_dir}"
  178.                 os.system(rsync_cmd)
  179.                 self.info_logger.info(f"{ip_address}: 审计日志压缩包同步成功 - {inspect.currentframe().f_code.co_name}")
  180.                 # 删除远程服务器上的tar包
  181.                 delete_tar_cmd = f"rm /tmp/{ip_address}_{self.current_time}_audit.tar.gz"
  182.                 ssh_client.exec_command(delete_tar_cmd)
  183.                 self.info_logger.info(f"{ip_address}: 成功删除远程服务器上的tar包 - {inspect.currentframe().f_code.co_name}")
  184.          
  185.             def delete_old_archive_logs(self, ssh_client):
  186.                 # 删除旧归档日志目录方法
  187.                 check_archive_cmd = f"find /export/AuditLogSync/ -mindepth 1 -maxdepth 1  -type d -mtime +7"
  188.                 stdin, stdout, stderr = ssh_client.exec_command(check_archive_cmd)
  189.                 old_archive_dirs = stdout.read().decode('utf-8').splitlines()
  190.                 
  191.                 for old_dir in old_archive_dirs:
  192.                     delete_cmd = f"rm -rf {old_dir}"
  193.                     _, stderr, _ = ssh_client.exec_command(delete_cmd)
  194.                     error = stderr.read().decode('utf-8')
  195.                     if error:
  196.                        self.error_logger.error(f"xx.xx.xx.xx 删除旧归档日志目录失败: {error} - {inspect.currentframe().f_code.co_name}")
  197.                     else:
  198.                        self.info_logger.info("xx.xx.xx.xx 没有7天前旧归档日志目录")
  199.         # 使用AuditLogSync类来运行操作,程序执行入口
  200.         if __name__ == '__main__':
  201.             auditLogSync = AuditLogSync("/export/AuditLogSync/ip_addresses.txt","/var/log/audit",'root','Dcn763#+',822)
  202.             auditLogSync.run_operations()
  203.             ssh_client = auditLogSync.connect_to_server("xx.xx.xx.xx")
  204.             if ssh_client is not None:
  205.                 auditLogSync.info_logger.info(f"成功连接服务器 xx.xx.xx.xx")
  206.                 auditLogSync.delete_old_archive_logs(ssh_client)
  207.                 ssh_client.close()
复制代码
6、服务器未安装杀毒

  1.         整改建议:
  2.                 建议服务器安装杀毒程序,并提供最新病毒库版本
  3.        
  4.         整改方法:
  5.                 找服务器厂商协助安装杀毒软件(商业版),一般是深信服EDR防护
复制代码
二、MySql数据库等保加固

此处mysql版本是5.7.32,别的版本请DBA判定是否能用以下配置;并且配置后不要立即重启数据库,建议跟项目侧和客户约定业务低峰期举行重启操作,一定要得到客户侧的同意再执行重启操作
1、采用用户名+口令举行身份辨别,未启用口令复杂度策略,未定期更换口令

  1.         整改建议:
  2.                 建议配置数据库口令复杂度策略,如口令长度至少8位以上且包含大写字母、小写字母、数字三种字符类型中至少两种组成
  3.        
  4.         整改方法:
  5.                 1、检查mysql是否已安装validate_password插件
  6.                         登录mysql,执行以下命令:
  7.                                 mysql> show plugins;
  8.                 2、如果未安装该插件,执行以下命令进行安装:
  9.                         mysql>INSTALL PLUGIN validate_password SONAME 'validate_password.so';
  10.                 3、my.cnf添加以下配置
  11.                     plugin-load-add=validate_password.so
  12.                         validate_password_check_user_name     =  ON
  13.                         validate_password_length              =  8
  14.                         validate_password_mixed_case_count     = 1
  15.                         validate_password_number_count         = 1
  16.                         validate_password_policy               = medium
  17.                         validate_password_special_char_count   = 1
复制代码
2、未启用登录失败处理功能,未有登录连接超时退出策略

  1.         整改建议:
  2.                 建议配置登录失败处理及登录连接超时退出策略;(如登录失败5次锁定账户20分钟,登录连接超时30分钟自动退出)
  3.        
  4.         整改方法:
  5.                 my.cnf添加以下配置
  6.                 #登录失败次数限制
  7.                 max_connect_errors = 5
  8.                 #登录连接超时退出策略
  9.                 interactive_timeout = 1800  # 将交互式客户端的超时时间设置为 1800 秒(30 分钟)
  10.                 wait_timeout = 1800  # 将非交互式客户端的超时时间设置为 1800 秒(30 分钟)
复制代码


3、采用用户名+口令验证码举行身份辨别,未实现使用两种或两种以上组合辨别技术举行身份辨别,未实现双因子登录;未对接入方式或网络地址范围举行限制且网络不可控
  1.         整改建议:
  2.                 服务器只采用密码技术对用户的身份进行鉴别,未采用双因子认证。
  3.                 因为维护的项目都是通过vpn(短信验证)-->堡垒机(短信验证)-->登录服务器,最后沟通这项可以按如下修复。即服务器配置ssh白名单,只允许堡垒机登录
  4.        
  5.         整改方法:
  6.                 vim /etc/hosts.deny #添加以下配置
  7.                 sshd:all:deny
  8.                 vim /etc/hosts.allow #添加以下配置
  9.                 sshd:堡垒机IP:allow
复制代码
4、未实现管理用户的最小权限分离

  1.         整改建议:
  2.                 建议创建系统管理员、审计管理员、安全管理员并划分各管理员所需管理的最小权限,实现管理用户的三权分离
  3.        
  4.         整改方法:
  5.                 创建系统管理员(root) 审计管理员(audit) 安全管理员(secure)并分配对应权限
复制代码
5、未有加密技术保证数据在传输过程中的完整性;

  1.         整改建议:
  2.                 建议采用加密技术或密码技术保证重要数据在传输过程中的完整性
  3.        
  4.         整改方法:
  5.                 my.cnf添加以下配置
  6.             require_secure_transport=ON
复制代码
6、未定期举行数据备份恢复测试功能

  1.         整改建议:
  2.                 建议重要数据进行本地数据备份与恢复功能
  3.                
  4.         整改方法:
  5.                 添加mysql_backup_3306.py全量备份脚本,定时备份,并进行恢复测试
  6.                 crontab -e
  7.                 * */23 * * * /usr/bin/python /path/mysql_backup_3306.py  IP  PORT
复制代码
三、中央件版本过低产生的各种漏洞

此处就不挨个展示中央件相关的漏洞了,就拿nginx的漏洞作为示例,别的中央件的修复方法都与此处一致
1、nginx漏洞示例及修复

  1.         漏洞示例:
  2.                 nginx 安全漏洞(CVE-2021-23017)
  3.                 nginx 缓冲区错误漏洞(CVE-2022-41741)
  4.                 nginx 越界写入漏洞(CVE-2022-41742)
  5.                 Nginx 信任管理问题漏洞(CVE-2021-3618)
  6.                 NGINX 环境问题漏洞(CVE-2019-20372)
  7.                
  8.         漏洞修复方法:
  9.                 采用iptables规则或firewalld规则进行修复。我比较熟练iptables规则,因此采用iptables
  10.                
  11.                 只允许指定的源IP地址、源网段地址、127.0.0.1访问nginx暴露出来的端口,拒绝其余网段/ip地址的访问
  12.                 iptables -A INPUT -s 10.x.xx.0/24  -p tcp -m multiport --dports 80,8999 -j ACCEPT
  13.                 iptables -A INPUT -s 172.xx.xx.0/24  -p tcp -m multiport --dports 80,8999 -j ACCEPT
  14.                 iptables -A INPUT -s 127.0.0.1 -p tcp -m multiport --dports 80,8999 -j ACCEPT
  15.                 iptables -A INPUT -p tcp  -m multiport --dports 80,8999 -j DROP
  16.        
  17.         注意事项:
  18.                 1、为什么中间件漏洞通过IPtables规则进行修复?
  19.                         因为随着项目再交付期的稳定运行,客户侧已开始学习使用系统,如果升级中间件版本,后端微服务代码可能也涉及到需要更改,更改后也并不一定能保证系统平稳运行,耗时巨大,成功率不敢保证100%。一般情况下客户侧也是不同意升级版本的。如果客户侧强烈要求升级版本,那只能自求多福写升级方案并演练,演练通过后再上生产。
  20.                 2、其余中间件的修复方法亦是如此,只需要确定好哪些IP地址方法该中间件端口,然后添加规则就行。
复制代码
四、Harbor 访问控制错误漏洞

  1.         整改建议:
  2.                 1、升级harbor版本
  3.                 2、将harbor中公开的仓库全部设置为私有仓库,给pod的yaml文件中配置镜像拉取策略即可 #推荐方法2
复制代码
![harbor漏洞详情](https://img-
blog.csdnimg.cn/direct/e81839004cd44311a654c5aed2ea9d58.png)
五、Swagger API 未授权访问漏洞

  1.         整改建议:
  2.                 结合SpringSecurity/shiro进行认证授权,将Swagger-UI的URLs加入到各自的认证和授权过滤链中,当用户访问Swagger对应的资源时,只有通过认证授权的用户才能进行访问
  3.        
  4.         整改方法:
  5.                 拉通研发,进行处理即可
复制代码
六、服务器常见安全加固脚本分享

一个简朴的shell脚本,包含了服务器暗码、连接超时、文件权限、服务器历史命令等方面的加固
  1. #!/bin/bash
  2. #linux脆弱性加固脚本
  3. system_auth(){
  4.   echo "---口令锁定策略---"
  5.   cp -p /etc/pam.d/system-auth /etc/pam.d/system-auth_bak
  6.   if grep -q 'auth required pam_tally2.so' /etc/pam.d/system-auth;then
  7.      sed -i 's/^auth.*required.*pam_tally2.so$/&\nauth required pam_tally2.so deny=3 unlock_time=600 even_deny_root root_unlock_time=10/g' /etc/pam.d/system-auth
  8.   else
  9.      echo "auth required pam_tally2.so deny=3 unlock_time=600 even_deny_root root_unlock_time=10" >> /etc/pam.d/system-auth
  10.   fi  
  11.   
  12.   if grep -q 'account required pam_tally2.so' /etc/pam.d/system-auth;then
  13.      sed -i 's/^account.*required.*pam_tally2.so$/&\n/g' /etc/pam.d/system-auth
  14.   else
  15.      echo "account required pam_tally2.so" >> /etc/pam.d/system-auth
  16. fi
  17. }
  18. logindefs(){
  19.   echo "---口令生存期---"
  20.   cp -p /etc/login.defs /etc/login.defs_bak
  21.   sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/g' /etc/login.defs
  22.   sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS 10/g' /etc/login.defs
  23.   sed -i 's/^PASS_WARN_AGE.*/PASS_WARN_AGE 7/g' /etc/login.defs
  24. }
  25. system_auth_crack(){
  26.   echo "---口令复杂度---"
  27.   # 判断 system-auth 配置文件中是否包含 password requisite pam_cracklib.so 的配置
  28.   if grep -q 'password requisite pam_cracklib.so' /etc/pam.d/system-auth; then
  29.   # 如果有,则使用 sed 命令替换原有的行
  30.         sed -i 's/^password.*requisite.*pam_cracklib.so$/& try_first_pass retry=3 dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 minlen=8/g' /etc/pam.d/system-auth
  31.   else
  32.     # 如果没有,则添加新的一行
  33.        echo "password requisite  pam_cracklib.so try_first_pass retry=3 dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 minlen=8" >> /etc/pam.d/system-auth
  34.   fi
  35. }
  36. file_contro(){
  37.   echo "文件与目录缺省权限控制"
  38.   cp  -p /etc/profile /etc/profile.bak
  39.   if grep -q 'umask 027' /etc/profile;then
  40.     echo "已存在umask 027"
  41.   else
  42.     echo "umask 027" >>/etc/profile
  43.   source /etc/profile
  44. }
  45. user_control(){
  46.     chmod 644 /etc/passwd
  47.     chmod 400 /etc/shadow
  48.     chmod 644 /etc/group
  49.     chmod 644 /etc/services
  50.     chmod 600 /etc/xinetd.conf
  51.     chmod 600 /etc/security
  52.     chattr +a /var/log/messages  
  53. }
  54. security_log(){
  55.   filename="/var/adm/messages"
  56.   if [ -e "${filename}" ]; then
  57.     chmod 666 /var/adm/messages
  58.     /etc/init.d/rsyslog restart
  59. else
  60.    touch ${filename}
  61.    chmod 666 /var/adm/messages
  62.    echo " *.err;kern.debug;daemon.notice /var/adm/messages" >> /etc/rsyslog.conf
  63.    /etc/init.d/rsyslog restart
  64. fi
  65. }
  66. login_timeout(){
  67.   # 检查 /etc/profile 文件是否存在
  68. if [ ! -f /etc/profile ]; then
  69.   echo "/etc/profile 文件不存在"
  70.   exit 1
  71. fi
  72. # 使用 sed 命令检查文件末尾是否已经存在所需的两行内容,不存在则添加
  73. if ! grep -q '^TMOUT=' /etc/profile; then
  74.   echo 'TMOUT=300' >> /etc/profile
  75. else
  76.   sed -i 's/^TMOUT=.*/TMOUT=300/' /etc/profile
  77. fi
  78. if ! grep -q '^export TMOUT' /etc/profile; then
  79.   echo 'export TMOUT' >> /etc/profile
  80. fi
  81. }
  82. history_set(){
  83. # 检查 /etc/profile 文件是否存在
  84. if [ ! -f /etc/profile ]; then
  85.   echo "/etc/profile 文件不存在"
  86.   exit 1
  87. fi
  88. # 使用 sed 命令检查文件中是否已经存在所需的两行内容,不存在则添加上去
  89. if ! grep -q '^HISTFILESIZE=' /etc/profile; then
  90.   echo 'HISTFILESIZE=5' >> /etc/profile
  91. else
  92.   sed -i 's/^HISTFILESIZE=.*/HISTFILESIZE=5/' /etc/profile
  93. fi
  94. if ! grep -q '^HISTSIZE=' /etc/profile; then
  95.   echo 'HISTSIZE=5' >> /etc/profile
  96. else
  97.   sed -i 's/^HISTSIZE=.*/HISTSIZE=5/' /etc/profile
  98. fi
  99. # 让配置生效
  100. source /etc/profile
  101. }
  102. core_dump(){
  103. # 检查 /etc/security/limits.conf 文件是否存在
  104. if [ ! -f /etc/security/limits.conf ]; then
  105.   echo "/etc/security/limits.conf 文件不存在"
  106.   exit 1
  107. fi
  108. # 使用 sed 命令检查文件末尾是否已经存在所需的两行内容
  109. if ! grep -q '^\*\s\+soft\s\+core\s\+0$' /etc/security/limits.conf; then
  110.   echo '* soft core 0' >> /etc/security/limits.conf
  111. else
  112.   sed -i 's/^\(\*\s\+soft\s\+core\s\+\).*/\10/' /etc/security/limits.conf
  113. fi
  114. if ! grep -q '^\*\s\+hard\s\+core\s\+0$' /etc/security/limits.conf; then
  115.   echo '* hard core 0' >> /etc/security/limits.conf
  116. else
  117.   sed -i 's/^\(\*\s\+hard\s\+core\s\+\).*/\10/' /etc/security/limits.conf
  118. fi
  119. # 检查 /etc/profile 文件是否存在
  120. if [ ! -f /etc/profile ]; then
  121.   echo "/etc/profile 文件不存在"
  122.   exit 1
  123. fi
  124. # 使用 grep 命令检查文件中是否存在指定内容,同时注释掉对应的行
  125. if grep -q 'ulimit\s\+-S\s\+-c\s\+0\s\+>\s\+\/dev\/null\s\+2>&1' /etc/profile; then
  126.   sed -i 's/^ulimit\s\+-S\s\+-c\s\+0\s\+>\s\+\/dev\/null\s\+2>&1/#&/' /etc/profile
  127. fi
  128. }
  129. system_auth
  130. logindefs
  131. system_auth_crack
  132. file_contro
  133. user_control
  134. security_log
  135. login_timeout
  136. history_set
  137. core_dump
复制代码

总结

以上就是关于常见的等保测评项及加固方法,后期遇到新的测评项及加固方法会随时更新,盼望能对各人起到帮助作用,也期望各人能给文章点点赞!!!
题外话

初入盘算机行业的人或者大学盘算机相关专业毕业生,很多因缺少实战经验,就业处处碰钉子。下面我们来看两组数据:
2023届全国高校毕业生预计到达1158万人,就业形势严峻;
国家网络安全宣传周公布的数据显示,到2027年我国网络安全人员缺口将达327万。
一方面是每年应届毕业生就业形势严峻,一方面是网络安全人才百万缺口。
6月9日,麦可思研究2023年版就业蓝皮书(包罗《2023年中国本科生就业陈诉》《2023年中国高职生就业陈诉》)正式发布。
2022届大学毕业生月收入较高的前10个专业
本科盘算机类、高职自动化类专业月收入较高。2022届本科盘算机类、高职自动化类专业月收入分别为6863元、5339元。此中,本科盘算机类专业起薪与2021届基本持平,高职自动化类月收入增长显着,2022届反超铁道运输类专业(5295元)排在第一位。
具体看专业,2022届本科月收入较高的专业是信息安全(7579元)。对比2018届,电子科学与技术、自动化等与人工智能相关的本科专业体现不俗,较五年前起薪涨幅均到达了19%。数据科学与大数据技术虽是近年新增专业但体现亮眼,已跻身2022届本科毕业生毕业半年后月收入较高专业前三。五年前唯一进入本科高薪榜前10的人文社科类专业——法语已退出前10之列。

“没有网络安全就没有国家安全”。当前,网络安全已被提升到国家战略的高度,成为影响国家安全、社会稳定至关重要的因素之一。
网络安全行业特点

1、就业薪资非常高,涨薪快 2022年猎聘网发布网络安全行业就业薪资行业最高人均33.77万!

2、人才缺口大,就业机会多

2019年9月18日《中华人民共和国中央人民政府》官方网站发表:我国网络空间安全人才 需求140万人,而全国各大学校每年造就的人员不到1.5W人。猎聘网《2021年上半年网络安全陈诉》猜测2027年网安人才需求300W,现在从事网络安全行业的从业人员只有10W人。

行业发展空间大,岗位非常多
网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品司理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、劫难恢复专业人员、实战攻防专业人员…
职业增值潜力大
网络安全专业具有很强的技术特性,尤其是把握工作中的核心网络架构、安全技术,在职业发展上具有不可替换的竞争优势。
随着个人能力的不断提升,所从事工作的职业代价也会随着自身经验的丰富以及项目运作的成熟,升值空间一起看涨,这也是为什么受各人欢迎的主要缘故原由。
从某种程度来讲,在网络安全领域,跟大夫职业一样,越老越吃香,由于技术愈加成熟,自然工作会受到器重,升职加薪则是水到渠成之事。
黑客&网络安全如何学习
本日只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。
1.学习路线图

行业发展空间大,岗位非常多
网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品司理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、劫难恢复专业人员、实战攻防专业人员…
职业增值潜力大
网络安全专业具有很强的技术特性,尤其是把握工作中的核心网络架构、安全技术,在职业发展上具有不可替换的竞争优势。
随着个人能力的不断提升,所从事工作的职业代价也会随着自身经验的丰富以及项目运作的成熟,升值空间一起看涨,这也是为什么受各人欢迎的主要缘故原由。
从某种程度来讲,在网络安全领域,跟大夫职业一样,越老越吃香,由于技术愈加成熟,自然工作会受到器重,升职加薪则是水到渠成之事。
黑客&网络安全如何学习
本日只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。
1.学习路线图


攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,假如你能学完它们,你去就业和接私活完全没有题目。
2.视频教程

网上虽然也有很多的学习资源,但基本上都残破不全的,这是我本身录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。
内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试底子、漏洞详解、盘算机底子知识等,都是网络安全入门必知必会的学习内容。
3.技术文档和电子书

技术文档也是我本身整理的,包罗我参加大型网安办法、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。
4.工具包、口试题和源码

“工欲善其事必先利其器”我为各人总结出了最受欢迎的几十款款黑客工具。涉及范围主要会集在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同砚不容错过。
另有我视频里讲的案例源码和对应的工具包,必要的话也可以拿走。
这些题目都是各人在口试深佩服、奇安信、腾讯或者别的大厂口试时经常遇到的,假如各人有好的题目或者好的看法欢迎分享。
参考解析:深佩服官网、奇安信官网、Freebuf、csdn等
内容特点:条理清晰,含图像化表现更加易懂。
内容概要:包罗 内网、操作体系、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

因篇幅有限,仅展示部分资料,必要点击下方链接即可前往获取
假如你对网络安全入门感兴趣,那么你必要的话可以点击这里

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

写过一篇

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表