2012-06-20 27 views
0

嗨,我确定有某种方法可以做我想做的事,但也许我只是在用错误的方式攻击它。希望有人能帮忙。如何在SSH连接上编辑由root用户拥有的文件

我有一个开发箱,我SSH从其他几台机器。为了远程调试,我需要使用客户端机器的IP来配置我的调试器,当我从不同的机器登录时,IP会发生变化。我对所有这些手动操作感到厌倦,所以我想尝试自动化它。

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

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

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

回答

1

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

这导致了两种传统的unix方法来做到这一点。它们是:

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

  2. 要创建一个非常小的,审计过的二进制可执行文件(这不会与脚本一起工作),它将执行您想要的特定修改(为了简单起见,我建议将根选择的一个PHP ini文件复制到正确的地方)。然后将文件chown在归root所有,并将suid位设置为可执行文件,以便它以root身份执行。

您也可以结合这两种方法,要么:

  1. 不使自己的可执行initdebug组或SUID中的一员,而是设置组可执行的,以initdebug和设置它的sid位;或者,

  2. 保留可执行文件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作为最简单的写简单的东西。只要确保它编译为本地,而不是字节码,就操作系统而言,字节码vm只是另一个解释器。)。编译器可以编译为本地,而不是字节码。

+0

嗨,这听起来像是在阅读其他线程中的一些类似的想法后,我的问题的最佳答案。我想我可能会像你提到的那样创建一些C脚本。首先,虽然我时间紧张,但我只是改变文件权限,看看我现在能否以这种方式工作。有兴趣做一些C虽然:) – chrismacp

+0

这里有一个类似的链接建议我读:http://unix.stackexchange.com/a/369 – chrismacp

+0

就像说我去你的建议,并创建一个小型的C程序这正是我所需要的。没有密码提示或需要修改权限。 – chrismacp

相关问题