我要做的是编写一个允许某人注册的脚本,以及何时输入他们的pgp公钥。这似乎很容易。
这就是我所坚持的。
我在系统用户下设置了密钥环,因此当我想添加密钥时,我必须这样做:
sudo -u encryption /usr/bin/gpg --homedir /var/gpg/.gnupg --keyserver hkp://keys.keyserver.org --search myemail@DOMAIN.COM ( or --import key.asc )
(加密是系统用户)
所以当用户注册时我需要他们的密钥才能到达正确的位置,这意味着我必须sudo,从我看到的意思是我必须做一个exec()。
所以我可以:
$command = "insert command string to be executed here";
$oldhome = getEnv("HOME");
putenv("HOME=/var/gpg/.gnupg");
$result = exec($command, $output, $errorcode);
putenv("HOME=$oldhome");
我猜测exec()的使用是不受欢迎的,更不用说不得不sudo给另一个用户了。另外,这对我来说似乎不对。
同样从我读过的内容来看,sudo部分必须使用无密码的sudo。
%admin ALL=(ALL) NOPASSWD: ALL
同时注释掉以下行(在/ etc / sudoers中通过visudo),如果它在那里:
Defaults requiretty
有更好,更安全的方法吗?我想我可以移动密钥环来说明www-data,但我不确定其含义是什么。密码环由邮件服务器使用来加密邮件,因此它可以真正地移动到任何地方。
我希望这是有道理的。感谢。
更新:
我在这里可能错了,但这就是我“解决这个问题”的方法
www-data ALL=(encryption) NOPASSWD:/usr/bin/gpg
这就是我的sudoers文件中的内容。这真的只允许它只运行那个命令,除非我在阅读中弄错了,如果有的话请告诉我。
这样我可以运行exec(),现在我唯一需要担心的是验证数据。