我目前正在开发一个用PHP进行系统更改的项目(例如,更改Nginx /重启服务的配置文件).
PHP脚本在localhost上运行.在我看来,最好的(读取:最安全)方式是使用SSH建立连接.我考虑以下选项之一:
选项1:在php会话中存储用户名/密码并提示输入sudo
使用带有用户名/密码的phpseclib,将这些值保存在php会话中,并为每个命令提示sudo.
选项2:使用root登录
在登录脚本中使用phpseclib和root用户名和密码.在这种情况下,您不必向用户询问sudo.(不是真正安全的解决方案)
<?php
include('Net/SSH2.php');
$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('root', 'root-password')) {
exit('Login Failed');
}
?>
Run Code Online (Sandbox Code Playgroud)
选项3:使用从文件中读取的公钥进行身份验证
使用带有公钥的PHP SSHlib进行身份验证,并将pubkey放在www root之外.
<?php
$connection = ssh2_connect('shell.example.com', 22, array('hostkey' => 'ssh-rsa'));
if (ssh2_auth_pubkey_file($connection, 'username', '/home/username/.ssh/id_rsa.pub', '/home/username/.ssh/id_rsa', 'secret')) {
echo "Public Key Authentication Successful\n";
} else {
die('Public Key Authentication Failed');
}
?>
Run Code Online (Sandbox Code Playgroud)
方案4:?
Ehs*_*san 11
我建议你通过3个简单步骤完成这项工作:
第一.
创建另一个用户(例如runner)并使您的敏感数据(如用户/通行证,私钥等)可供该用户访问.换句话说,拒绝你的PHP代码有权访问这些数据.
第二. 之后创建一个简单的阻塞fifo管道并授予对php用户的写访问权限.
持续.
最后编写一个简单的守护进程来读取fifo中的行,并通过ssh命令执行它.与runner用户一起运行此守护程序.
要执行命令,您只需要在文件(fifo管道)中编写命令.如果需要,输出可以在另一个管道或一些简单文件中重定向.
使fifo使用这个简单的命令:
mkfifo "FIFONAME"
Run Code Online (Sandbox Code Playgroud)
运行器守护程序将是一个简单的bash脚本,如下所示:
#!/bin/bash
while [ 1 ]
do
cmd=$(cat FIFONAME | ( read cmd ; echo $cmd ) )
# Validate the command
ssh 192.168.0.1 "$cmd"
done
Run Code Online (Sandbox Code Playgroud)
在此之后,您可以信任您的代码,如果您的PHP代码完全被黑,您的上游服务器是安全的.在这种情况下,攻击者根本无法访问您的敏感数据.他可以向你的runner守护进程发送命令,但如果你正确验证命令,就不用担心了.
:-)
| 归档时间: |
|
| 查看次数: |
2353 次 |
| 最近记录: |