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

标签 linux ssh file-permissions

您好,我确定有一些方法可以做我想做的事,但也许我只是以错误的方式攻击它。希望有人能帮忙。

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

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

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

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

最佳答案

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

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

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

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

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

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

  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,因为最容易编写一些小而简单的东西。

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

关于linux - 如何在 SSH 连接上编辑 root 拥有的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11129712/

相关文章:

Kubernetes、安全上下文、fsGroup 字段和运行容器的默认用户组 ID

linux - 没有这样的文件或目录。但只有在通过 shell 脚本运行时

linux - 保留通过 "less"或 "more"传输的文本的颜色

linux - 在 Linux 内核模块中监听新进程

Linux - Bash 和 Expect

android - 无法在 Linux 中启动模拟器

linux - Vagrant、Symfony、chmod 许可证

perl - ssh命令未运行perl脚本

python - 使用 SSH 进行安全的 Python 聊天——如何?

c# - 如何从打开目录列表的目录中获取文件?