权限困境 - 私钥对于终端 SSH 要求 600,对于 PHP 则更开放

权限困境 - 私钥对于终端 SSH 要求 600,对于 PHP 则更开放

我有一个私钥文件,将在以下两种用例中使用:

  • SSH -i /path/to/private/key在航站楼内——需要设置 600 个权限
  • file_get_contents()PHP 中的语句——需要设置更多开放权限

该文件当前已设置为600允许通过终端在 SSH 中使用。然而,正因为如此,当我尝试在 PHP 中读取该文件时,出现了权限被拒绝的情况。

请问有人可以建议一个可行的解决方案,同时保持密钥文件的良好安全性,以使我能够对上述两种用例使用相同的密钥文件吗?


编辑:为了澄清起见,我正在使用安全库(相对于PECL 的 SSH2 扩展)连接到亚马逊 EC2PHP 中的实例。以下是代码示例:

$key = new Crypt_RSA();
$key->loadKey(file_get_contents('private_key.pem'));

$ssh = new Net_SSH2('amazon-ec2-ip');
$ssh->login('ubuntu', $key); // HERRO PRIVATE KEY

答案1

如果你使用苏普,您可以允许该脚本在拥有密钥的脚本的同一用户下运行。

编辑:

根据您的说明(以及其他人的评论),最好为您的脚本专门生成一个新密钥,并赋予其 Web 用户的权限。通常最好为每个用户/脚本设置一个新密钥。

有关为什么这是最佳实践的更多信息,请查看关联。

答案2

如果您非常关心私钥的安全性,那么您唯一真正的选择就是生成一个不同的私钥以用于 PHP 脚本;最好将此密钥与服务器端的强制命令相关联,以限制因私钥被泄露而导致的暴露。

如果你完全关心您的私钥的安全性,您可以从源代码重新编译 SSH 客户端,这样就可以强制它不关心您的私钥文件的权限。

如果您根本不关心安全性,那么您可以在自己的用户帐户下运行 PHP 脚本,从而(大概)运行 Web 服务器。

相关内容