不使用exec()运行命令,但用php更改用户

时间:2013-09-19 00:09:10

标签: php linux permissions sudo

我要做的是编写一个允许某人注册的脚本,以及何时输入他们的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(),现在我唯一需要担心的是验证数据。

0 个答案:

没有答案