0

我需要能够通过 php 脚本修改我的 openvpn 身份验证文件。我已将我的 http 用户设置为不通过 sudoer,因为这台机器仅在我的家庭网络中可用。

我目前有以下命令:

echo shell_exec("sudo echo '".$username."' > /etc/openvpn/auth.txt");
echo shell_exec("sudo echo '".$password."' >> /etc/openvpn/auth.txt");

但是在运行时,它们根本不会更改文件,也不会在 php.ini 中提供任何输出。

我该如何进行这项工作?

4

2 回答 2

3

您可以以 root 身份运行副本,而不是以 root 身份运行整个 shell 进程,这可以说是不安全的:

(用bash):

sudo cp <(echo "$username") /etc/openvpn/auth.txt

(应该适用于任何外壳):

echo "$username" | sudo dd of=/etc/openvpn/auth.txt
于 2013-07-01T05:11:44.173 回答
1

当你跑

sudo command > file

只有命令作为 sudo 运行,而不是重定向。

正如你所指出的,sudo sh -c "command > file"会工作。但除非你真的想运行commandas sudo,否则你不应该这样做。您只能将重定向部分作为 sudo 运行。rici 的答案涵盖了两种方法。这是另一种方法:

command | sudo tee filename >/dev/null #to overwrite (command > file)
command | sudo tee -a filename >/dev/null # to append (command >> file)
于 2013-07-01T05:16:34.253 回答