我想知道命令行应用程序是否可以请求根访问权限,例如尝试使用sudo
.
我正在寻找一种解决方案,允许编写需要的应用程序sudo
如果需要的话,可以享受特权。
它不必总是请求根访问权限,仅在需要时才请求。
选项:
- 它可以
setuid(0)
,但前提是它已被 root 调用,因此真实 UID 为 0 且有效 UID 为其他人。
- 它可以尝试
exec
the sudo
or su
命令并使其自身在 UID 0 下运行,但前提是sudo
配置为允许这样做(通常要求用户提交身份验证,因为将进行授权检查)。
- 它可以尝试通过以下方式启动自己的新副本
AuthorizationExecWithPrivileges()
,但这再次要求用户提交到 authn。
- 它可能已经安装了
launchd
它可以在系统中与之通信的作业launchd
语境。与该工作沟通会导致launchd
来调用它,并且可能它被配置为在 root 用户下运行。现在要实现这一点,需要已经部署该作业:通过安装程序(在这种情况下用户经过身份验证)或通过服务管理框架的SMJobBless()
API(同样,用户需要身份验证才能批准)。
- 它可以利用别人写得不好的东西
launchd
作业让该作业以 UID 0 自行执行。如上所述,这涉及到一个写得不好的launchd
工作四处闲逛。
因此本质上这是可能的,通过许多选项,但所有可靠的选项都要求用户进行身份验证,并且该工具已经以可以在根上下文中运行的方式部署。我实际上写了一整本书关于这个东西......特别参见第 6 章专业的 Cocoa 应用程序安全 http://securemacprogramming.com/Secure_Mac_Programming/Home_of_Professional_Cocoa_Application_Security.html.
请注意,除了setuid
(我不建议你使用)实际上涉及fork()
创建一个单独的进程,无论是通过调用进程还是通过launchd
。这意味着您实际上可以拥有两个独立的可执行文件:一个与用户交互,另一个执行特权任务。与将所有功能放在一个应用程序中相比,这是一种更好的设计,因此我建议采用这种方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)