【问题标题】:Why cant i use this code to use digital signature on my file?为什么我不能使用此代码在我的文件上使用数字签名?
【发布时间】:2016-08-06 16:33:18
【问题描述】:
$lol = system("sudo gpg --clearsign asd.txt;");

是因为我需要 gpg 的密码吗?

sudoers:

root ALL=(ALL) NOPASSWD:ALL

apache ALL=(ALL) NOPASSWD:ALL

www-data ALL=(ALL) NOPASSWD:ALL

【问题讨论】:

  • 欢迎使用 Stack Overflow。请始终提供您在运行您发布的代码时遇到的错误消息,因为它总是特定于您的系统。
  • 命令返回值为2。使用CENTOS
  • 我将命令更改为:$lol = shell_exec("echo $passphrase | sudo gpg --passphrase-fd 0 --clearsign asd.txt");
  • 即使 --passphrase-fd 0 假设将密码放在前面也不起作用
  • 我使用 visudo 将 apache 更改为 NOPASSSWD:ALL

标签: php command


【解决方案1】:

在这种情况下,您不能使用 sudo,因为它会要求输入密码。 您可以使用 sudoers 来避免需要密码,仅适用于某些选择的命令,仅适用于选择的某些用户,以确保安全。

这是一些示例documentation,请查找您的操作系统。

请提供可能发生的错误(参见 apache 和 bash 错误日志),因为其他问题可能隐藏在此错误后面。

编辑: 在您的情况下,您想要在不要求通过的情况下被 sudoed 的命令是 "gpg --clearsign"

实际启动此命令的用户是“www-data”,而不是 apache,因此请相应地更新您的 sudoers,这将起作用。

编辑2: 让我们模拟一下 php 的行为。 PHP(实际上是 apache,所以 www-data 用户)必须 sudo 命令。让我们在 bash 中执行此操作:

su www-data
sudo gpg --clearsign asd.txt;

你能看到新的东西吗? 是否询问过 root 密码?

【讨论】:

    【解决方案2】:

    另一个密码相关的问题,但这次是在gpg方面:

    gpg 在解密文件时要求输入密码,并带有提示。

    在 php 中我们不能在提示符中输入 pass,我们必须在命令中发送这个 pass,并带有这个参数:

    --passphrase 12345
    

    所以你的命令当然应该是正确的:

    $lol = system("sudo gpg --passphrase 12345 --clearsign asd.txt;");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-28
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      • 2023-01-09
      相关资源
      最近更新 更多