为什么我不能使用此代码在我的文件上使用数字签名?

时间:2016-08-06 16:33:18

标签: php command

$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

2 个答案:

答案 0 :(得分:0)

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

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

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

修改: 在你的情况下,你想要被抛弃而没有要求通过的命令是 " gpg --clearsign"

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

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

su www-data
sudo gpg --clearsign asd.txt;
你能看到新的东西吗? 是否询问了root密码?

答案 1 :(得分:0)

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

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

在php中,我们无法在提示符中输入传递,我们必须使用以下参数在命令中发送此传递:

--passphrase 12345

所以你的命令当然会通过正确的传递:

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