Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 是否可以从以root身份运行的进程运行pluginkit?_Macos_Unix_Launchd_Osx Extensions - Fatal编程技术网

Macos 是否可以从以root身份运行的进程运行pluginkit?

Macos 是否可以从以root身份运行的进程运行pluginkit?,macos,unix,launchd,osx-extensions,Macos,Unix,Launchd,Osx Extensions,我正试图从一个以root用户身份运行的启动守护程序运行pluginkit(在OS X上管理扩展的可执行文件) /usr/bin/pluginkit-m-i”“失败,输出为match:Connection invalid。这并不出乎意料,因为扩展设置是按每个用户处理的 但是,我尝试使用su以普通用户的身份运行pluginkit,但它仍然不起作用 su-l-c”/usr/bin/pluginkit-m-i”“也会失败,输出为match:Connection invalid 不知何故,pluginki

我正试图从一个以root用户身份运行的启动守护程序运行
pluginkit
(在OS X上管理扩展的可执行文件)

/usr/bin/pluginkit-m-i”“
失败,输出为
match:Connection invalid
。这并不出乎意料,因为扩展设置是按每个用户处理的

但是,我尝试使用
su
以普通用户的身份运行
pluginkit
,但它仍然不起作用

su-l-c”/usr/bin/pluginkit-m-i”“
也会失败,输出为
match:Connection invalid

不知何故,pluginkit运行的环境仍然与普通用户不同,因此无法正常工作。是否仍可以以root用户身份运行pluginkit?或者是否有其他方式以其他用户身份启动进程,从而提供更完整的环境

我正在使用Swift编写的命令行工具对此进行测试:

main.swift

import Foundation

let task = NSTask()

// Option 1: Run pluginkit directly
task.launchPath="/usr/bin/pluginkit"
task.arguments = ["-m", "-i", "com.example.findersyncext"]

// Option 2: Run pluginkit as <username> using 'su'
//task.launchPath="/usr/bin/su"
//task.arguments = ["<username>", "-l", "-c", "/usr/bin/pluginkit -m -i \"com.example.findersyncext\""]

// Option 3: Run pluginkit as <username> using 'sudo'
//task.launchPath="/usr/bin/sudo"
//task.arguments = ["-u", "<username>", "/usr/bin/pluginkit", "-m", "-i", "com.example.findersyncext"]

task.standardOutput = NSPipe()
task.standardError = NSPipe()
task.launch()
task.waitUntilExit()

NSLog("Exit code: \(task.terminationStatus)")
let output = NSString(data: (task.standardOutput!.fileHandleForReading.readDataToEndOfFile()), encoding: NSUTF8StringEncoding)
NSLog("Output: \(output)")

let error = NSString(data: (task.standardError!.fileHandleForReading.readDataToEndOfFile()), encoding: NSUTF8StringEncoding)
NSLog("Error: \(error)")
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.example.PluginKitTest</string>
    <key>Program</key>
    <string>/path/to/PluginKitTest</string>
    <key>RunAtLoad</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/Users/<username>/Desktop/pluginkit-error.log</string>
    <key>StandardOutPath</key>
    <string>/Users/<username>/Desktop/pluginkit-out.log</string>
</dict>
</plist>
<代码>导入基础 让task=NSTask() //选项1:直接运行pluginkit task.launchPath=“/usr/bin/pluginkit” task.arguments=[“-m”、“-i”、“com.example.findersyncext”] //选项2:使用“su”运行pluginkit //task.launchPath=“/usr/bin/su” //task.arguments=[“”、“-l”、“-c”、“/usr/bin/pluginkit-m-i\”com.example.findersyncext\”“] //选项3:使用“sudo”运行pluginkit //task.launchPath=“/usr/bin/sudo” //task.arguments=[“-u”、“”、“/usr/bin/pluginkit”、“-m”、“-i”、“com.example.findersyncext”] task.standardOutput=NSPipe() task.standardError=NSPipe() task.launch() task.waitUntilExit() NSLog(“退出代码:\(task.terminationStatus)”) 让输出=NSString(数据:(task.standardOutput!.fileHandleForReading.readDataToEndOfFile()),编码:NSUTF8StringEncoding) NSLog(“输出:\(输出)”) let error=NSString(数据:(task.standardError!.fileHandleForReading.readDataToEndOfFile()),编码:NSUTF8StringEncoding) NSLog(“错误:\(错误)”) /Library/LaunchDaemons/com.example.PluginKitTest.plist

import Foundation

let task = NSTask()

// Option 1: Run pluginkit directly
task.launchPath="/usr/bin/pluginkit"
task.arguments = ["-m", "-i", "com.example.findersyncext"]

// Option 2: Run pluginkit as <username> using 'su'
//task.launchPath="/usr/bin/su"
//task.arguments = ["<username>", "-l", "-c", "/usr/bin/pluginkit -m -i \"com.example.findersyncext\""]

// Option 3: Run pluginkit as <username> using 'sudo'
//task.launchPath="/usr/bin/sudo"
//task.arguments = ["-u", "<username>", "/usr/bin/pluginkit", "-m", "-i", "com.example.findersyncext"]

task.standardOutput = NSPipe()
task.standardError = NSPipe()
task.launch()
task.waitUntilExit()

NSLog("Exit code: \(task.terminationStatus)")
let output = NSString(data: (task.standardOutput!.fileHandleForReading.readDataToEndOfFile()), encoding: NSUTF8StringEncoding)
NSLog("Output: \(output)")

let error = NSString(data: (task.standardError!.fileHandleForReading.readDataToEndOfFile()), encoding: NSUTF8StringEncoding)
NSLog("Error: \(error)")
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.example.PluginKitTest</string>
    <key>Program</key>
    <string>/path/to/PluginKitTest</string>
    <key>RunAtLoad</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/Users/<username>/Desktop/pluginkit-error.log</string>
    <key>StandardOutPath</key>
    <string>/Users/<username>/Desktop/pluginkit-out.log</string>
</dict>
</plist>

标签
com.example.PluginKitTest
节目
/路径/到/插件测试
运行负荷
标准错误路径
/用户//桌面/pluginkit-error.log
标准门诊
/用户//桌面/pluginkit-out.log

事实证明,有一个额外的用户上下文不是由
su
命令设置的,它需要通过使用命令
launchctl asuser
来设置。因此,我能够通过更新命令来解决我的问题,调用
launchctl asuser
su
来更新上下文的所有方面:

启动ctl asuser$USER\u UID su$USER\u UID-c”“

根据
启动CTL asuser
的文档:

采用的属性包括Mach引导命名空间、异常服务器和安全审计会话


我对这些概念不太熟悉,无法确切地告诉您它们的作用,但它足以让
pluginkit
正常工作。

它可能有助于显示守护程序的.plist以及它在系统中的位置。使用plist和调用的命令行工具进行更新。请参阅:;您可能还需要添加
用户名
在plist中。运气不好,在plist中添加用户名密钥会导致启动守护进程以没有sudo权限的用户身份运行。
UserName
的想法是将其设置为
root
用户-您可以尝试一下。感谢大家的提醒,在几个小时内尝试一下。好奇的是,您在fi之前搜索了什么结束它?您是否以编程方式启用了root用户?因为su命令在默认情况下会失败“对不起”。不,我从未做过类似的事情。我只是将命令设置为作为启动守护进程运行。我不记得曾经遇到过su响应“对不起”的问题对不起,我不能再给你任何帮助了!很好,我知道了,谢谢你的帮助!谁知道你救了我多少时间。当做