川大实训-全套安全加固实验报告(包括扩展实验mysql访问配置实验)


title: 川大实训-安全加固实验
tags:

  • Windows安全加固
  • Linux安全加固
  • 中间件加固
  • PHP加固
  • MySQL加固
    categories:
  • 网络攻防
  • WEB攻防
  • 实战
    cover: /img/top_img19.png
    top_img: /img/top_img19.png
    abbrlink: 9437c481
    date: 2024-07-19 08:55:41

什么是安全加固?

安全加固和优化是实现信息系统安全的关键环节。通过安全加固,将在信息系统的网络层、主机层、软件层等层次建立符合安全需求的安全状态,并以此作为保证用户信息系统安全的起点

安全加固是配置软件系统的过程中,针对服务器操作系统、数据库及应用中间件等软件系统,通过打补丁、强化账号安全、加固服务、修改安全配置、优化访问控制策略、增加安全机制等方法,堵塞漏洞和“后门”,合理进行安全性加强,提高其健壮性和安全性,增加攻击者入侵的难度,提升系统安全防范水平

Windows安全加固

这里以win7虚拟机为例子,在进行实验之前,一定要记得提前拍好快照,以方便在实验结束后恢复实验前的状态

image-20240719093233808

点击这个键拍摄虚拟机快照,方便我们及时恢复原来的状态

Windows配置的途径

组策略(gpedit.msc)
命令(cmd或powershell中执行,或者编写批处理文件bat执行)
注册表(regedit)
配置文件(每个人都不一样,根据实际情况进行配置)

账户管理和认证授权

账户

默认账户安全
  • 禁用 Guest 账户。
  • 禁用或删除其他无用账户(建议先禁用账户三个月,待确认没有问题后删除。)

操作步骤

打开 控制面板 > 管理工具 > 计算机管理,在 系统工具 > 本地用户和组 > 用户 中,双击 Guest 帐户,在属性中选中 帐户已禁用,单击 确定

image-20240719094714718

image-20240719094824712

按照用户分配账户

按照用户分配帐户。根据业务要求,设定不同的用户和用户组。例如,管理员用户,数据库用户,审计用户,来宾用户等。

操作步骤

打开 控制面板 > 管理工具 > 计算机管理,在 系统工具 > 本地用户和组 中,根据您的业务要求设定不同的用户和用户组,包括管理员用户、数据库用户、审计用户、来宾用户等。

我们这里新建一个数据库用户,如下所示

image-20240719095520109

image-20240719095543535

同理,可以在组内也创建新的组

定期检查并删除与无关帐户

定期删除或锁定与设备运行、维护等与工作无关的帐户。

操作步骤

打开 控制面板 > 管理工具 > 计算机管理,在 系统工具 > 本地用户和组 中,删除或锁定与设备运行、维护等与工作无关的帐户。

这里我们可以将刚刚创建的SQL用户删除

image-20240719095818935

不显示最后的用户名

配置登录登出后,不显示用户名称。

操作步骤:

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 安全选项 中,双击 交互式登录:不显示最后的用户名,选择 已启用 并单击 确定

image-20240719100107910

image-20240719100127663

检查影子账户

如何找到影子账户

  1. “Win+R”键调出“运行”->regedit

  2. 打开“注册表编辑器”,找到[HKEY_LOCAL_MACHINE\SAM\SAM],右击该项选择“权限”,选中“组或用户名称”列表中的“Administrators”,勾选“完全控制”后点击“确定”。

    image-20240719100448836

  3. 按F5刷新一下注册表就会发现可以打开该项的下级分支了,找到[HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names],其下的子项就是系统中的账户名。

  4. 继续展开[HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\Administrator],查看并记录下该项的默认值。

    image-20240719100716743

  5. 查看Administrator帐号所对应的键值和"users"子项里的相对应,"users"里包含的就是该帐户的权限的键值(比如:Administrator的键值是1f4为结尾的,就从上面users里面找1f4为结尾的键)。打开Administrator所对应的"F"键值并复制里面的16进制。

    image-20240719100944675

  6. 依次检查[HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names]下的所有子项,如果某个子项的默认值与刚才记录下的Administrator的默认值相同,那么这个就是影子账户了,当然不能给黑客留一把后门“钥匙”,毫不犹豫地删除之。我的虚拟机中不存在这个问题,没有影子账户

  7. 除Administrator外,黑客还可能复制出其他账户的用户数据“保管箱”的“钥匙”,所以保险起见还需检查[HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names]下所有子项的默认值是否有相同。

口令

密码复杂度

密码复杂度要求必须满足以下策略:

  • 最短密码长度要求八个字符。
  • 启用本机组策略中密码必须符合复杂性要求的策略。

即密码至少包含以下四种类别的字符中的两种:

  • 英语大写字母 A, B, C, … Z
  • 英语小写字母 a, b, c, … z
  • 西方阿拉伯数字 0, 1, 2, … 9
  • 非字母数字字符,如标点符号,@, #, $, %, &, * 等

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 帐户策略 > 密码策略 中,确认 密码必须符合复杂性要求 策略已启用。

image-20240719101425082

我们将这个被禁用的开关打开即可

密码最长留存期

对于采用静态口令认证技术的设备,帐户口令的留存期不应长于 90 天。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 帐户策略 > 密码策略 中,配置 密码最长使用期限 不大于 90 天。

image-20240719101604624

账户锁定策略

对于采用静态口令认证技术的设备,应配置当用户连续认证失败次数超过 10 次后,锁定该用户使用的帐户。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 帐户策略 > 帐户锁定策略 中,配置 帐户锁定阈值 不大于 10 次。

image-20240719101745691

授权

远程关机

在本地安全设置中,从远端系统强制关机权限只分配给 Administrators 组。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 用户权限分配 中,配置 从远端系统强制关机 权限只分配给 Administrators 组。

image-20240719102313478

本地关机

在本地安全设置中关闭系统权限只分配给 Administrators 组。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 用户权限分配 中,配置 关闭系统 权限只分配给 Administrators 组。

image-20240719102027898

用户权限指派

在本地安全设置中,取得文件或其它对象的所有权权限只分配给 Administrators 组。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 用户权限分配 中,配置 取得文件或其它对象的所有权 权限只分配给 Administrators 组。

image-20240719102410051

授权账户登录

在本地安全设置中,配置指定授权用户允许本地登录此计算机。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 用户权限分配 中,配置 允许本地登录 权限给指定授权用户。

image-20240719102513028

授权账户从网络访问

在本地安全设置中,只允许授权帐号从网络访问(包括网络共享等,但不包括终端服务)此计算机。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 用户权限分配 中,配置 从网络访问此计算机 权限给指定授权用户。

image-20240719102616341

日志配置操作

日志配置

审核登录

设备应配置日志功能,对用户登录进行记录。记录内容包括用户登录使用的帐户、登录是否成功、登录时间、以及远程登录时、及用户使用的 IP 地址。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 审核策略 中,设置 审核登录事件

image-20240719102938398

审核策略

启用本地安全策略中对 Windows 系统的审核策略更改,成功和失败操作都需要审核。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 审核策略 中,设置 审核策略更改

image-20240719103023235

审核对象访问

启用本地安全策略中对 Windows 系统的审核对象访问,成功和失败操作都需要审核。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 审核策略 中,设置 审核对象访问

image-20240719103109794

审核事件目录服务访问

启用本地安全策略中对 Windows 系统的审核目录服务访问,仅需要审核失败操作。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 审核策略 中,设置 审核目录服务器访问

image-20240719103200105

审核特权使用

启用本地安全策略中对 Windows 系统的审核特权使用,成功和失败操作都需要审核。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 审核策略 中,设置 审核特权使用

image-20240719103253967

审核系统事件

启用本地安全策略中对 Windows 系统的审核系统事件,成功和失败操作都需要审核。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 审核策略 中,设置 审核系统事件

image-20240719103415469

审核账户管理

启用本地安全策略中对 Windows 系统的审核帐户管理,成功和失败操作都要审核。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 审核策略 中,设置 审核帐户管理

image-20240719103456620

审核进程追踪

启用本地安全策略中对 Windows 系统的审核进程追踪,仅失败操作需要审核。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 审核策略 中,设置 审核进程追踪

image-20240719103609120

日志文件大小

设置应用日志文件大小至少为 8192 KB,可根据磁盘空间配置日志文件大小,记录的日志越多越好。并设置当达到最大的日志尺寸时,按需要轮询记录日志。

操作步骤

打开 控制面板 > 管理工具 > 事件查看器,配置应用日志、系统日志、安全日志属性中的日志大小,以及设置当达到最大的日志尺寸时的相应策略。

image-20240719103917753

针对特定目录添加审核

针对特定目录添加审核

有时我们需要针对特定目录,特定账户进行的操作进行审核。

具体步骤: 打开文件夹属性,选择高级,点击审核,添加审核主体,审核主体即为用户或用户组。然后设置成功或者失败 亦或者两者都审核。设置权限,设置是否应用于子目录或者文件。

Linux安全加固

这里以我的Kali为例子,同样,在进行实验前需要对其拍摄快照

账号和口令

禁用或删除无用账号

减少系统无用账号,降低安全风险。

操作步骤

  • 使用命令 sudo userdel <用户名> 删除不必要的账号。
  • 使用命令 sudo passwd -l <用户名> 锁定不必要的账号。
  • 使用命令 sudo passwd -u <用户名> 解锁必要的账号。

image-20240719150619206

检查特殊账号

操作步骤

查看空口令和 root 权限账号,确认是否存在异常账号:

  • 使用命令 awk -F: ‘($2==“”)’ /etc/shadow 查看空口令账号。
  • 使用命令 awk -F: ‘($3==0)’ /etc/passwd 查看 UID 为零的账号。

image-20240719150716651

加固空口令账号:

  • 使用命令 passwd <用户名> 为空口令账号设定密码。
  • 确认 UID 为零的账号只有 root 账号。

我这里的账号已经被加固成功

添加口令策略

使用命令 vi /etc/login.defs 修改配置文件。

  • PASS_MAX_DAYS 90 #新建用户的密码最长使用天数
  • PASS_MIN_DAYS 0 #新建用户的密码最短使用天数
  • PASS_WARN_AGE 7 #新建用户的密码到期提前提醒天数

image-20240719150902388

使用 chage 命令修改用户设置。

例如,chage -m 0 -M 30 -E 2000-01-01 -W 7 <用户名>表示将此用户的密码最长使用天数设为 30,最短使用天数设为 0,密码 2000 年 1 月 1 日过期,过期前七天警告用户。

image-20240719150941558

设置连续输错三次密码,账号锁定五分钟。使用命令 vi /etc/pam.d/common-auth修改配置文件,在配置文件中添加 auth required pam_tally.so onerr=fail deny=3 unlock_time=300。

image-20240719151005598

限制用户su

限制能 su 到 root 的用户。

操作步骤

使用命令 vi /etc/pam.d/su修改配置文件,在配置文件中添加行。例如,只允许 test 组用户 su 到 root,则添加 auth required pam_wheel.so group=test。

image-20240719151312081

禁止root用户通过ssh直接登录

限制 root 用户直接登录。

操作步骤

  1. 创建普通权限账号并配置密码, 防止无法远程登录;
  2. 使用命令 vi /etc/ssh/sshd_config修改配置文件将 PermitRootLogin 的值改成 no,并保存,然后使用service sshd restart重启服务。

image-20240719151530520

服务

关闭不必要的服务

关闭不必要的服务(如普通服务和 xinetd 服务),降低风险。

操作步骤

使用命令systemctl disable <服务名>设置服务在开机时不自动启动。

说明: 对于部分老版本的 Linux 操作系统(如 CentOS 6),可以使用命令chkconfig --level <服务名> off设置服务在指定 init 级别下开机时不自动启动。

SSH服务安全

对 SSH 服务进行安全加固,防止暴力破解成功。

操作步骤

使用命令 vim /etc/ssh/sshd_config 编辑配置文件。

  • 不允许 root 账号直接登录系统。

设置 PermitRootLogin 的值为 no。

  • 修改 SSH 使用的协议版本。

设置 Protocol 的版本为 2。

  • 修改允许密码错误次数(默认 6 次)。

设置 MaxAuthTries 的值为 3。

配置文件修改完成后,重启 sshd 服务生效。

image-20240719152101270

文件系统

设置umask值

设置默认的 umask 值,增强安全性。

操作步骤

使用命令 vi /etc/profile 修改配置文件,添加行 umask 027, 即新创建的文件属主拥有读写执行权限,同组用户拥有读和执行权限,其他用户无权限。

image-20240719152319132

设置登录超时

设置系统登录后,连接超时时间,增强安全性。

操作步骤

使用命令 vi /etc/profile 修改配置文件,将以 TMOUT= 开头的行注释,设置为TMOUT=180,即超时时间为三分钟。

日志

syslogd日志

启用日志功能,并配置日志记录。

操作步骤

Linux 系统默认启用以下类型日志:

  • 系统日志(默认)/var/log/messages
  • cron 日志(默认)/var/log/cron
  • 安全日志(默认)/var/log/secure

注意:部分系统可能使用 syslog-ng 日志,配置文件为:/etc/syslog-ng/syslog-ng.conf。

记录所有用户的登录和操作日志

通过脚本代码实现记录所有用户的登录操作日志,防止出现安全事件后无据可查。

操作步骤

  1. 运行 [root@xxx /]# vim /etc/profile打开配置文件。
  2. 在配置文件中输入以下内容:
history
USER=`whoami`
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]; then
USER_IP=`hostname`
fi
if [ ! -d /var/log/history ]; then
mkdir /var/log/history
chmod 777 /var/log/history
fi
if [ ! -d /var/log/history/${LOGNAME} ]; then
mkdir /var/log/history/${LOGNAME}
chmod 300 /var/log/history/${LOGNAME}
fi
export HISTSIZE=4096
DT=`date +"%Y%m%d_%H:%M:%S"`
export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT"
chmod 600 /var/log/history/${LOGNAME}/*history* 2>/dev/null
  1. 运行 [root@xxx /]# source /etc/profile 加载配置生效。

注意: /var/log/history 是记录日志的存放位置,可以自定义。

通过上述步骤,可以在 /var/log/history 目录下以每个用户为名新建一个文件夹,每次用户退出后都会产生以用户名、登录 IP、时间的日志文件,包含此用户本次的所有操作(root 用户除外)。

文件权限

共享文件夹及访问权限

关闭默认共享

非域环境中,关闭 Windows 硬盘默认共享,例如 C , D ,D D

操作步骤

打开 注册表编辑器,根据推荐值修改注册表键值。

注意: Win2008没有该键值,但没有关闭默认gs’xtWindows Server 2012 版本已默认关闭 Windows 硬盘默认共享,且没有该注册表键值。

  • HKLM\System\CurrentControlSet\Services\LanmanServer\Parameters\AutoShareServer
共享文件夹授权访问

每个共享文件夹的共享权限,只允许授权的帐户拥有共享此文件夹的权限。

操作步骤

每个共享文件夹的共享权限仅限于业务需要,不要设置成为 Everyone。打开 控制面板 > 管理工具 > 计算机管理,在 共享文件夹 中,查看每个共享文件夹的共享权限。

服务安全

禁用TCP/IP上的NetBIOS

禁用 TCP/IP 上的 NetBIOS 协议,可以关闭监听的 UDP 137(netbios-ns)、UDP 138(netbios-dgm)以及 TCP 139(netbios-ssn)端口。

操作步骤

  1. 计算机管理 > 服务和应用程序 > 服务 中禁用 TCP/IP NetBIOS Helper 服务。
  2. 在网络连接属性中,双击 Internet 协议版本 4(TCP/IPv4),单击 高级。在 WINS 页签中,进行如下设置:

image-20240719201146423

禁用不必要的服务

服务名建议
DHCP Client如果不使用动态 IP, 则建议关闭
Background Intelligent Transfer Service如果不启用自动更新,建议关闭
ComputerBrowser建议关闭
Diagnostic Policy Service建议手动
IP Helper如果不用双栈建议关闭
PrintSpooler如果不使用打印服务,建议关闭
Remote Registry建议关闭
TCP/IP NetBIOS Helper建议关闭
Windows Remote ManageMent建议关闭
Windows Font Cache Service建议关闭
WinHTTP Web Proxy Auto-Discovery Service建议关闭

安全选项

启动安全选项

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 安全选项 中,进行如下设置:

安全选项配置内容
交互式登录:试图登录的用户的消息标题警告标题
交互式登录:试图登录的用户的消息文本警告内容
Microsoft 网络服务器:对通信进行数字签名(如果客户端允许)启用
Microsoft 网络服务器:对通信进行数字签名(始终)启用
Microsoft 网络客户端:对通信进行数字签名(如果服务器允许)启用
Microsoft 网络客户端:对通信进行数字签名(始终)启用
网络安全:基于 NTLM SSP 的(包括安全 RPC)服务器的最小会话安全要求 NTLMv2 会话安全要求 128 位加密
网络安全:基于 NTLM SSP 的(包括安全 RPC)客户端的最小会话安全要求 NTLMv2 会话安全要求 128 位加密
网络安全:LAN 管理器身份验证级别仅发送 NTLMv2 响应拒绝 LM&NTLM
网络访问:不允许 SAM 帐户的匿名枚举启用
网络访问:不允许 SAM 帐户和共享的匿名枚举启用
网络访问:可匿名访问的共享
网络访问:可匿名访问的命名管道
网络访问:可远程访问的注册表路径空,不允许远程访问注册表
网络访问:可远程访问的注册表路径和子路径空,不允许远程访问注册表

禁用未登录前关机

服务器默认是禁止在未登录系统前关机的。如果启用此设置,服务器安全性将会大大降低,给远程连接的黑客造成可乘之机,强烈建议禁用未登录前关机功能。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 安全选项 中,禁用 关机:允许系统在未登录前关机 策略。

image-20240719201413913

其他安全配置

防病毒管理

Windows 系统需要安装防病毒软件。

操作步骤

安装企业级防病毒软件,并开启病毒库更新及实时防御功能。

设置屏幕保护密码和开启时间

设置从屏幕保护恢复时需要输入密码,并将屏幕保护自动开启时间设定为五分钟。

操作步骤

启用屏幕保护程序,设置等待时间为 5 分钟,并启用 在恢复时使用密码保护

限制远程登录空闲断开时间

对于远程登录的帐户,设置不活动超过时间 15 分钟自动断开连接。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 安全选项 中,设置 Microsoft 网络服务器:暂停会话前所需的空闲时间数量 属性为 15 分钟。

操作系统补丁管理

安装最新的操作系统 Hotfix 补丁。安装补丁时,应先对服务器系统进行兼容性测试。

操作步骤

安装最新的操作系统 Hotfix 补丁。安装补丁时,应先对服务器系统进行兼容性测试。

注意:对于实际业务环境服务器,建议使用通知并自动下载更新,但由管理员选择是否安装更新,而不是使用自动安装更新,防止自动更新补丁对实际业务环境产生影响。

开启本地防火墙

执行firewall.cpl,开启防火墙

Nginx安全加固

适用情况

适用于使用Nginx进行部署的Web网站。

技能要求

熟悉Nginx配置,能够Nginx进行部署,并能针对站点使用Nginx进行安全加固。

前置条件

1、 根据站点开放端口,进程ID,确认站点采用Nginx进行部署;

2、 找到Nginx安装目录,针对具体站点对配置文件进行修改;

3、 在执行过程中若有任何疑问或建议,应及时反馈。

详细操作

日志配置

1、备份nginx.conf 配置文件。

修改配置,按如下设置日志记录文件、记录内容、记录格式,添加标签为main的log_format格式(http标签内,在所有的server标签内可以调用):

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
   '$status $body_bytes_sent "$http_referer" '
   '"$http_user_agent" "$http_x_forwarded_for"';

image-20240719112254678

2、在server标签内,定义日志路径

access_log logs/host.access.log main;

3、保存,然后后重启nginx服务。

禁止目录浏览

备份nginx.conf配置文件。

编辑配置文件,HTTP模块添加如下一行内容:

autoindex off;

image-20240719141702794

保存,然后后重启nginx服务。

限制目录执行权限

备份nginx.conf配置文件。

编辑配置文件,在server标签内添加如下内容:

#示例:去掉单个目录的PHP执行权限
location ~ /attachments/.*\.(php|php5)?$ {
deny all;
}

#示例:去掉多个目录的PHP执行权限
location ~
/(attachments|upload)/.*\.(php|php5)?$ {
deny all;
}

image-20240719142132904

保存,然后后重启nginx服务。

需要注意两点:

  1. 以上的配置文件代码需要放到 location ~ .php{…}上面,如果放到下面是无效的;
  2. attachments需要写相对路径,不能写绝对路径。

最佳经验实践

隐藏版本信息

备份nginx.conf配置文件。

编辑配置文件,添加http模块中如下一行内容:

server_tokens off;

image-20240719142449159

限制HTTP请求方法

备份nginx.conf配置文件。

编辑配置文件,添加如下内容:

if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 444;
}

这样只允许常用的GET和POST方法,以及HEAD方法,其他的方法都被禁用了

image-20240719143157005

限制IP访问

备份nginx.conf配置文件。

编辑配置文件,在server标签内添加如下内容:

location / {
deny 192.168.1.1; #拒绝IP
allow 192.168.1.0/24; #允许IP
allow 10.1.1.0/16; #允许IP
deny all; #拒绝其他所有IP
}

image-20240719143551552

限制并发和速度

备份nginx.conf配置文件。

编辑配置文件,在server标签内添加如下内容:

limit_zone one $binary_remote_addr 10m;
server
{
     listen   80;
     server_name down.test.com;
     index index.html index.htm index.php;
     root  /usr/local/www;
     #Zone limit;
     location / {
         limit_conn one 1;
         limit_rate 20k;
     }
………
}

image-20240719143925838

控制超时时间

备份nginx.conf配置文件。

编辑配置文件,具体设置如下:

client_body_timeout 10;  #设置客户端请求主体读取超时时间
client_header_timeout 10;  #设置客户端请求头读取超时时间
keepalive_timeout 5 5;  #第一个参数指定客户端连接保持活动的超时时间,第二个参数是可选的,它指定了消息头保持活动的有效时间
send_timeout 10;  #指定响应客户端的超时时间

image-20240719144047102

对php 5.4配置进行加固

PHP基线检查及加固概述

PHP的安检和加固项通常在php.ini的配置文件中进行配置

启用PHP的安全模式

注意: PHP <=5.2 环境适用的安全模式是一个非常重要的内嵌安全机制,PHP 安全模式能有效控制一些 PHP 环境中的函数(例如system()函数),对大部分的文件操作函数进行权限控制,同时不允许对某些关键文件进行修改(例如 /etc/passwd)。但是,默认的 php.ini 配置文件并没有启用安全模式。
您可以通过修改 php.ini 配置文件启用 PHP 安全模式:safe_mode = on

控制 PHP 脚本能访问的目录

使用open_basedir选项能够控制 PHP 脚本只能访问指定的目录,这样能够避免 PHP 脚本访问不应该访问的文件,一定程度下降低了 phpshell 的危害。一般情况下,可以设置为只能访问网站目录:open_basedir = "/var/www/html:/tmp"

image-20240719153941691

关闭危险函数

如果您启用了安全模式,那么可以不需要设置函数禁止,但为了安全考虑,还是建议您进行相关设置。例如,您不希望执行包括system()等在内的执行命令的 PHP 函数,以及能够查看 PHP 信息的phpinfo()等函数,那么您可以通过以下设置禁止这些函数:
disable_functions = system, passthru, exec, shell_exec, popen, phpinfo, escapeshellarg, escapeshellcmd, proc_close, proc_open
如果您想要禁止对于任何文件和目录的操作,那么您可以关闭以下文件相关操作。
disable_functions = chdir, chroot, dir, getcwd, opendir, readdir, scandir, fopen, unlink, delete, copy, mkdir, rmdir, rename, file, file_get_contents, fputs, fwrite, chgrp,chmod, chown
注意: 以上设置中只列举了部分比较常用的文件处理函数,您也可以将上面的执行命令函数和这些文件处理函数相结合,就能给抵制大部分的 phpshell 威胁。

关闭PHP版本信息在HTTP头中的泄露

为了防止黑客获取服务器中 PHP 版本的信息,您可以禁止该信息在 HTTP 头部内容中泄露:expose_php = off
这样设置之后,黑客在执行telnet 80尝试连接您的服务器的时候,将无法看到 PHP 的版本信息。

image-20240719154419581

关闭注册全局变量

注意: PHP < = 5.2适用

在 PHP 环境中提交的变量,包括使用 POST 或者 GET 命令提交的变量,都将自动注册为全局变量,能够被直接访问。这对您的服务器是非常不安全的,因此建议您将注册全局变量的选项关闭,禁止将所提交的变量注册为全局变量。
register_globals = off

当然,如果这样设置之后,获取对应变量的时候就需要采取合理方式。例如,获取 GET 命令提交的变量 var,就需要使用$_GET[‘var’]命令来进行获取,在进行 PHP 程序设计时需要注意。

SQL注入防护

注意: PHP <= 5.3.0

SQL 注入是一个非常危险的问题,小则造成网站后台被入侵,重则导致整个服务器沦陷。magic_quotes_gpc选项默认是关闭的。如果打开该选项,PHP 将自动把用户提交对SQL 查询的请求进行转换(例如,把 ’ 转换为 \’ 等),这对于防止 SQL 注入攻击有很大作用,因此建议您将该选项设置为:magic_quotes_gpc = on

但是防止不了宽字节注入

错误信息控制

一般 PHP 环境在没有连接到数据库或者其他情况下会有错误提示信息,错误信息中可能包含PHP脚本当前的路径信息或者查询的SQL语句等信息,这类信息如果暴露给黑客是不安全的,因此建议您禁止该错误提示:display_errors = Off
如果您确实要显示错误信息,一定要设置显示错误信息的级别。例如,只显示警告以上的错误信息:error_reporting = E_WARNING & E_ERROR
注意: 强烈建议您关闭错误提示信息。

image-20240719154943790

image-20240719155028420

错误日志

建议您在关闭错误提示信息后,对于错误信息进行记录,便于排查服务器运行异常的原因:log_errors = On

同时,需要设置错误日志存放的目录,建议您将 PHP 错误日志与 Apache 的日志存放在同一目录下:error_log = /usr/local/apache2/logs/php_error.log

注意: 该文件必须设置允许 Apache 用户或用户组具有写的权限。

image-20240719155454701

扩展:对mysql服务进行配置,实现用户的权限限制

root用户登录到mysql

mysql -u root -p

image-20240719165605967

创建数据库和用户

-- 创建数据库
CREATE DATABASE db_web1;
-- 创建用户并设置密码
CREATE USER 'user_web1'@'localhost' IDENTIFIED BY '123456';
-- 授予用户对数据库的所有权限
GRANT ALL PRIVILEGES ON db_web1.* TO 'user_web1'@'localhost';
-- 刷新权限
FLUSH PRIVILEGES;

image-20240719170328532

我们先试着从本地登录

mysql -u user_web1 -p

image-20240719171245526

这里显示我们的user_web1的权限能访问当前数据库

我们输入如下命令

nano /etc/mysql/conf.d/mysql.cnf

输入bind-address=0.0.0.0后保存,如下图所示

image-20240719171349450

执行 sudo systemctl restart mysql 重启服务

用本机的navicat连接虚拟机的sql账户,在这之前先开启虚拟机的3306端口

sudo ufw allow 3306

57c31bb18deee2678d258621948dba2e

我们可以看到已经成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值