gpt4 book ai didi

PHP 为 sudo 创建 'fake' TTY

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:28:10 24 4
gpt4 key购买 nike

保持简短;

PHP 脚本需要运行 /etc/init.d/nagios reload,添加 apache ALL = (nagios) NOPASSWD:/etc/init.d/nagios 到sudo-ers 文件,但要使用 SUDO PHP 需要一个 TTY(我不想删除 Defaults requiretty 所以我想“伪造”或为 PHP 脚本创建一个 TTY,以便它可以重新加载Nagios。

红帽 6、PHP 5.3

最佳答案

这是可以做到的——sudo 的 requiretty 选项相对容易破解,因此它本身并没有真正增加多少安全性。如果您真的确定要保留它(也许您需要支持在默认情况下打开 requiretty 的用户系统上运行您的脚本?)那么制作 tty 可能真的是正确的解决方案.

不过,这在纯 PHP 中可能会是一个巨大的痛苦。我在 php.net 上搜索了引用文档,但没有看到任何迹象表明它具有用于分配或使用 ptys 的任何内置实用程序函数。如果您真的想在纯 PHP 中执行此操作,您可能需要引用 forkpty() 调用的 glibc 源代码(包括它具有的其他依赖项,如 openpty()、getpt()、grantpt()、 unlockpt() 等)。在其核心,这将涉及 open()'ing/dev/ptmx 中的伪终端主设备以获取主 PT 文件描述符,执行 chown 和 TIOCSPTLCK ioctl,然后确定/dev/pts 中的哪个设备是相应的从设备fd 并打开它。

但我强烈建议在 PHP 之外做 tty 伪造部分,可能是通过在 Python 中打开一些 sudo 包装器脚本(它在 pty module 中有一些非常方便的函数)或者甚至是 bash + 类似 socat 的东西。

关于PHP 为 sudo 创建 'fake' TTY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7994862/

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