2016-08-01 12 views
1

Я пытаюсь запустить pluginkit (исполняемый файл, который управляет расширениями на OS X) с запускаемого запуска с правами root.Возможно ли запустить pluginkit из процесса, запущенного как root?

/usr/bin/pluginkit -m -i "<identifier>" не работает с выходом match: Connection invalid. Это не так неожиданно, поскольку настройки расширения обрабатываются для каждого пользователя.

Однако, я пытался использовать su для запуска pluginkit как обычного пользователя, и он все еще не работает.

su <username> -l -c "/usr/bin/pluginkit -m -i "<identifier>" также не работает с выходом match: Connection invalid.

Каким-то образом среда, в которой работает плагин, по-прежнему отличается от обычного пользователя тем, что она не работает должным образом. Есть ли способ запустить pluginkit как root? Или есть ли другой способ запустить процесс как другого пользователя, который может предоставить более полную среду?

Я проверяю это с помощью инструмента командной строки, написанной в 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)") 

/Library/LaunchDaemons/com.example.PluginKitTest.plist

<?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> 
+0

Это может помочь показать ваш .plist для демона и его расположение в вашей системе. –

+0

Обновлен с помощью plist и инструмента командной строки, который вызывается. –

+0

См. Http://superuser.com/a/832673/94915; также вам может потребоваться добавить ' UserName' в plist. –

ответ

1

Оказалось, что существует дополнительный контекст пользователя, который не задан su, которую необходимо установить с помощью команды launchctl asuser. Таким образом, я был в состоянии решить мою проблему, обновив свою команду, чтобы вызвать как launchctl asuser и su обновить все аспекты контекста:

launchctl asuser $USER_UID su $USER_UID -c "<command>"

Согласно документации launchctl asuser:

ПРИНЯТЫМ атрибуты включают пространство имен начальной загрузки Mach, сервер исключений и сеанс аудита безопасности.

Я не достаточно знаком с этими понятиями, чтобы точно сказать, что они делают, но этого было достаточно, чтобы получить pluginkit.

+0

Спасибо за упоминание, попробовав это через несколько часов. Любопытно, что вы искали, прежде чем найти его? – StefanS

+0

Вы включили пользователя root? https://support.apple.com/en-us/HT204012 Поскольку команда su не работает по умолчанию «Извините». – StefanS

+0

Нет, я никогда не делал ничего подобного. Я просто настраиваю команду для запуска в качестве запуска. Я не помню, чтобы когда-либо сталкивался с проблемой, когда su ответил «извините». Извините, я больше не могу помочь! –

 Смежные вопросы

  • Нет связанных вопросов^_^