当前位置:首页 » 《随便一记》 » 正文

nginx降权及匹配php

7 人参与  2022年11月27日 13:05  分类 : 《随便一记》  评论

点击全文阅读


1.nginx降权

1.1 capabilities的介绍与运用

1.2 用普通用户启动nginx

1.3 root用户权限赋予

1.4 查看普通用户的nginx权限

1.5 查看nginx的欢迎网页

 2.nginx与php的相互匹配

2.1 安装php及php-fpm包

2.2 检查php-fpm服务运行状态

2.3 php-fpm上的配置

2.4 nginx上的配置

2.4 检测nginx与php是否匹配成功


1.nginx降权

1.1 capabilities的介绍与运用

在Linux内核2.2之前,为了检查进程权限,将进程区分为两类:特权进程(euid=0)和非特权进程。特权进程(通常为带有suid的程序)可以获取完整的root权限来对系统进行操作,但是如此操作会导致普通用户的权限过大,使得攻击者也会拥有重要进程的root权限,十分危险。

在linux内核2.2之后引入了capabilities机制,来对root权限进行更加细粒度的划分。如果进程不是特权进程,而且也没有root的有效id,系统就会去检查进程的capabilities,来确认该进程是否有执行特权操作的的权限。

这样一来,权限检查的过程就变成了:在执行特权操作时,如果线程的有效身份不是root,就去检查其是否具有该特权操作所对应的capabilities,并以此为依据,决定是否可以执行特权操作。

注意:如果Capabilities设置不正确,就会让攻击者有机可乘,实现权限提升。

可以通过man capabilities来查看具体的capabilities。

capability名称描述
CAP_AUDIT_CONTROL启用和禁用内核审计;改变审计过滤规则;检索审计状态和过滤规则
CAP_AUDIT_READ允许通过 multicast netlink 套接字读取审计日志
CAP_AUDIT_WRITE将记录写入内核审计日志
CAP_BLOCK_SUSPEND使用可以阻止系统挂起的特性
CAP_CHOWN修改文件所有者的权限
CAP_DAC_OVERRIDE忽略文件的 DAC 访问限制
CAP_DAC_READ_SEARCH忽略文件读及目录搜索的 DAC 访问限制
CAP_FOWNER忽略文件属主 ID 必须和进程用户 ID 相匹配的限制
CAP_FSETID允许设置文件的 setuid 位
CAP_IPC_LOCK允许锁定共享内存片段
CAP_IPC_OWNER忽略 IPC 所有权检查
CAP_KILL允许对不属于自己的进程发送信号
CAP_LEASE允许修改文件锁的 FL_LEASE 标志
CAP_LINUX_IMMUTABLE允许修改文件的 IMMUTABLE 和 APPEND 属性标志
CAP_MAC_ADMIN允许 MAC 配置或状态更改
CAP_MAC_OVERRIDE忽略文件的 DAC 访问限制
CAP_MKNOD允许使用 mknod() 系统调用
CAP_NET_ADMIN允许执行网络管理任务
CAP_NET_BIND_SERVICE允许绑定到小于 1024 的端口
CAP_NET_BROADCAST允许网络广播和多播访问
CAP_NET_RAW允许使用原始套接字
CAP_SETGID允许改变进程的 GID
CAP_SETFCAP允许为文件设置任意的 capabilities
CAP_SETPCAP参考 capabilities man page
CAP_SETUID允许改变进程的 UID
CAP_SYS_ADMIN允许执行系统管理任务,如加载或卸载文件系统、设置磁盘配额等
CAP_SYS_BOOT允许重新启动系统
CAP_SYS_CHROOT允许使用 chroot() 系统调用
CAP_SYS_MODULE允许插入和删除内核模块
CAP_SYS_NICE允许提升优先级及设置其他进程的优先级
CAP_SYS_PACCT允许执行进程的 BSD 式审计
CAP_SYS_PTRACE允许跟踪任何进程
CAP_SYS_RAWIO允许直接访问 /devport、/dev/mem、/dev/kmem 及原始块设备
CAP_SYS_RESOURCE忽略资源限制
CAP_SYS_TIME允许改变系统时钟
CAP_SYS_TTY_CONFIG允许配置 TTY 设备
CAP_SYSLOG允许使用 syslog() 系统调用
CAP_WAKE_ALARM允许触发一些能唤醒系统的东西(比如 CLOCKBOOTTIMEALARM 计时器)

由于这里我们的目标是为nginx降权,所以我们这里主要使用的capabilities指令为CAP_NET_BIND_SERVICE 用它绑定 nginx 的端口赋予普通用户nginx的端口权限。(nginx的默认端口为80)

1.2 用普通用户启动nginx

 现在在普通用户的 /www/env/nginx/sbin目录即 nginx安装目录下无法启动nginx服务说明,说明现在普通用户没有nginx的使用权限。

1.3 root用户权限赋予

指令:setcap CAP_NET_BIND_SERVICE=eip nginx  

 使用 getcap 指令查看nginx的端口权限绑定成功

注意:这里要更改nginx的所属关系为普通用户

1.4 查看普通用户的nginx权限

用普通用户启动nginx

 查看nginx程序的进程都为普通用户创建

 说明nginx的降权操作成功

1.5 查看nginx的欢迎网页

 2.nginx与php的相互匹配

2.1 安装php及php-fpm包

apt install phpapt install php-fpm

2.2 检查php-fpm服务运行状态

systemctl status php8.1-fpm

 2.3 php-fpm上的配置

在php的安装目录下找到 php/8.1/fpm/pool.d/www.conf 的配置文件打开

  修改php监听的端口号为本机的9000端口

取消所选框字段的注释  listen.allowed_clients 字段是允许监听的服务端,这里设为只允许本机监听,否则会触发 php-fpm服务的未授权访问漏洞。

2.4 nginx上的配置

在nginx的安装目录下找到 nginx/conf/nginx.conf 的配置文件打开

 找到所选框内关于与php相互匹配的注释,将注释取消,开通二者的匹配关系。

2.4 检测nginx与php是否匹配成功

在nginx/html 的目录下创建一个 index.php 文件:

文件内容:

<?phpphpinfo()?>

从浏览器的nginx界面打开 index.php 文件

成功标志着nginx与php相互匹配成功。


点击全文阅读


本文链接:http://zhangshiyu.com/post/49117.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1