写过一篇 发表于 2024-11-25 03:35:54

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

文章目录



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


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

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


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

[*]三、中央件版本过低产生的各种漏洞
[*] * 1、nginx漏洞示例及修复

[*]四、Harbor 访问控制错误漏洞
[*]五、Swagger API 未授权访问漏洞
[*]六、服务器常见安全加固脚本分享
[*]总结
前言

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

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

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

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

        整改建议:
                服务器只采用密码技术对用户的身份进行鉴别,未采用双因子认证。
                因为维护的项目都是通过vpn(短信验证)-->堡垒机(短信验证)-->登录服务器,最后沟通这项可以按如下修复。即服务器配置ssh白名单,只允许堡垒机登录
       
        整改方法:
                vim /etc/hosts.deny #添加以下配置
                sshd:all:deny

                vim /etc/hosts.allow #添加以下配置
                sshd:堡垒机IP:allow
4、Rc3.d文件权限过大755

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

        整改建议:
                未有第三方审计系统,未对审计记录进行定期备份;

        整改方法:
                1、服务器开启audit服务
                2、使用aidutctl -l命令查看审计策略
                3、使用auditctl -w 路径/文件 -p 权限 命令对文件或目录配置审计策略
                   补充: 使用auditctl -W 路径/文件 -p 权限 命令是取消审计策略
                4、使用ausearch -f 配置的路径/文件查看对应的审计日志
                5、使用AuditLogSync.py脚本+ip_address.txt文件实现将全部服务器的audit.log日志备份并同步到日志归档服务器。脚本如下所示
                6、在日志归档服务器配置定时同步,即可
                        # crontab -e
                                * */23 * * */usr/bin/python3 -W ignore /path/AuditLogSync.py



    #!/usr/bin/env python3
        #Date: 202403212005
        import os
        import time
        import paramiko
        import logging
        from datetime import datetime
        import threading
        import inspect
       
       
        class AuditLogSync:
          def __init__(self, ip_file,audit_path,username,password,port):
                """
                初始化AuditLogSync类
       
                Parameters:
                ip_file (str): 包含IP地址列表的文件路径
                audit_path (str): 审计日志路径
                username (str): 用户名
                password (str): 密码
                port    (int):端口
                """
                self.ip_file = ip_file
                self.audit_path=audit_path
                self.username = username
                self.password = password
                self.port = port
                #生成日期
                self.current_time = datetime.now().strftime("%Y%m%d")
                #生成审计日志归档目录
                self.export_dir = f"/export/AuditLogSync/{self.current_time}"
                #生成执行日志
                self.info_log_file = "/export/AuditLogSync/sync_info.log"
                self.error_log_file = "/export/AuditLogSync/sync_error.log"
                 # 设置 info 日志记录器
                self.info_logger = logging.getLogger('info_logger')
                info_handler = logging.FileHandler(self.info_log_file)
                info_handler.setLevel(logging.INFO)
                info_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
                info_handler.setFormatter(info_formatter)
                self.info_logger.addHandler(info_handler)
                self.info_logger.setLevel(logging.INFO)
                # 设置 error 日志记录器
                self.error_logger = logging.getLogger('error_logger')
                error_handler = logging.FileHandler(self.error_log_file)
                error_handler.setLevel(logging.ERROR)
                error_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
                error_handler.setFormatter(error_formatter)
                self.error_logger.addHandler(error_handler)
                #判断审计日志归档目录是否存在
                if not os.path.exists(self.export_dir):
                    os.makedirs(self.export_dir)
          
          def run_operations(self):
                """
                运行一系列操作:连接到服务器,打包日志文件,执行rsync同步
                """
                # 从文件中读取IP地址列表
                with open(self.ip_file, 'r') as file:
                    ip_addresses = file.readlines()
                threads= []
                # 拿到ip地址调用连接服务器方法
                for ip_address in ip_addresses:
                    ip_address = ip_address.strip()
                    # 创建线程并启动,不采用多线程容易卡死
                    thread = threading.Thread(target=self.process_server, args=(ip_address,))
                    threads.append(thread)
                    thread.start()
                    #ssh_client = self.connect_to_server(ip_address)
                    #判断服务器连接是否成功,如果成功调用打包审计日志方法、执行rsync同步方法,最后关闭连接
                    #if ssh_client is not None:
                    #    self.package_logs(ssh_client, ip_address)
                    #    self.execute_rsync(ssh_client, ip_address)
                    #    ssh_client.close()
                # 等待所有线程完成
                for thread in threads:
                    thread.join()
          def process_server(self, ip_address):
                """
                处理单个服务器的操作
                """
                ssh_client = self.connect_to_server(ip_address)
                #判断服务器连接是否成功,如果成功调用打包审计日志方法、执行rsync同步方法,最后关闭连接
                if ssh_client is not None:
                    self.package_logs(ssh_client, ip_address)
                    self.execute_rsync(ssh_client, ip_address)
                    ssh_client.close()
          def connect_to_server(self, ip_address):
                """
                建立SSH连接到远程服务器
       
                Parameters:
                ip_address (str): 目标服务器的IP地址
       
                Returns:
                paramiko.SSHClient: SSH客户端对象
                """
                ssh_client = paramiko.SSHClient()
                ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
       
                try:
                    ssh_client.connect(ip_address, username=self.username, password=self.password, port=self.port,timeout=20)
                    self.info_logger.info(f"成功连接到服务器 {ip_address} - {inspect.currentframe().f_code.co_name}")
                except paramiko.ssh_exception.AuthenticationException:
                    self.error_logger.error(f"连接服务器失败 {ip_address}. 请检查服务器信息是否正确 - {inspect.currentframe().f_code.co_name}")
                    return None
       
                return ssh_client
       
          def package_logs(self, ssh_client, ip_address):
                """
                打包远程服务器上的日志文件
       
                Parameters:
                ssh_client (paramiko.SSHClient): SSH客户端对象
                ip_address (str): 目标服务器的IP地址
                """
                check_dir_cmd = f"""
                if [ -d {self.audit_path} ]; then
                    echo 'Directory exists'
                else
                   echo 'Directory does not exist'
                fi
              """
                stdin, stdout, stderr = ssh_client.exec_command(check_dir_cmd)
                dir_check_output = stdout.read().decode('utf-8')
                if "Directory exists" in dir_check_output:
                   self.info_logger.info(f"{ip_address}: 审计日志目录 {self.audit_path} 存在 - {inspect.currentframe().f_code.co_name}")
                   tar_cmd = f"cd {self.audit_path} && tar -zcf /tmp/{ip_address}_{self.current_time}_audit.tar.gz ."
                   stdin, stdout, stderr = ssh_client.exec_command(tar_cmd)
                   exit_status = stdout.channel.recv_exit_status()
                
                   # 判断打包是否成功
                   if exit_status == 0:
                      self.info_logger.info(f"{ip_address}: 审计日志打包成功 - {inspect.currentframe().f_code.co_name}")
                   else:
                      self.error_logger.error(f"{ip_address}: 审计日志打包失败 - {stderr.read().decode('utf-8')} - {inspect.currentframe().f_code.co_name}")
                else:
                   self.error_logger.error(f"{ip_address}: 审计日志目录 {self.audit_path} 不存在 - {inspect.currentframe().f_code.co_name}")
          def execute_rsync(self, ssh_client, ip_address):
                """
                执行rsync同步操作
       
                Parameters:
                ssh_client (paramiko.SSHClient): SSH客户端对象
                ip_address (str): 目标服务器的IP地址
                """
                rsync_check_cmd = "which rsync"
                stdin, stdout, stderr = ssh_client.exec_command(rsync_check_cmd)
                #调试
                #print(f"execute_rsync_stdout: {stdout.read().decode('utf-8')}")
                if "rsync" not in stdout.read().decode('utf-8'):
                    install_rsync_cmd = "yum -y install rsync"
                    ssh_client.exec_command(install_rsync_cmd)
                    #安装rsync命令可能需要20s左右
                    self.info_logger.info(f"{ip_address}: 安装rsync中,请等待... - {inspect.currentframe().f_code.co_name}")
                    time.sleep(20)
                    # 再次检查rsync命令是否安装成功
                    stdin, stdout, stderr = ssh_client.exec_command(rsync_check_cmd)
                    if "rsync" not in stdout.read().decode('utf-8'):
                      self.error_logger.error(f"{ip_address} 安装rsync失败 - {inspect.currentframe().f_code.co_name}")
                      return
                # 已经安装rsync,执行目标服务器的操作
                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}"
                os.system(rsync_cmd)
                self.info_logger.info(f"{ip_address}: 审计日志压缩包同步成功 - {inspect.currentframe().f_code.co_name}")
                # 删除远程服务器上的tar包
                delete_tar_cmd = f"rm /tmp/{ip_address}_{self.current_time}_audit.tar.gz"
                ssh_client.exec_command(delete_tar_cmd)
                self.info_logger.info(f"{ip_address}: 成功删除远程服务器上的tar包 - {inspect.currentframe().f_code.co_name}")
       
          def delete_old_archive_logs(self, ssh_client):
                # 删除旧归档日志目录方法
                check_archive_cmd = f"find /export/AuditLogSync/ -mindepth 1 -maxdepth 1-type d -mtime +7"
                stdin, stdout, stderr = ssh_client.exec_command(check_archive_cmd)
                old_archive_dirs = stdout.read().decode('utf-8').splitlines()
                
                for old_dir in old_archive_dirs:
                    delete_cmd = f"rm -rf {old_dir}"
                    _, stderr, _ = ssh_client.exec_command(delete_cmd)
                    error = stderr.read().decode('utf-8')
                    if error:
                       self.error_logger.error(f"xx.xx.xx.xx 删除旧归档日志目录失败: {error} - {inspect.currentframe().f_code.co_name}")
                    else:
                       self.info_logger.info("xx.xx.xx.xx 没有7天前旧归档日志目录")
        # 使用AuditLogSync类来运行操作,程序执行入口
        if __name__ == '__main__':
          auditLogSync = AuditLogSync("/export/AuditLogSync/ip_addresses.txt","/var/log/audit",'root','Dcn763#+',822)
          auditLogSync.run_operations()
          ssh_client = auditLogSync.connect_to_server("xx.xx.xx.xx")
          if ssh_client is not None:
                auditLogSync.info_logger.info(f"成功连接服务器 xx.xx.xx.xx")
                auditLogSync.delete_old_archive_logs(ssh_client)
                ssh_client.close()
6、服务器未安装杀毒

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

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

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

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


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

                vim /etc/hosts.allow #添加以下配置
                sshd:堡垒机IP:allow
4、未实现管理用户的最小权限分离

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

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

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

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

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

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

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

一个简朴的shell脚本,包含了服务器暗码、连接超时、文件权限、服务器历史命令等方面的加固
#!/bin/bash
#linux脆弱性加固脚本
system_auth(){
echo "---口令锁定策略---"
cp -p /etc/pam.d/system-auth /etc/pam.d/system-auth_bak
if grep -q 'auth required pam_tally2.so' /etc/pam.d/system-auth;then
   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
else
   echo "auth required pam_tally2.so deny=3 unlock_time=600 even_deny_root root_unlock_time=10" >> /etc/pam.d/system-auth
fi

if grep -q 'account required pam_tally2.so' /etc/pam.d/system-auth;then
   sed -i 's/^account.*required.*pam_tally2.so$/&\n/g' /etc/pam.d/system-auth
else
   echo "account required pam_tally2.so" >> /etc/pam.d/system-auth
fi
}
logindefs(){
echo "---口令生存期---"
cp -p /etc/login.defs /etc/login.defs_bak
sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/g' /etc/login.defs
sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS 10/g' /etc/login.defs
sed -i 's/^PASS_WARN_AGE.*/PASS_WARN_AGE 7/g' /etc/login.defs
}
system_auth_crack(){
echo "---口令复杂度---"
# 判断 system-auth 配置文件中是否包含 password requisite pam_cracklib.so 的配置
if grep -q 'password requisite pam_cracklib.so' /etc/pam.d/system-auth; then
# 如果有,则使用 sed 命令替换原有的行
      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
else
    # 如果没有,则添加新的一行
       echo "password requisitepam_cracklib.so try_first_pass retry=3 dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 minlen=8" >> /etc/pam.d/system-auth
fi
}
file_contro(){
echo "文件与目录缺省权限控制"
cp-p /etc/profile /etc/profile.bak
if grep -q 'umask 027' /etc/profile;then
    echo "已存在umask 027"
else
    echo "umask 027" >>/etc/profile
source /etc/profile
}
user_control(){
    chmod 644 /etc/passwd
    chmod 400 /etc/shadow
    chmod 644 /etc/group
    chmod 644 /etc/services
    chmod 600 /etc/xinetd.conf
    chmod 600 /etc/security
    chattr +a /var/log/messages
}
security_log(){
filename="/var/adm/messages"
if [ -e "${filename}" ]; then
    chmod 666 /var/adm/messages
    /etc/init.d/rsyslog restart
else
   touch ${filename}
   chmod 666 /var/adm/messages
   echo " *.err;kern.debug;daemon.notice /var/adm/messages" >> /etc/rsyslog.conf
   /etc/init.d/rsyslog restart
fi
}
login_timeout(){
# 检查 /etc/profile 文件是否存在
if [ ! -f /etc/profile ]; then
echo "/etc/profile 文件不存在"
exit 1
fi

# 使用 sed 命令检查文件末尾是否已经存在所需的两行内容,不存在则添加
if ! grep -q '^TMOUT=' /etc/profile; then
echo 'TMOUT=300' >> /etc/profile
else
sed -i 's/^TMOUT=.*/TMOUT=300/' /etc/profile
fi

if ! grep -q '^export TMOUT' /etc/profile; then
echo 'export TMOUT' >> /etc/profile
fi
}
history_set(){
# 检查 /etc/profile 文件是否存在
if [ ! -f /etc/profile ]; then
echo "/etc/profile 文件不存在"
exit 1
fi

# 使用 sed 命令检查文件中是否已经存在所需的两行内容,不存在则添加上去
if ! grep -q '^HISTFILESIZE=' /etc/profile; then
echo 'HISTFILESIZE=5' >> /etc/profile
else
sed -i 's/^HISTFILESIZE=.*/HISTFILESIZE=5/' /etc/profile
fi

if ! grep -q '^HISTSIZE=' /etc/profile; then
echo 'HISTSIZE=5' >> /etc/profile
else
sed -i 's/^HISTSIZE=.*/HISTSIZE=5/' /etc/profile
fi

# 让配置生效
source /etc/profile
}
core_dump(){

# 检查 /etc/security/limits.conf 文件是否存在
if [ ! -f /etc/security/limits.conf ]; then
echo "/etc/security/limits.conf 文件不存在"
exit 1
fi

# 使用 sed 命令检查文件末尾是否已经存在所需的两行内容
if ! grep -q '^\*\s\+soft\s\+core\s\+0$' /etc/security/limits.conf; then
echo '* soft core 0' >> /etc/security/limits.conf
else
sed -i 's/^\(\*\s\+soft\s\+core\s\+\).*/\10/' /etc/security/limits.conf
fi

if ! grep -q '^\*\s\+hard\s\+core\s\+0$' /etc/security/limits.conf; then
echo '* hard core 0' >> /etc/security/limits.conf
else
sed -i 's/^\(\*\s\+hard\s\+core\s\+\).*/\10/' /etc/security/limits.conf
fi

# 检查 /etc/profile 文件是否存在
if [ ! -f /etc/profile ]; then
echo "/etc/profile 文件不存在"
exit 1
fi

# 使用 grep 命令检查文件中是否存在指定内容,同时注释掉对应的行
if grep -q 'ulimit\s\+-S\s\+-c\s\+0\s\+>\s\+\/dev\/null\s\+2>&1' /etc/profile; then
sed -i 's/^ulimit\s\+-S\s\+-c\s\+0\s\+>\s\+\/dev\/null\s\+2>&1/#&/' /etc/profile
fi
}
system_auth
logindefs
system_auth_crack
file_contro
user_control
security_log
login_timeout
history_set
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之列。
https://img-blog.csdnimg.cn/img_convert/833079f9db485aedcdecc83b1f7e8b80.jpeg
“没有网络安全就没有国家安全”。当前,网络安全已被提升到国家战略的高度,成为影响国家安全、社会稳定至关重要的因素之一。
网络安全行业特点

1、就业薪资非常高,涨薪快 2022年猎聘网发布网络安全行业就业薪资行业最高人均33.77万!
https://img-blog.csdnimg.cn/img_convert/d5f06d6b9945fd6e8a5f92a0198e5446.png
2、人才缺口大,就业机会多

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

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

https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=C%3A%5CUsers%5CAdministrator%5CDesktop%5C%E7%BD%91%E5%AE%89%E6%80%9D%E7%BB%B4%E5%AF%BC%E5%9B%BE%5C%E4%BA%AB%E5%AD%A6%E9%A6%96%E5%88%9B%E5%B9%B4%E8%96%AA40W%2B%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%E5%B7%A5%E7%A8%8B%E5%B8%88%20%E9%9D%92%E9%93%9C%E5%88%B0%E7%8E%8B%E8%80%85%E6%8A%80%E6%9C%AF%E6%88%90%E9%95%BF%E8%B7%AF%E7%BA%BFV4.0.png&pos_id=img-gGDIs789-1729741869787
攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,假如你能学完它们,你去就业和接私活完全没有题目。
2.视频教程

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

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

“工欲善其事必先利其器”我为各人总结出了最受欢迎的几十款款黑客工具。涉及范围主要会集在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同砚不容错过。
另有我视频里讲的案例源码和对应的工具包,必要的话也可以拿走。
这些题目都是各人在口试深佩服、奇安信、腾讯或者别的大厂口试时经常遇到的,假如各人有好的题目或者好的看法欢迎分享。
参考解析:深佩服官网、奇安信官网、Freebuf、csdn等
内容特点:条理清晰,含图像化表现更加易懂。
内容概要:包罗 内网、操作体系、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…
https://img-blog.csdnimg.cn/img_convert/da1274937756ef025cecc0439519a3d4.png
因篇幅有限,仅展示部分资料,必要点击下方链接即可前往获取
假如你对网络安全入门感兴趣,那么你必要的话可以点击这里
页: [1]
查看完整版本: 项目安全等保测评加固手册