Як запустити додаток за допомогою sudo без пароля?


40

... але все ж потрібні для програм, які потребують привілеїв адміністратора?

Щоб дозволити наступне:

$ apache2ctl restart
httpd not running, trying to start
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs

$ sudo !!
sudo apache2ctl restart             #no password asked
$                                   #works!

Для довідки я бачив цю установку на примірниках e3 Amazon

Будь-яка ідея?


Це чудовий підручник на форумах, де детально створюється окремий файл із зазначенням програм, якими ви часто користуєтесь. І це гарна ідея з міркувань безпеки.
Тодд Партридж 'Gen2ly'

Відповіді:


51

Потрібно відредагувати файл sudoers. Зауважте, що успіх дає вам менш безпечну систему, і поломка може зламати судо. ЗАВЖДИ редагуйте файл sudoers sudo visudo, оскільки visudo перевіряє наявність помилок і не збереже файл, якщо такі знайдені.

Дуже погано давати всім дозволом запускати як root без пароля, так що просто пропустити один потрібний вам виконаний файл (apache2ctl); додайте наступне до самого низу файлу:

YOURNAME ALL = NOPASSWD: /usr/bin/apache2ctl

Ви можете замінити шлях до виконуваного файлу на "ВСІ", якщо ви вирішите, що дасть вам повне паролі.

Замініть ВАШЕ ім'я на своє ім’я користувача та натисніть Ctrl+, Xщоб зберегти та вийти. Якщо виникла помилка, вона запропонує відновити, відредагувати або зберегти все одно.

Будьте впевнені, що ви використовуєте повний шлях до виконуваного файлу:
тобто. /usr/bin/apache2ctlзамість просто apache2ctl. Це важливо, оскільки без явного вказівки шляху sudo дозволить будь-якій програмі з іменем apachectl на поточному шляху користувача запускатися як root.


3
Зауважте, що %YOURNAMEнадати дозвіл такій групі, як ваш користувач, що, як правило, не є проблемою, оскільки кожен звичайний користувач має групу з назвою на зразок в системах Ubuntu. Щоб надати дозвіл вашому користувачеві, вкажіть YOURNAMEбез%.
Даніель Вернер

Чи є спосіб бути більш реструктуризованим? (лише деякі функції, що виконується)
3pic

1
Старий пост, але я б точно завершити цю відповідь шляхом обмеження в'їзду в sudoers 'до певного імені хоста (якщо це можливо), а також із заданими аргументами O , щоб опустити аргумент (нижче apache2ctl), наприклад , так: YOURNAME YOUR-HOSTNAME = NOPASSWD: /usr/bin/apache2ctl <specific arg | "">. --- У всіх випадках man 5 sudoersє посилання, на яке слід звернутися.
Cbhihe

25

Справжня відповідь на це питання може бути складною, оскільки судо дуже потужний і може бути налаштований на те, щоб робити цікаві речі. Це ретельно пояснено в документації .

Коротка відповідь виконується sudo visudoв терміналі. Якщо ви вперше запустите візуально, він запитає, якому редактору ви надаєте перевагу. Нано, як правило, вважається найпростішим у використанні, але виберіть редактор, який вам найбільше комфортний / знайомий. Вам потрібно буде вирішити, кому ви хочете надати доступ; це може бути ALLкожен ( дуже погана ідея) , користувач або системна група. Групи мають префікс зі знаком%. Наприклад, якщо ви хочете надати всі права доступу до steroid_usersкореневих груп без необхідності введення пароля для всіх команд, ви додасте:

%steroid_users ALL=(ALL) NOPASSWD: ALL

до кінця файла, вийдіть і збережіть файл. Якщо все піде добре, і ви є членом групи steroid_users, ви зможете видавати їх, sudo *some-command*не маючи необхідності вводити свій пароль.

Майте на увазі, що кожен, хто має доступ до вашого терміналу, поки ви ввійшли в систему - або якщо у вас встановлено ssh для авторизації на основі ключів, або (що ще гірше) увімкнено безкоштовні реєстрації сеансів без паролів - повний і безперебійний доступ до всього вашого система. Якщо у вас є декілька користувачів у вашій системі або якщо це файловий сервер, всі файли користувачів можуть загрожувати, оскільки root може зробити що завгодно!

Крім того, якщо ви зробите помилку, visudo виведе повідомлення про помилку та не збереже зміни у файлі. Це допоможе запобігти злому судо повністю. Вам слід справді прочитати документацію . Судо призначений для того, щоб надати користувачам достатньо простого доступу, щоб виконувати свою роботу без необхідності виставляти всю вашу систему. Може бути вигідним лише надання доступу до пароля лише для певних команд.

Я сподіваюся, що це допомагає.


Це спрацювало, я взяв це, і тоді я застосував "sudo service sudo restart" від askubuntu.com/questions/192050/…, і мені вдалося використати все це в моїй активній сесії Ubuntu. Дивовижно!
Патрік

5

Вам потрібно буде відредагувати файл '/ etc / sudoers' (для цього є команда 'visudo'), щоб додати NOPASSWD до списку дозволених команд для вашого користувача або групи. Якщо ваш користувач у групі "адміністратор" - вам потрібно:

%admin ALL=(ALL) NOPASSWD: ALL

Перевірте https://help.ubuntu.com/community/Sudoers , btw.


3

Ви можете додати прапор nopasswd до списку користувачів, але це не виключає всіх заданих паролів питань. Попросять лише першого.

  1. Редагувати sudoers: sudo visudo( ВИ МОЖЕТЕ використовувати sudo. Це файл адміністратора.)
  2. Додайте свого користувача разом із прапором nopasswd після рядка адміністратора (наприкінці). Наприклад:
    cyrex ALL = NOPASSWD: ALLабоcyrex ALL = (ALL) NOPASSWD: ALL

2
sudo visudo
%<GROUP> ALL = NOPASSWD: apache2ctl

або

sudo visudo
%<GROUP> ALL = NOPASSWD: /etc/init.d/apache2

Я думаю, це зробить це.

Але будьте обережні, видаляючи паролі для sudo.


2
Ви повинні вказати абсолютний шлях у першому прикладі з міркувань безпеки - недобросовісний користувач може змінити $ PATH та вкрасти кореневий доступ з некваліфікованим іменем команди.
bgvaughan

0

Тепер для простої відповіді! Немає можливого способу зіпсувати що-небудь зіпсувати або підробити установку.

Просто введіть свій пароль кілька разів, і тоді вам більше ніколи не доведеться його вводити! Це дозволить вам додати локальний обліковий запис адміністратора до групи "корінь", який потім не коментується з шаблону, який дозволить всій групі "root" привілеїв суперпользователя. Ви можете ознайомитись з моєю проблемою / рішенням щодо безпеки цієї процедури в пізнішій частині цієї публікації.

% username & - це глобальна змінна для вашого імені користувача (замініть його на бажане ім'я користувача)

Крок 1: Відкрийте вікно терміналу та введіть " sudo usermod -a -G root %username%"

Крок 2: Потім скопіюйте та вставте це ...

sudo sed -i 's/# auth       sufficient pam_wheel.so trust/auth       sufficient pam_wheel.so trust/g' /etc/pam.d/su`

Крок 2 АБО введіть

sudo nano /etc/pam.d/su`

Перейдіть до рядка 19 та видаліть "#" раніше # auth sufficient pam_wheel.so trust(для деяких може бути інший номер рядка)

* Перша команда додає ваше ім'я% username% до групи "root"

Друга / третя команди дозволяє всім членам групи "root" бути надрукованими без пароля, а лише дозволяти користувачеві "root" su привілеї для аутентифікації.


Кінцева примітка:

Не поспішайте з /etc/sudoers... Існує маса перевірок / противаг, через які повинна пройти автентифікація "su". Аутентифікація суперусера використовує ту саму процедуру pam.d, як і всі інші аутентифікації входу. "/etc/security/access.conf" має макет для контролю доступу через зв'язок tcp / ip (192.168.0.1) та через послуги telnet (tty1 & tty2 & tty3 ... тощо). Це дозволяє більш точно відфільтрувати програму через транспортний протокол. Якщо безпека є вашою турботою, то ваше занепокоєння має бути спрямоване на віддалені / кодові загрози проти того, щоб хтось насправді торкався вашого комп'ютера, коли виходите з кімнати !!!

Їжа для параної (не вводьте цю, просто перегляньте її):

sudo sed -i 's/#-:ALL EXCEPT (wheel) shutdown sync:LOCAL/-:ALL EXCEPT (wheel) shutdown sync:LOCAL/g' /etc/security/access.conf

^ Це блокує доступ до консолі для всіх, хто не є членом системи або root. Іноді програми встановлюють імена користувачів / групи, які експлуатуються!


2
Не експерт з питань безпеки, але це звучить дещо інтуїтивно зрозуміло. Ви вимикаєте паролі для всієї групи, щоб дозволити одному користувачеві запускати певний додаток без пароля, щоб уникнути "складності" уточнення судо для певної програми, правда? І все це на загальнодоступному сервері? Чи відключив сценарій ваші основні інстинкти виживання? Безпека - КОМПЛЕКСНА ПРОЕКТУВАННЯ. Пам'ятайте, це як цибуля. У нього є шари, і це змушує вас плакати ... Втрата даних на компрометованих серверах є лише частиною рівняння. Хакерські весняні напади з вашої системи настільки ж серйозні, але часто ігноруються
hmayag

2
Це проти інтуїтивно зрозуміло та протидіє здоровому глузду: відкривати всю банку файлів із печивом для користувача, якому потрібен лише один файл cookie, є досить безвідповідальним. Ви додали б користувачів до списку sudoers і зняли б потребу вводити паролі, а не редагувати файл / файли sudoers. "Якщо пістолет небезпечний для дітей, не дайте їм канону". -me
Іван
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.