如何在SSH连接上编辑root拥有的文件

时间:2012-06-20 23:42:45

标签: linux ssh file-permissions

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

我有一个开箱,我从其他几台机器上SSH。为了远程调试,我需要使用客户机的IP配置我的调试器,当我从不同的机器登录时,它会发生变化。我总是厌倦一直手动这样做,以为我会尝试自动化它。

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

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

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

2 个答案:

答案 0 :(得分:1)

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

这导致了两种传统的unix方法。他们是:

  1. 创建用于标记文件的组,即。 initdebug; chgrp / chmod该文件因此它具有initdebug组并且是可写组的;并将自己添加到initdebug组,以便您可以使用组写权限来修改该文件。

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

  3. 您还可以将两种方法结合起来:

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

    2. 保持可执行文件的suid root,但只能使它由initdebug执行,因此只能由添加到该组的用户执行。

    3. 如果有人破解了您的帐户,那么安全权限取决于权限升级的便利性/风险。如果可执行文件中存在堆栈/堆溢出或类似漏洞并且它以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只是另一个解释器。)

答案 1 :(得分:0)

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

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

对不起,我的英语不好。