Dify 框架连接 PGSQL 数据库与 Sandbox 情况下的 Linux 系统调用权限问题 ...

打印 上一主题 下一主题

主题 1908|帖子 1908|积分 5724

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
Dify 框架连接 PGSQL 数据库与 Sandbox 情况下的 Linux 系统调用权限问题

背景

在利用 Dify 框架举行开发时,遇到了两个主要的技能挑战:

  • 代码节点连接到 PGSQL(PostgreSQL)数据库
  • 解决沙盒情况中由于系统调用限制导致的“operation not permitted”错误
本文档将详细形貌如何解决这两个问题,并先容 psycopg2-binary Python 依赖的作用及其设置方法。同时,我们将夸大设置文件修改后正确重启服务的告急性。
技能解决方案

PGSQL 数据库连接

为了使基于 Python 的 Dify 应用可以大概与 PostgreSQL 数据库通信,我们在 volumessandboxdependenciespython-requirements.txt 文件中添加了 psycopg2-binary==2.9.10 依赖。该库提供了一个 PostgreSQL 数据库适配器,它包罗了预编译的二进制文件,简化了安装过程,避免了需要单独编译 C 扩展的问题。
  1. # volumes/sandbox/dependencies/python-requirements.txt
  2. psycopg2-binary==2.9.10
复制代码
当 Docker Compose 构建服务时,它会读取此文件并安装列出的全部 Python 包,包括 psycopg2-binary,从而为应用程序提供与 PGSQL 数据库交互的能力。安装完成后,通过代码节点设置应用中的数据库连接参数(如主机、端口、用户名、密码等),实现了代码节点与 PGSQL 数据库的乐成连接。
Sandbox 中的 Linux 系统调用权限问题

在尝试运行代码节点时,遇到了如下错误信息:
  1. error: operation not permitted
复制代码
此错误表明应用程序尝试执行的操纵被操纵系统或沙盒情况所禁止。经分析,确定这是由于沙盒情况中对特定 Linux 系统调用的访问权限不敷造成的。
为了解决这个问题,采取了以下步骤:


  • 调解沙盒策略:在 volumessandboxconfconfig.yaml 文件中扩展了 allowed_syscalls 列表,以答应必要的系统调用。这确保了沙盒内的应用程序可以执行所需的底层操纵系统功能,而不会遇到权限错误。
下面是一个简化的 config.yaml 设置示例,此中列出了部门关键系统调用编号,表现这些操纵是被答应的:
  1. allowed_syscalls:
  2.   # 基础文件操作
  3.   - 0   # read - 从文件描述符读取数据
  4.   - 1   # write - 向文件描述符写入数据
  5.   - 2   # open - 打开文件
  6.   - 3   # close - 关闭文件描述符
  7.   - 4   # stat - 获取文件状态
  8.   - 5   # fstat - 获取文件描述符状态
  9.   - 6   # lstat - 获取符号链接状态
  10.   - 7   # poll - 等待文件描述符上的事件
  11.   - 8   # lseek - 重新定位读/写文件偏移量
  12.   - 9   # mmap - 将文件或设备映射到内存
  13.   - 10  # mprotect - 设置内存区域的保护
  14.   - 11  # munmap - 取消内存映射
  15.   - 12  # brk - 改变数据段大小
  16.   # 系统操作
  17.   - 13  # rt_sigaction - 检查或修改信号处理
  18.   - 14  # rt_sigprocmask - 检查或修改阻塞信号
  19.   - 15  # rt_sigreturn - 从信号处理程序返回
  20.   - 16  # ioctl - 控制设备
  21.   - 17  # pread64 - 从指定偏移量读取
  22.   - 18  # pwrite64 - 向指定偏移量写入
  23.   - 19  # readv - 从文件描述符读取数据到多个缓冲区
  24.   - 20  # writev - 从多个缓冲区写入数据到文件描述符
  25.   - 21  # access - 检查文件访问权限
  26.   - 22  # pipe - 创建管道
  27.   - 23  # select - 同步 I/O 多路复用
  28.   - 24  # sched_yield - 让出处理器
  29.   - 25  # mremap - 重新映射虚拟内存地址
  30.   # 高级内存管理
  31.   - 26  # msync - 同步内存与物理存储
  32.   - 27  # mincore - 确定内存页是否驻留在内存中
  33.   - 28  # madvise - 给出内存使用建议
  34.   - 29  # shmget - 获取共享内存段
  35.   - 30  # shmat - 附加共享内存段
  36.   - 31  # shmctl - 共享内存控制
  37.   - 32  # dup - 复制文件描述符
  38.   - 33  # dup2 - 复制文件描述符到指定编号
  39.   - 34  # pause - 挂起进程直到收到信号
  40.   # 进程管理
  41.   - 35  # nanosleep - 高精度睡眠
  42.   - 36  # getitimer - 获取定时器值
  43.   - 37  # alarm - 设置定时器
  44.   - 38  # setitimer - 设置定时器
  45.   - 39  # getpid - 获取进程ID
  46.   - 40  # sendfile - 在文件描述符之间传输数据
  47.   # 网络操作
  48.   - 41  # socket - 创建套接字
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

忿忿的泥巴坨

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表