gpt4 book ai didi

gtk - 使用 GTK+ 的设置

转载 作者:行者123 更新时间:2023-12-02 07:49:11 27 4
gpt4 key购买 nike

我正在尝试编写一个程序并将其与使用 Gtk+ 构建的 gui 集成。然而,将由 gui 调用的 exe 设置了 setuid 位。但是 gtk 不允许此 exe 按照 gtk 社区的规定运行。然而,他们说我们必须编写单独的帮助程序等等。我真的不明白那是什么意思。任何人都可以请阐明如何克服这个问题?我真的需要立即解决。

最佳答案

第一个问题:为什么你的程序是setuid?编写 setuid 程序不是自称 Linux 新手应该玩的游戏。他们很危险。它们很有用——不要误会我的意思。但是它们很危险,而且很难安全地编写。

GTK+ 项目在 ' GTK+ - Using setuid 上非常坦率地陈述了他们对 setuid 程序的看法。 '。他们给出了他们的理由——好的理由。它们指出了如何避免问题:

In the opinion of the GTK+ team, the only correct way to write a setuid program with a graphical user interface is to have a setuid backend that communicates with the non-setuid graphical user interface via a mechanism such as a pipe and that considers the input it receives to be untrusted.

既然你要写一个帮助程序,你有没有找过例子?他们很可能是被给予的。您的程序本身是 GUI 应用程序吗?


I need root privileges [...] to open some peripheral devices, read the data available in their memory, and then close them...this cannot be done without root perms...also the data read is processed and displayed simultaneously using GTK.

所以,这正是 GTK+ 团队所描述的那种场景。您需要一个由 GUI 启动的小型 setuid 根程序,并通过管道或 Unix 域套接字或其他类似技术连接到它。

当您需要来自外围设备的数据时,您的主应用程序会向守护程序/帮助程序写入请求,然后等待包含数据的响应。

总的来说,您的 GUI 中将包含以下代码:

  • Lau​​nchDaemon():这将创建管道(管道或套接字)、fork,并且子进程将在启动守护进程之前整理文件描述符(关闭它不需要的)。
  • RequestDaemon():这会将请求打包到守护程序/帮助程序,将信息写入守护程序,并读回响应。
  • TerminateDaemon():这将关闭与守护程序/帮助程序的连接;它会知道它没有更多的工作要做并退出。

同时,您的守护程序/帮助程序将:

  • 进入一个舒适的循环:
    • 从标准输入读取请求
    • 检查其有效性
    • 执行请求
    • 格式化响应(错误或正常)
    • 将其写回主 GUI
    • 重复
  • 当它从输入中获得 EOF 时,它会终止。
  • 如果可能,它会打开设备一次,然后放弃 root 权限。
    • 这样可以最大限度地减少遭受攻击的风险。
    • 如果程序不再以 root 身份运行,则不能滥用它来做只有 root 才能做的事情。
    • 一旦打开文件,就不会再次检查权限(因此以 root 身份运行的守护进程可以打开文件,如果不重新打开文件,则丢弃其 root 权限)。

您仍然应该查看外围设备的权限是否正确 - 或者为什么您需要从只有 root 才能读取的东西中读取数据。

关于gtk - 使用 GTK+ 的设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4705959/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com