如果控制台应用程序需要 root 权限,它如何在 OS X 下对自身进行 sudo? [关闭]

2024-03-17

我想知道命令行应用程序是否可以请求根访问权限,例如尝试使用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(使用前将#替换为@)

如果控制台应用程序需要 root 权限,它如何在 OS X 下对自身进行 sudo? [关闭] 的相关文章

随机推荐

  • 在属性中传递静态数组

    是否可以绕过以下限制 在类中创建静态只读数组 public class A public static readonly int Months new int 1 2 3 然后将其作为参数传递给属性 public class FooAttr
  • 查询对象时 linq to sql + stackoverflow 异常

    好的 当我尝试查询主键 如果实体中的主键设置为 自动生成值 时 我已经确认只有这个问题 但如果没有这个 我该如何插入 抱歉 如果这是一个 linq2sql 菜鸟 但我刚刚开始使用它 如何在关闭此选项的情况下使用 Linq to Sql 同时
  • PHP 和 MySQL:显示某些内容的总和,按不同类别分类

    你能帮我一下吗 如果您能提供答案和解释 我会更加感激 因为我想了解更多 实际上我已经感谢这个社区了 对我的学习帮助很大 但只有答案对我来说就足够了 因为我真的需要这个代码 好的 现在我将定义问题 现在 假设我有包含这些列的表格 tbl tr
  • Express 应用程序中 helpers 文件夹的意义是什么?

    我正在尝试导出一个适合我们要求的最佳混合文件夹结构 但在查阅了很多文章和信息之后 我有一个用名称定义的文件夹helpers并有文件 js扩展 app controllers userController js models userSche
  • MATLAB:使用 ode45 时是否可以有两个事件值?

    我想要对运动方程的 ode45 计算有两个限制 位置和时间 我已经让时间事件起作用 但我不确定是否以及如何添加另一个事件来限制位置 编辑 我还有许多不同的粒子在一个 ODE 方程中耦合在一起 并且需要它们在到达 屋顶 时单独停止 因为它们都
  • 如何设置系统范围的umask?

    我在一个运行 Linux Debian 和 Ubuntu 的实验室工作 用户名和组名由 NIS 和 yp 处理 我们有一些公共用户 每个人都可以访问来运行实验 然后我们每个人都有自己的用户 此外还有一个我们都是其中成员的公共组 我怎样才能使
  • 如果成功或失败,如何返回 std::copy 的值?

    我在用std copy将对象复制到std deque到一个文件 代码工作正常 但我需要检查复制是否成功 因此我需要设置标志 否则抛出异常 我已经用谷歌搜索但找不到解决方案如何检查是否std copy已成功将值复制到文件中 有人可以照亮它吗
  • Java 放气响应

    大家好 我想为 tomcat 创建一个过滤器来压缩某些 MIME 类型的所有响应 有什么指导方针吗 String ae request getHeader accept encoding if ae null ae indexOf defl
  • 如何在 Node.js 插件中泵送窗口消息?

    在 Windows Nodejs 插件中 我创建了一个窗口来接收消息 Handle
  • 将相同的运算符专门用于不同的特征

    我想通过特征进行专业化来执行以下操作 Array Aa Scalar in a会使用overload I Array Aa Array Bb会使用overload II 在下面的代码中 overload II永远不会习惯 有人提到过T1不能
  • 如何等待蓝鸟承诺在多个地点定居?

    我遇到的情况是 一堆函数需要等待承诺解决 因为它是 init 函数 self init new Promise function resolve do stuff take awhile resolve 但是 当它正在初始化时 异步性质意味
  • Linq - 获取数组最后一个非零数的索引

    是否有一个 Linq 表达式返回数组中最后一个非零值的索引 我对扩展不感兴趣 只对简单的 linq 表达式感兴趣 我正在想象这样的伪代码 int index 0 2 1 LastOrDefaultAt i gt i gt 0 返回值应该是2
  • 如何在 django 中使用 json.dumps 方法加载保存的数据

    模型 py class History models Model user models ForeignKey User on delete models SET NULL blank True study models ForeignKe
  • 使用比较器函数进行排序

    因此 我正在使用一些预先存在的比较器来比较两个元组中的某些值 如果第一个大于第二个则返回 true 否则返回 false 这是其中之一的代码 def cmpValue subInfo1 subInfo2 Returns True if va
  • 显式空检查与空合并运算符的编译器评估?

    考虑下面的代码 它使用了两个slightly不同的检查方法 instance并在尚未设置时分配它 class InstantiationTest private Object instance public void Method1 if
  • 如何在 Android 中设置自定义闹钟铃声

    我需要在我的应用程序中设置自定义闹钟铃声 谁能告诉我如何设置自定义铃声或 Mp3 作为闹钟 任何形式的帮助将不胜感激 这也是这个问题的解决方案 将音频文件设置为铃声 https stackoverflow com questions 460
  • UITextView 动画视图后内容偏移不良

    我有一个 UITextView 位于视图底部 当用户点击它时 我需要将视图动画放大 150 像素 我在用着 void textViewDidBeginEditing UITextView textView and void textView
  • R 中的条件计数和分组依据

    我想计算每个有多少行type如果他们满足条件x 0 有点像 SQL 中的 group by 这是数据的示例 type x search 0 NULL 0 public 0 search 1 home 0 home 1 search 0 我假
  • c atoi() 在 Linux 上用于宽字符?

    Linux 上是否有与宽字符等效的 c atoi 我可以找到 MS wtoi 的东西 但我可以在标准 Linux 库中找到任何东西 您可以使用wcstol http www gnu org s libc manual html node P
  • 如果控制台应用程序需要 root 权限,它如何在 OS X 下对自身进行 sudo? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想知道命令行应用程序是否可以请求根访问权限 例如尝试使用sudo 我正在寻找一种解决方案 允许编写需要的应用程序sudo如果需要的话 可以享受特权