您好,我确定有一些方法可以做我想做的事,但也许我只是以错误的方式攻击它。希望有人能帮忙。
我有一个开发箱,我可以通过 SSH 从其他几台机器连接到它。为了远程调试,我需要使用客户端机器的 IP 配置我的调试器,当我从不同的机器登录时,它会发生变化。我厌倦了一直手动执行此操作,所以我想尝试将其自动化。
我正在创建一个在 SSH 连接时自动运行的脚本,它将修改 PHP ini 文件中的配置设置。问题是 PHP ini 文件都归 root 所有,所以如果我只是以普通用户身份登录,我不确定如何修改这些文件。
我的开发箱并没有真正的安全问题,所以我可以只更改 ini 文件的所有者,但我希望它比这更自动化。
我目前的尝试是位于我的主目录中的 python 脚本,当我通过 SSH 连接时从 .bashrc 调用它。我不知道如何从那里获得 root 权限,不过我对 linux 还很陌生。我想也许会有一些我不知道的其他方法。
最佳答案
您有一个文件属于 root。您显然需要找到一种方法将文件标记为您可以修改;或一种提升权限的方式,以便您可以修改它。
这导致了两种传统的 unix 方法来执行此操作。它们是:
创建一个组来标记文件,即。初始化调试; chgrp/chmod 文件,使其具有 initdebug 组并且是组可写的;并且,将您自己添加到 initdebug 组,以便您可以使用该组的写入权限来修改文件。
要创建一个非常小的、经过审计的二进制可执行文件(这不适用于脚本),它将执行您想要的特定修改(为简单起见,我建议复制一系列 root 拥有的 PHP ini 文件中的一个到正确的位置)。然后对文件进行 chown 操作,使其归根用户所有,并在可执行文件上设置 suid 位,使其以根用户身份执行。
您也可以结合这两种方法:
不要让自己成为 initdebug 组的成员或可执行文件的 suid,而是将可执行文件的组设置为 initdebug 并设置其 sgid 位;或者,
保留可执行文件 suid root,但使其只能由 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 包括您可以使用的替代编译器列表。只要确保它编译为 native ,而不是字节码。就操作系统而言,字节码 vm 只是另一个解释器)。
关于linux - 如何在 SSH 连接上编辑 root 拥有的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11129712/