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