Как запустить программу от имени пользователя root без «sudo»?


10

У меня есть определенная двоичная программа на OS X, которая может быть запущена только от имени пользователя root.

Я устал от предвосхищения sudoкаждый раз, когда я вызываю его и вводю пароль, и хотел бы, чтобы он автоматически запускался с правами root, когда я регулярно вызываю его, не запрашивая пароль.

Владелец программы - root, а ее группа - wheel.

Я попытался chmod ug+sустановить для имени пользователя и groupid при выполнении значение root / wheel, но когда я запускаю программу без sudo, она по-прежнему жалуется, что она может работать только с sudo или с правами root.


Это может быть выполнено в определенное время или когда происходит какое-то событие?
user151019

9
Старые гуру Unix предположили бы, что регулярный запуск операции только для пользователя root означает, что вы делаете это неправильно. Это то, что можно автоматизировать? Или запустить как демон? Более подробная информация может принести предложения для решений другого рода.
dmckee --- котенок экс-модератора

Действительно ли программа принадлежит пользователю root? Setuid / gid будет использовать пользователя / группу файла.
Даниэль Бек

2
… Где «более подробно» также включает в себя такие вещи, как то, находится ли двоичный файл этой программы на смонтированном томе NFS и используется ли nosuidпараметр монтирования… в дополнение к тому, почему вы должны регулярно запускать программу в качестве суперпользователя.
JdeBP

@dmckee Многие пользователи Mac запускают серверное программное обеспечение на своих рабочих станциях, и часто требуется рут для тех вещей, которые в нем действительно не нуждаются ... но перенастройка стека LAMP для работы без рута - это боль в заднице. С другой стороны, перезапуск apache 20 раз в день и ввод sudo каждый раз - это тоже боль в заднице. Это простое решение.
Абхи Бекерт

Ответы:


2

Вы уверены, что программа, которую вы пытаетесь выполнить, на самом деле является двоичным файлом, а не сценарием оболочки? Большинство оболочек игнорируют suid-скрипты, потому что их действительно очень сложно сделать безопасно. Простой способ проверить это использовать fileкоманду в программе.


17

Половина решения вашей проблемы:

в файле sudoers добавьте следующее:

username ALL= NOPASSWD: /path/to/command

Затем из командной строки вы можете ввести:

sudo command

и он запустит команду, не спрашивая ваш пароль. Эта команда будет работать от имени пользователя root.

Обратите внимание, вам нужно будет заменить имя пользователя на фактическое имя пользователя.


Удивленный найти лучший ответ внизу. Спасибо!
CDR

К вашему сведению, чтобы решить другую половину (без необходимости вводить команду sudo), создайте псевдоним оболочки, который включает в себя sudo (например, surm = sudo rm "$ @")
Уолтер,

4

Если вы действительно не можете вызвать его как демон по какой-либо причине (этот вопрос будет актуален в этом случае) , этот метод можно взломать вместе, но он довольно грязный и совсем не безопасный.

Идея состоит в том, чтобы запустить его с помощью AppleScript. Сначала вам нужно знать, как вызвать процесс из командной строки (что, если вы уже используете sudo, означает, что вы должны быть полностью настроены). Вы запустите этот процесс с помощью do shell scriptкоманды и вместо sudo запишите свои учетные данные в AppleScript:

do shell script "/path/to/your/executable/here" user name "me" password "mypassword" with administrator privileges

Я повторяю часть о том, что это небезопасно: ЭТО ОЗНАЧАЕТ, ЧТО ВАШИ АДМИНИСТИЧЕСКИЕ КРЕДИТЫ ХРАНЯТСЯ В РАВНОМ ТЕКСТЕ. Если это вообще возможно, вы должны найти способ справиться с этим как LaunchDaemon.


Способ "Runas" для вашего Mac :) Спасибо
Vlueboy

2

В OSX предположим, что ваша программа находится в / usr / local / bin / YourProgramName ... Чтобы решить эту проблему, выполните следующую команду: Чтобы изменить идентификатор пользователя / идентификатор группы для файловых иерархий, коренящихся в файлах, а не только в самих файлах ,

sudo chown -R $(whoami) /usr/local/bin/

... затем в терминале вызовите имя вашей программы, $ YourProgramName


Моя проблема заключалась в том, что установленные программы были установлены без соответствующих разрешений, поэтому я запустил это в каталогах этих программ, и теперь они работают нормально без sudo. Спасибо!
atwixtor

0

Ты можешь сделать

sudo tcsh

который поместит вас в корневую оболочку.


0

похоже сама программа проверяет, работает ли с ID = 0


1
… Что, конечно, будет, если это суперпользователь set-UID (оставив в стороне проблемы, выраженные выше). Вероятно, вы пытаетесь сказать, что программа проверяет реальный UID 0, а не только эффективный UID 0.
JdeBP

-1

Вы могли бы sudo chown YOUR-USERNAME-HERE BINARY-NAME-HERE.

Тем не менее, я полностью согласен с комментарием dmckee.


Как это поможет? ⁠
Скотт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.