Як запустити програму як root без “sudo”?


10

У мене на ОС X є певна двійкова програма, яку можна запускати лише як root.

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

Власник програми - root, а його група - колесо.

Я намагався chmod ug+sвстановити userid та groupid після виконання на root / wheel, але коли я запускаю програму без sudo, вона все ще скаржиться, що вона може працювати лише з sudo або як root.


Чи можна це запустити в певний час або коли відбудеться якась подія?
користувач151019

9
Старі гуру Unix підказують, що регулярно викликати рукописну операцію вручну означає, що ви робите це неправильно. Це щось, що можна автоматизувати? Або бігти як демон? Більш докладно може запропонувати рішення іншого типу.
dmckee --- кошеня колишнього модератора

Чи справді програма належить root? Setuid / gid використовуватиме користувача / групу файлу.
Даніель Бек

2
… Де "детальніше" також включає такі речі, як те, чи є бінарний файл цієї програми на томі, встановленому NFS, і чи використовуєте ви nosuidопцію кріплення ... на додаток до того, чому ви повинні регулярно запускати програму як суперпользователь.
JdeBP

@dmckee багато користувачів mac запускають серверне програмне забезпечення на своїй робочій станції, і це часто налаштування, щоб вимагати root для речей, які справді йому не потрібні ... але перенастроювання стека LAMP для запуску без корінця - це біль у дупі. З іншого боку, перезапуск апаша 20 разів на день і набір судо кожного разу - це також біль у попці. Це просте рішення.
Абхі Беккерт

Відповіді:


2

Ви впевнені, що програма, яку ви намагаєтеся виконати, насправді є двійковим, а не скриптом оболонки. Більшість оболонок ігнорує сценарії suid, тому що це дійсно, дуже важко зробити безпечно. Простий спосіб перевірити - використовувати fileкоманду в програмі.


17

Половине рішення вашої проблеми:

у файлі sudoers додайте наступне:

username ALL= NOPASSWD: /path/to/command

Потім з командного рядка ви можете ввести:

sudo command

і вона виконає команду, не запитуючи вашого пароля. Ця команда запуститься як root.

Зауважте, вам потрібно буде замінити ім'я користувача на фактичне ім'я користувача.


Здивовано знайшов найкращу відповідь внизу. Дякую!
CDR

FYI, щоб вирішити другу половину (не потрібно вводити команду 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


Моя проблема полягала в тому, що встановлені програми були встановлені без належних дозволів, тому я запустив це в каталоги цих програм, і тепер вони працюють без судо. Дякую!
atwixtor

0

Ви можете зробити

sudo tcsh

який поставить вас у кореневу оболонку.


0

схоже, програма сама перевіряє, чи працює вона з ID = 0


1
… Що, звичайно, буде, якщо він буде встановлений 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.