我想知道命令行应用程序是否可以请求 root 访问权限,例如尝试使用sudo
.
我正在寻找一种解决方案,允许编写需要sudo
特权的应用程序(如果需要)。
它不必总是请求 root 访问权限,只有在需要时才需要。
我想知道命令行应用程序是否可以请求 root 访问权限,例如尝试使用sudo
.
我正在寻找一种解决方案,允许编写需要sudo
特权的应用程序(如果需要)。
它不必总是请求 root 访问权限,只有在需要时才需要。
选项:
setuid(0)
,但前提是它已经被 root 调用,因此它的真实 UID 为 0,并且有效 UID 为其他人。exec
使用sudo
orsu
命令并让自己在 UID 0 下运行,但前提sudo
是配置为允许这样做(这通常需要用户提交身份验证,因为会有授权检查)。AuthorizationExecWithPrivileges()
,但这再次要求用户提交给 authn。launchd
中与之通信的作业。launchd
与该作业进行通信将导致launchd
调用它,并且可能已将其配置为在 root 用户下运行。现在要实现这一点,需要已经部署了该作业:通过安装程序(在这种情况下,用户经过身份验证)或通过服务管理框架的SMJobBless()
API(同样,用户需要身份验证才能批准)。launchd
作业让该作业以 UID 0 自行执行。如上所述,这涉及到一个写得不好的launchd
作业来回敲打。因此,基本上可以通过许多选项来实现,但所有可靠的选项都要求用户进行身份验证,并且该工具已经以可以在根上下文中运行的方式部署。我实际上写了一本关于这些东西的整本书……特别是专业 Cocoa 应用程序安全的第 6 章。
setuid
请注意,除了(我不建议您使用)之外的所有选项实际上都涉及fork()
创建一个单独的进程,无论是通过调用进程还是通过launchd
. 这意味着您实际上可以拥有两个单独的可执行文件:一个与用户交互,一个执行特权任务。这是一种比将所有功能都放在一个应用程序中更好的设计,所以我推荐这种方法。
是的。例如:
#!/bin/sh
su root
# Do things as root here, if authorized