2016-02-26 2 views
0

Я хочу запустить «sudo rm ing/tmp/instruments_sock» в терминале. Я делаю это через код, используя баннер robotil. Но я не могу ввести пароль. Есть ли способ, которым я запускаю эту команду, не запрашивая пароль в mac. !! Я хочу удалить пароль ТОЛЬКО для этой команды.Как запустить код Sudo без пароля в mac

+0

Ну, я просто Google «макинтош Sudo без пароля», и это дало мне результат. Если вы хотите, я могу скопировать шаги вставки здесь ... –

+0

@AlexanderB. лучше нет, OP тоже может google, и это указывает на то, что OP не проводил никаких исследований. Более того - это не вопрос программирования, это не по теме на StackOverflow, и OP должен смотреть в Superuser, чтобы узнать, кто-то уже ответил на этот вопрос. –

+0

@ ErwinBolwidt, я согласен, и в основном мой комментарий был советом, чтобы пойти и что-то искать. –

ответ

2

Если вы хотите выполнить одну привилегированную задачу без пароля, лучшим способом, вероятно, является использование двоичного файла setuid.

Одним словом, вы делаете крошечную программу, которая делает то, что вы хотите. Затем вы даете корневые права программы, установив его владельца на root и включив бит setuid.

Очень важное предупреждение: Не просто вызывайте system("rm /tmp/something") в бинарнике setuid! Это классическая ошибка безопасности. Нечистые переменные среды (например, PATH) могут захватить команду. Ниже приведено краткое введение в проблему безопасности в ссылке wikipedia выше.

Вместо использования system() самым простым и безопасным способом является использование собственных библиотек обработки файлов. Если вы не уверены в 100% о том, что делаете, избегайте запуска команд оболочки из вашего двоичного файла.

+2

Возможно, укажите, что вы установили бит 'setuid' с' sudo chmod u + s YourScript', и вы установили его владельца в root с 'sudo chown root YourScript'. –

-1

Добавьте следующую строку с Sudo/и т.д./sudoers вы все установили:

# %wheel ALL=(ALL) NOPASSWD: ALL 


dscl . append /Groups/wheel GroupMembership your_username 
+0

Первая строка не является командой, вот что нужно добавить в файл '/ etc/sudoers' без' # '. Это также устранит необходимость в пароле для каждой команды, а не только в одной команде, упомянутой в вопросе. – Jimi