0

嗨,我确定有某种方法可以做我想做的事,但也许我只是以错误的方式攻击它。希望有人可以提供帮助。

我有一个开发盒,我可以从其他几台机器上通过 SSH 连接。为了远程调试,我需要使用客户端机器的 IP 配置调试器,当我从不同的机器登录时,它会发生变化。我厌倦了一直手动执行此操作,所以我想尝试将其自动化。

我正在创建一个在 SSH 连接时自动运行的脚本,它将修改 PHP ini 文件中的配置设置。问题是 PHP ini 文件都归 root 所有,所以如果我只是以普通用户身份登录,我不确定如何修改这些文件。

我的开发盒并没有真正的安全问题,所以我可以更改 ini 文件的所有者,但我希望它比这更自动化。

我当前的尝试是位于我的主目录中的 python 脚本,当我通过 SSH 连接时,它从 .bashrc 调用。我不知道如何从那里获得 root 权限,不过我对 linux 还是很陌生。我想也许会有其他我不知道的方法。

4

2 回答 2

1

您有一个由 root 拥有的文件。您显然需要找到一种方法将文件标记为您可以修改;或一种让您提升权限的方法,以便您可以修改它。

这导致了两种传统的 Unix 方法来执行此操作。他们是:

  1. 创建一个用来标记文件的组,即。初始化调试;chgrp/chmod 文件,使其具有 initdebug 组并且是组可写的;并且,将自己添加到 initdebug 组,以便您可以使用组写入权限来修改文件。

  2. 要创建一个非常小的、经过审计的二进制可执行文件(这不适用于脚本),它将执行您想要的特定修改(为简单起见,我建议将选择的 root 拥有的 PHP ini 文件之一复制到正确的位置)。然后 chown'ing 文件,使其归 root 所有,并在可执行文件上设置 suid 位,使其以 root 身份执行。

您还可以结合使用这两种方法:

  1. 不要让自己成为可执行文件的 initdebug 组或 suid 的成员,而是将可执行文件的组设置为 initdebug 并设置其 sgid 位;或者,

  2. 保留可执行的 suid 根目录,但使其只能由 initdebug 执行,因此只能由添加到该组的用户执行。

如果有人入侵您的帐户,则安全权衡在于特权升级的便利性/风险。如果可执行文件中存在堆栈/堆溢出或类似漏洞并且它以 root 身份执行,那么你就走了。如果可以修改 PHP ini 文件以打开远程漏洞,那么如果他们可以直接访问 ini 文件,那么你就走了。

正如我怀疑后者是可能的,你可能最好使用一个小的可执行文件。

注意:正如我在上面提到的,unix 不承认脚本上的 s[ug]id 位(定义为使用 #!... 解释器语法的任何内容)。因此,您将不得不使用可以编译成二进制文件的东西。所以这可能意味着 C、C++、Java(使用 gcj)、ML、Scheme(mit)、Haskell(ghc)。

如果您之前没有进行过任何 C 或 C++ 编程,我会推荐其中一个,因为 suid 二进制文件不是学习 C/C++ 的项目。如果您不了解任何其他语言,我会推荐 ML 或 Java,因为它们是最容易编写小而简单的东西的。

(顺便说一句,http ://en.wikipedia.org/wiki/List_of_compilers包括您可以使用的替代编译器列表。只要确保它编译为本机,而不是字节码。就操作系统而言,字节码 vm 只是另一个口译员)。

于 2012-06-21T03:43:00.713 回答
0

您可以将您的用户插入到您想要远程的机器上的 sudoers 文件中,例如您可以查看我的博客。这是网址: http: //nanamo3lyana.blogspot.com/2012/06/give-priviledge-normal-user-as-root.html

然后在您的自动脚本上添加 sudo 您的命令。

对不起,我的英语不好。

于 2012-06-21T03:29:46.347 回答