Який пароль користувача запитує `sudo`?


10
$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 136808 Jul  4  2017 /usr/bin/sudo

таким чином sudoможе бути запущений будь-яким користувачем, і будь-який користувач, який працює sudo, матиме root як ефективний ідентифікатор користувача процесу, оскільки встановлено біт id-user set-user /usr/bin/sudo.

З https://unix.stackexchange.com/a/11287/674

Найбільш помітна різниця між sudo та su полягає в тому, що sudo вимагає пароль користувача, а su вимагає root.

  1. Який пароль користувача sudoзапитує? Чи це користувач, представлений реальним ідентифікатором користувача процесу?

    Якщо так, чи не може жоден користувач отримати права привілею суперпользователя, запустивши sudoта надавши свій власний пароль? Чи може Linux обмежити це для деяких користувачів?

  2. Є чи це виправити , що sudoзапитує пароль після execve() того, як починає виконуватися main()з /usr/bin/sudo?

    Оскільки euid процесу змінено на root (оскільки встановлено біт set-user-id / usr / bin / sudo), який сенс Sudo запитувати пароль пізніше?

Дякую.

Я прочитав https://unix.stackexchange.com/a/80350/674 , але він не відповідає на вищезазначені питання.


3
Це не будь-який користувач, а лише ті, що входять до списку sudoers.
Родріго

1
@Rodrigo Це звучить як відповідь, поставте його у відповідь, а не коментар.
Філіп Кендалл

2
@PhilipKendall Це відповіло лише на частину сумнівів ОП.
Родріго

Відповіді:


22
  1. У своїй найпоширенішій конфігурації sudoзапитує пароль користувача, який працює sudo (як ви говорите, користувача, відповідного справжньому ідентифікатору користувача). Сенс sudoполягає в наданні додаткових привілеїв конкретним користувачам (як це визначено в конфігурації в sudoers), без тих користувачів, які повинні надавати іншу автентифікацію, ніж власну. Тим НЕ менше, sudo робить перевірки , що користувач працює на sudoНасправді , хто вони стверджують, і він робить це, попросивши їх пароль (або будь-який інший механізм аутентифікації налаштований на sudo, як правило , з допомогою PAM - так що це може включати в себе відбитки пальців, або двухфакторной аутентифікація тощо).

    sudoне обов'язково надає право на використання root, вона може надавати різні привілеї. Будь-який користувач, дозволений отримати root, sudoersможе зробити це, використовуючи лише власну автентифікацію; але користувач заборонений, не може (принаймні, не використовуючи sudo). Це не застосовується самим Linux, а sudo(та його налаштування аутентифікації).

  2. sudoдійсно запитує пароль після його запуску; він не може зробити інакше ( тобто не може нічого зробити, перш ніж він почне працювати). Справа в тому, щоб sudoзапитувати пароль, навіть незважаючи на кореневий, - це перевірити особу працюючого користувача (у його типовій конфігурації).


12

sudoзазвичай запитує пароль користувача, який його працює, хоча це можна налаштувати :

На відміну від того su(1), коли sudoersпотрібна автентифікація, вона перевіряє облікові дані користувача, що викликає, а не облікові дані цільового користувача (або root). Це може бути змінено з допомогою rootpw, targetpwі runaspwпрапорів, описаних нижче.

Установка rootpwмає sudoзавжди питати пароль суперкористувача, targetpwзапитує пароль користувача sudo, в кінцевому рахунку запустити програму , як і runaspwзапитує пароль безлічі користувачів в runas_default.

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

Дещо аналогічно, будь-який процес також може виконувати код у режимі ядра, викликаючи будь-який системний виклик, скажімо open(). (це не те саме, що код простору користувача як корінь.) Поки у ядра немає помилок, вони не зможуть запускати довільний код.


8

З першого рядка man sudo:

ОПИС
sudo дозволяє дозволеному користувачеві виконувати команду як суперпользователь або інший користувач, як визначено політикою безпеки. Реальний (неефективний) ідентифікатор користувача, що викликає, використовується для визначення імені користувача, з яким запитувати політику безпеки.

Тому:

  1. Використовується реальний (не ефективний) ідентифікатор користувача, який викликає користувач ...
  2. Так, будь-який ( дозволений ) користувач може отримати додаткові привілеї суперпользователя (або іншого), запустивши sudo і надавши необхідну ( налаштовану ) аутентифікацію, необхідну. І дозволені, і налаштовані встановлені у файлах (іх) sudoers.

  3. Чи може Linux обмежити це для деяких користувачів?
    Так, це може, але це не так. Linux налаштований так, щоб дозволити sudo binary приймати рішення на основі набору правил (політики безпеки) всередині програми sudo та всередині файлу /etc/sudoers. Зазвичай можуть використовуватися інші файли (також / замість них).

Від man setresuid:

ОПИС
setresuid () встановлює реальний ідентифікатор користувача, ефективний ідентифікатор користувача та збережений ідентифікатор встановленого користувача в процесі виклику.

  1. Єдиний спосіб отримати права доступу суперпользователя, надані ядром, - це запустити програмний suid. Не може бути інакше. Це спосіб, яким Linux обрав надавати дозволи суперпользователя.

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


-1

Додатково до інших хороших відповідей про sudo:

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

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