我对此还不太熟悉,所以不知道该去哪里找。
我可以访问一个服务器,该服务器作为执行 systemctl 有限版本的命令,并且我想扩展它。
该命令的作用如下:它允许没有 sudo 权限的特定用户执行 systemctl。它只允许用户在 3 个特定服务上运行 systemctl。
我查看了一下最初是如何实现的,该命令的创建者创建了一个可执行文件(ELF 64 位 LSB pie 可执行文件,x86-64,版本 1 (SYSV),动态链接,解释器 /lib64/ld-linux-x86-64.so.2,BuildID[sha1]=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,适用于 GNU/Linux 3.2.0,已剥离),该文件归 root 所有,setuid 位为 true。我尝试反编译该可执行文件,它似乎只是检查用户是否是特定用户并以 root 身份运行 systemctl。
我有两个问题:
- 我不确定如何将其重新转换为有效的源代码。
- 我担心使用 setuid 位会带来安全风险。
答案1
目前还不清楚你的最终目标是什么:
- 您是否正在尝试对自定义编译的二进制文件进行逆向工程?
- 或者您是否尝试将 systemctl 授予非 root 用户?
每个问题都应由单独的问题组成。
第一的,如果您尝试“反编译”二进制可执行文件,则没有真正简单的方法可以将其重新转换为源代码,如果您无法访问代码或构建方法,则应该重新开始构建自定义解决方案或执行其他操作以实现您的目标。编译后的二进制可执行文件甚至不知道它最初是用什么语言编写的,更不用说能够将其自身重新转换为源代码了。不过,您确实有一些基本的 ELF 信息,因此也许可以从这里开始:https://reverseengineering.stackexchange.com/
其次,回答你的主要问题:(忽略问题的逆向工程二进制文件部分),您可以使用现有的 sudoer 系统向非 root 用户授予特定的“root/sudo”命令。以下是 sudoers 行的示例:
nancy ALL=(ALL) /usr/bin/systemctl restart nginx
这允许nancy
用户运行sudo systemctl restart nginx
,但他们不是允许使用 sudo 执行任何其他操作。您可以根据自己的用例扩展此功能,并允许用户(或组)运行不同的特定命令。