Не дозволяйте судо запрошувати пароль при запуску незволеної команди


15

Я надав груповий дозвіл на виконання певних команд без пароля через sudo. Коли хтось із користувачів робить помилку на помилку або виконує неправильну команду, система вимагає ввести їх пароль, і тоді вони отримують помилку. Це незрозуміло для користувача, тому я хотів би просто показати помилку, а не спонукати їх до пароля. Чи можливо це?

Ось приклад мого файлу sudoers:

%mygroup ALL=(ALL) NOPASSWD:/usr/local/bin/myscript.sh *

Приклад, коли вони виконують неправильний сценарій:

# sudo /usr/local/bin/otherscript.sh
[sudo] password for user:
Sorry, user user is not allowed to execute '/usr/local/bin/otherscript.sh' as root on <hostname>.

Бажаний вихід:

Sorry, user user is not allowed to execute '/usr/local/bin/otherscript.sh' as root on <hostname>. Please check the command and try again.

Зверніть увагу на відсутність запиту про введення пароля.

Мій Google-фу не вдалося мене і повертає результати , тільки на не питаючи пароля , коли користувач буде дозволено виконувати команду.


8
Якби це було можливо, це могло б відкрити (невеликий) отвір у захисті. Якщо ви залишили ввійти в систему і я "позичаю" вашу клавіатуру, я не бачу, які команди sudoдозволять вам виконувати, не вводячи пароль. За допомогою потрібної функції я можу отримати цю інформацію для конкретних команд.
Кіт Томпсон

4
Це досить велика проблема безпеки. Ви не повинні використовувати sudo зі скриптами в якості команди. Люди можуть просто редагувати сценарій і виконувати все, що їм хочеться, повністю маскуючи його під час аудиту. Замість цього додайте виклик sudo всередині сценарію.
coteyr

1
@coteyr, у якому запущені бінарні файли sudo, настільки ж велика проблема, якщо користувачі мають доступ до запису до цих файлів.
Дмитро Григор’єв

1
@CarlWitthoft, тому ви використовуєте абсолютні шляхи, щоб вказати дозволені програми в судорах.
Дмитро Григор’єв

1
@DmitryGrigoryev, так, але якщо ви збираєтеся використовувати sed або щось подібне лише для одного файлу, то судо користі немає. Дозволити користувачеві змінювати файл, тому файли мають дозволи. Вам не доведеться винаходити колесо. Якщо ви хочете, щоб користувач міг змінити файл, тоді дозвольте їм. Немає потреби або користі стрибати через обручі з судо, щоб дозволити користувачеві змінювати файл без пароля. Ви завжди можете просто дозволити їх. Правильний інструмент для правильної роботи.
coteyr

Відповіді:


25

З швидкого читання sudo(8)

   -n          The -n (non-interactive) option prevents sudo from
               prompting the user for a password.  If a password is
               required for the command to run, sudo will display an error
               message and exit.

А для сумнівів:

# grep jdoe /etc/sudoers
jdoe    ALL=(ALL) NOPASSWD: /bin/echo
#

Випробувано таким чином:

% sudo echo allowed
allowed
% sudo -n ed             
sudo: a password is required
% sudo ed               

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

Password:

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


Справді. Я поставив би щось на зразок alias sudo="$(which sudo) -n"в / etc / bashrc, а потім використовувати або sudo(скориговану поведінку), або command sudo(поведінку за замовчуванням) за бажанням.
CVn

7

Одне, що працювало для мене (версія Судо 1.8.17p1), але задовольняє лише частину вашої проблеми, - встановити кількість спроб пароля до 0.

Defaults:%mygroup passwd_tries = 0

Це робить вихід sudo з кодом 1 при спробі будь-якої команди, що вимагає пароль. Однак воно не видає жодного повідомлення про помилку.


Це також правильна відповідь, але відсутність повідомлення про помилку може бути заплутаною. Правильна, але несподівана помилка з відповіді вище, також заплутала. Я гадаю, це підкидання. Дякуємо за надання альтернативної відповіді, варіанти завжди вдячні!
користувач184982

2

Ви не можете.

Немає можливості сказати, хто ви, поки ви не пройшли автентифікацію, і, за замовчуванням, ви не можете перевірити автентифікацію без пароля.

Ви можете змінити автентифікацію на використання USB-ключів, сканерів для друку пальців, аутентифікації голосу, розпізнавання обличчя чи купки інших речей, але справа в тому ж.

Ви не можете перевірити автентифікацію, з аутентифікацією І перед тим, як перевірити автентифікацію, судо не має жодної справи, яка говорить вам, що ви можете чи не можете запускати.


2
Введення пароля під час запуску sudo - це не ідентифікація ("скажіть, хто ви"). Судо знає, хто ти. Введення пароля підтвердження присутності.
Жил 'SO- перестань бути злим'

Я вважаю підтвердження присутності "автентифікацією". Як і в «Автентифікація», потім «Авторизація».
coteyr

2
Відповідь говорить "автентифікація", а не "ідентифікація". Незважаючи на те, що sudo знає, ким ви заявляєте, на основі користувача, який увійшов у цей термінал, він не знає, ким ви є, поки ви не підтвердите цю особу.
Дейв Шерохман

2

@StrongBad зробив коментар, який заслуговує на відповідь:

Я думаю, що найкращим рішенням було б написати скрипт обгортки, який завжди викликає sudoправильні параметри. (У тому числі -n)

Скрипт обгортки може робити аналіз аргументів і т.д., щоб виклик сценарію sudo став якомога меншим і, отже, менше ймовірно помилок.


1

Це неможливо. Єдиний спосіб - змінити вихідний код і скомпілювати власну вилкуsudo


Ви маєте рацію, але я не думаю, що я отримаю дозвіл на завантаження користувальницької версії sudo на всі наші виробничі сервери. hah
користувач184982
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.