$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
答案 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;");