2

动态地我想编辑/更新主机(etc/hosts)文件以添加域。

要编辑主机(etc/hosts)文件需要管理员权限。使用 Linux 我可以通过这个命令做到这一点

须藤 gedit /etc/hosts

但我试图通过使用编程语言来做到这一点。

我该怎么做?

4

4 回答 4

2

最好的办法是使用 SSH 之类的东西并以 root 身份(或 system() 中的 sudo)连接到计算机,修改文件然后断开连接。这样做的另一个好处是方便提示用户输入密码。

要在没有提示的情况下执行此操作,用户必须设置一些方法来root 身份完成它。即设置帮助应用程序、安装无密码密钥、修改 LDAP 树或各种其他方式。由于缺乏更好的术语,这有点“恶心”。

对于通常没有权限提升功能的用户,没有办法使这项工作。

于 2009-10-29T07:14:54.090 回答
2

您的程序需要以适当的权限运行。经典技术之一是使文件为 root 拥有并设置 setuid 位。当您的程序运行时,它将成为 root 并且能够修改 /etc/hosts。

也就是说,setuid 代码是有风险的。代码中的错误可能会导致程序做一些糟糕的事情,以至于您的系统变得无法使用。恶意用户可以使用某些错误来以 root 身份运行任意程序并接管您的系统。

于 2009-10-29T07:16:54.263 回答
1

您仍然必须具有编辑文件的正确权限。

要更改文件,请以读/写/附加模式(即"a"使用模式fopen())打开文件并将新文本写入文件末尾。

于 2009-10-29T07:15:54.797 回答
1

我假设您在命令提示符下,您可以在其中发出该 sudo 命令..

如果您像您声称的那样拥有访问权限,那么任何可以将一行文本添加到现有文本文件(或创建它,如果不是,这不太可能)的编程语言都将起作用。您可能不得不赋予该程序一些额外的权利,但这是一个不同的主题!

摘要:你懂什么语言?=> 使用它!

于 2009-10-29T07:18:52.600 回答