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

26116
UrEl

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

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

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

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

9
Это может быть выполнено в определенное время или когда происходит какое-то событие? Mark 12 лет назад 0
Старые гуру Unix предположили бы, что регулярный запуск операции только для пользователя root означает, что вы делаете это неправильно. Это то, что можно автоматизировать? Или бегать как демон? Более подробная информация может принести предложения для решений другого рода. dmckee 12 лет назад 9
Действительно ли программа принадлежит пользователю root? Setuid / gid будет использовать пользователя / группу файла. Daniel Beck 12 лет назад 0
… Где «более подробно» также включает в себя такие вещи, как, находится ли двоичный файл этой программы на смонтированном томе NFS и используется ли опция монтирования `nosuid`… в дополнение к тому, почему вы должны регулярно запускать программу в качестве суперпользователя. JdeBP 12 лет назад 2
@dmckee, многие пользователи Mac запускают серверное программное обеспечение на своих рабочих станциях, и часто требуется рут для тех вещей, которые в нем действительно не нуждаются ... но перенастройка стека LAMP для работы без рута - это боль в заднице. С другой стороны, перезапуск apache 20 раз в день и ввод sudo каждый раз - это тоже боль в заднице. Это простое решение. Abhi Beckert 11 лет назад 0
На чем ты `chmod`? Фактическая программа похоронена в пакете / приложении. Например, здесь вы можете найти * Дисковую утилиту *: * `/ Applications / Utilities / Disk Utility.app/Contents/MacOS/Disk Utility` *. jww 8 лет назад 0

7 ответов на вопрос

14
Walter

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

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

username ALL= NOPASSWD: /path/to/command 

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

sudo command 

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

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

Удивленный, чтобы найти лучший ответ внизу. Спасибо! CDR 11 лет назад 0
К вашему сведению, чтобы решить другую половину (не нужно вводить команду sudo), создайте псевдоним оболочки, который включает в себя sudo (например, surm = sudo rm "$ @") Walter 6 лет назад 0
4
NReilingh

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

Идея состоит в том, чтобы запустить его с помощью 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 12 лет назад 0
2
abdimuna

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

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

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

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

Are you sure that the program you are trying to execute is actually a binary, and not a shell script. Most shells ignore suid scripts because they are really, really hard to do safely. An easy way to check is to use the file command on the program.

0
DTest

You can do

sudo tcsh 

which will put you in a root shell.

0
jet

looks like the program itself checks if is running with ID=0

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

You could sudo chown YOUR-USERNAME-HERE BINARY-NAME-HERE.

Still, I totally agree with dmckee's comment.

Как это поможет? ⁠ Scott 6 лет назад 0

Похожие вопросы