Коли Ubuntu запитує пароль адміністратора, як він визначає, до якого адміністративного користувача звертатись?


11

Я встановлюю машину Ubuntu (10.10), яку використовуватимуть кілька людей. Це спільна машина в невеликому офісі. Основними його ролями є розміщення віртуальних машин з VirtualBox та обслуговування файлів із Samba.

Для Samba потрібно створити кілька облікових записів користувачів, щоб різні люди могли підключатися до акцій Samba зі своїх робочих станцій. Однак є також обліковий запис, який призначений для простого запуску віртуальних машин, яким користуватимуться кілька людей. Іноді люди намагаються робити з цим обліковим записом речі, які вимагають підвищених привілеїв - це спричиняє появу діалогового вікна Gnome "будь-ласка, введіть пароль адміністратора". Однак у цьому діалоговому вікні запитується мій пароль - коли я налаштував машину, мій був першим створеним обліковим записом, тому, здається, я припускаю, що я єдиний користувач, який надав судо повноваження.

Я хочу призначити іншого користувача як "адміністратора першої інстанції", так би мовити, і це не може бути користувачем спільного доступу, оскільки всі повинні знати пароль цього облікового запису, тому я хочу, щоб його привілеї були суворо обмежені. Це не може бути моїм обліковим записом, оскільки жодним effing способом я не кажу іншим людям свій пароль, і я не буду присутній на сайті досить часто, щоб сам ввести його. Однак є хтось, хто може це зробити особисто, тому я додав їх /etc/sudoers. Як я можу сказати Ubuntu, що коли йому потрібно підвищити привілеї для чогось, він повинен спочатку запитати їх рахунок?

Узагальнити:

  • Рахунки на машині: Аліса, Боб, Керол, Дейв, Еліза.
  • Коли було встановлено Ubuntu, Аліса була першим користувачем, доданим у процесі встановлення.
  • "Дейв" - це власне обліковий запис, яким користуються багато людей, які не можуть бути в ньому, /etc/sudoersоскільки його пароль - це загальнодоступні знання.
  • Боб був призначений "адміністративним" обліковим записом у Gnome і відповідним чином введений /etc/sudoers- Боб є начальником у цьому офісі.
  • Коли дії, для яких потрібні підвищені привілеї, намагаються під час входу в систему як Боб, Керол, Еліза чи Дейв, система повинна запитувати облікові дані Боба.
  • Коли дії, для яких потрібні підвищені привілеї, намагаються під час входу в систему як Аліса, система повинна запитувати облікові дані Аліси (хоча Аліса є своєрідним sysadmin buckaroo і має звичку використовувати su -для виконання розширених завдань адміністратора).

Які зміни конфігурації потрібно внести, щоб створити тут потрібний стан?


Альтернативою було б дозволити команди, пов'язані з віртуалізацією, автоматично використовувати права адміністратора. Я впевнений, що прочитав питання з цього приводу, але забув.
Oxwivi

Швидкий Googling каже мені, що ви робите це з того самого sudoersфайлу, ви можете перевірити, що це manpage для отримання додаткової інформації.
Oxwivi

Я вважав це, коли я редагував sudoers: це не перша допомога через проблеми безпеки. Також дивіться відповідь enzotib - частиною проблеми було плутанина між sudoі PolicyKit.
Брігід МакДоннелл

Відповіді:


9

Перш за все дозвольте зазначити, що привілейовані дії дозволені для некорінного користувача через два різні механізми.

  1. sudo

  2. PolicyKit

Перший використовується, коли ви явно запускаєте команду sudoабо пункт меню, команда якого обгорнута gksu(як Synaptic Package Manager ).
У цьому випадку необхідний пароль - це той, хто викликає користувач, як правило, користувач, який увійшов.

Другий використовується, коли програма, що обізнана з PolicyKit, намагається виконати пільгову дію. У такому випадку програма запитує місцеву владу PolicyKit (через D-Bus), чи можна виконати дію. Тоді Місцева влада через Агента аутентифікації просить активного користувача довести свою особу. Діалогове вікно виглядає наступним чином (на жаль, з текстом італійською мовою :)

введіть тут опис зображення

Ви можете ідентифікувати PolicyKit з маленького чорного трикутника та мітки Деталі . Як бачите, якщо в adminгрупі більше одного користувача , ви можете вибрати зі списку, якого користувача використовувати для аутентифікації.

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

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

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


1
Я відчуваю, що зараз я набагато краще розумію ситуацію. Дякую.
Брігід МакДоннелл

6

Зрозуміло, sudoщо для мене це був би перший вибір у такому випадку. Основні з'являється точка , щоб бути , що більшість (фактичні) адміни не реально використовувати /etc/sudoersйого в максимально можливій мірі ( User_Alias, Runas_Alias, Host_Alias, Cmnd_Alias).

Більшість адміністраторів користуються лише деякими існуючими правилами та додають користувачів, або ще гірше, просто додаючи користувачів до sudoгрупи, для якої зазвичай існує правило в налаштуваннях Ubuntu ( %sudo...). Це, звичайно, дає можливість відповідним користувачам безкоштовно керувати і повною потужністю облікового запису суперпользователя.

З огляду на ваш коментар:

тому я додав їх до /etc/sudoers

Я вважаю, що ви також не використовуєте його наскільки це можливо.

У такому сценарії, як ваш, я би дослівно написав кілька дій, якими Боб повинен обмежитися. Насправді це те, що я робив на сервері, який я підтримую, щоб дозволити двом конкретним користувачам перезавантажити конкретного гостя KVM на хості. Сценарії містять хешбанг з абсолютним шляхом до інтерпретатора (наприклад, #!/bin/dashзамість #!/usr/bin/env bash) та, ймовірно, працюватимуть із оболонкою, яка використовується в іншому місці для привілейованих завдань ( /bin/dashабо /bin/sh). Це лише запобіжні заходи. Крім цього, я б переконався, що жорстко кодують всі абсолютні шляхи до двійкових файлів і використовувати якомога менше їх. Наприклад, при використанні bash/ dashя вважаю builtinза краще s над commands (див. man bash). Це можна зробити досяжним, призначивши змінній абсолютний шлях і звернувшись до програми на основі цієї змінної ($VIRSHзамість /usr/bin/virsh). Якщо можете, перевірте код будь-яких зовнішніх скриптів, перш ніж викликати їх. Особливо, якщо вам потрібно називати їх у привілейованому контексті. У моєму випадку я також обмежую користувачів певним кореневим каталогом та певною підсистемою SSH, оскільки вони підключаються до машини лише за допомогою sshdаутентифікації та відкритого ключа. Очевидно, що вам це не потрібно.

Переконайтесь, щоб chown root: <the-script>; chmod u=rw,a=,a+rx <the-script>запобігти rootповодженню з ним будь-кого, крім власника. Будьте обережні setuidі з setgidбітами, включеними на цільових бінарних файлах ( findїх можна використовувати для їх виявлення). Припустимо на даний момент, у якому знаходиться ваш сценарій /usr/sbin/priv-action.

Тепер відредагуйте свій /etc/sudoers. noexecможе використовуватися для запобігання інших двійкових файлів, окрім явно дозволених. Насправді існує маса додаткових налаштувань, не лише тих, які я тут описую. Тому обов'язково проконсультуйтеся man sudoers.

Тепер я вважаю за краще називати користувачів ( User_Alias) у своєму sudoersфайлі, але ви також можете добре використовувати Group_Alias( man sudoers) або фактичну системну групу (наприклад %sudo):

# The list is comma-separated: bob,alice,...
User_Alias      LIMITED_ADMINS=bob

а потім додайте псевдонім команди, щоб дозволити виконання цього конкретного сценарію:

# The list is comma-separated: /usr/sbin/priv-action,/bin/bash,...
Cmnd_Alias      PRIV_ACTION=/usr/sbin/priv-action

І останнє, але не менш важливе місце - це магічна лінія, яка дозволить bob(вірніше, переліченим у списку користувачів LIMITED_ADMINS) виконувати привілейовані команди за допомогою сценарію:

LIMITED_ADMINS  ALL=(root) PRIV_ACTION

На відміну від попередніх визначень псевдоніму, цей рядок вимагає пояснення. Тож спочатку розберемося у частинах у рядку "Специфікація користувача". Тут man sudoersдопомагає:

Основна структура специфікації користувача є who where = (as_whom) what.

Приклад рядка (знайдений у більшості установок Ubuntu):

root    ALL=(ALL) ALL

Це говорить про те, що користувач з іменем root (використовувати його #0для прив'язки до UID 0) може, на всіх хостах, працювати під будь-яким контекстом користувача будь-що, але йому буде запропоновано його пароль (при умові поведінки за замовчуванням). Додавання NOPASSWDтегу до останнього ALLтакож дозволить rootзробити те ж саме, не запитуючи пароль (як-от:) root ALL=(ALL) NOPASSWD:ALL. ALLє власним псевдонімом підстановки для різних типів псевдонімів.

Але повернемося до Боба:

LIMITED_ADMINS  ALL=(root) PRIV_ACTION

дозволить bobі іншим переліченим членам команди User_Alias LIMITED_ADMINSзапускати (на всіх хостах, ALLсаме для цього) як користувачеві root(група мається на увазі, але може бути задано, див. man sudoers) команди, задані в Cmnd_Alias PRIV_ACTION. Стає краще. Припускаючи, що ви пишете цей сценарій, ви можете дозволити різні параметри, тим самим уникаючи писати кілька сценаріїв. /etc/sudoersіз задоволенням приймає символи, що подібні до оболонок, щоб обмежити можливості аргументів, дозволених для передачі.

Я послідовно виявляв, що адміністратори не використовують sudoersспосіб, яким його слід використовувати, тому я оцінив відповідний "Hack" з двох книг "Linux Server Hacks" та "Linux Server Hacks том два", з чого я почав працювати більш досконале використання цього чудового засобу.

Ви можете придумати всі види суперечностей - що може не зовсім допомогти аспекту безпеки - рішення для вашого конкретного випадку, але як тільки ви промовите основний словниковий запас, /etc/sudoersви можете здійснити досить магічні подвиги :)

Примітка: майте на увазі, що ви також можете створити новий файл під ним, /etc/sudoers.d/якщо ви відчуваєте таке нахил. Це передбачає, що ваш /etc/sudoersрядок містить:

#includedir /etc/sudoers.d

-1

У Unix / Linux існує лише один суперкористувач, його назва - root, але sudoers - це користувачі, які можуть стати root. Ви повинні використовувати групи:

newgrp admins

а потім призначити користувачів цій групі:

chgrp alice admins

потім додайте групу адміністраторів до файлу конфігурації sudoers, як якщо б група була користувачем.

Оновлення

Або ви можете додати будь-якого користувача до групи адміністратора:

chgrp alice admin

Вибачте, що натиснув клавішу вкладки і відправлю її без завершення.
Франциско Вальдес

Зоряний коментар на основі неповної відповіді. Випробування поточної відповіді. Якщо припустити, що додаткова експозиція для майбутніх читачів, можливо, менше знайома із справами сисадміна.
Брігід МакДоннелл

Звичайно, я не мав намір бути зухвалим, є сайт обміну стакесом про sysadmin
Francisco Valdez

Я знаю, що ServerFault існує. Я запитую тут, оскільки це поведінка, характерна для Ubuntu.
Брігід МакДоннелл

AFAIK: adduser <user>, addgroup <group>і adduser <user> <group>є кращим способом на Debian / Ubuntu.
0xC0000022L
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.