0

我正在尝试做的是编写一个脚本,允许某人注册以及何时输入他们的 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

如果存在以下行(通过 visudo 在 /etc/sudoers 中),还要注释掉:

Defaults    requiretty

有没有更好、更安全的方法来解决这个问题?我想我可以移动钥匙圈说 www-data 但我不确定这意味着什么。邮件服务器使用密钥环来加密邮件,因此它可以真正移动到任何地方。

我希望这是有道理的。谢谢。

更新:

我很可能在这里错了,但这就是我“解决这个问题”的方法

www-data ALL=(encryption) NOPASSWD:/usr/bin/gpg

这就是我的 sudoers 文件中的内容。除非我在阅读中弄错了,否则它实际上只允许它运行该命令,如果是这样,请告诉我。

这样我就可以运行 exec() 了,现在我唯一需要担心的是验证数据。

4

0 回答 0