Когда Ubuntu запрашивает пароль администратора, как он решает, какой административный пользователь должен попросить?

Я настраиваю машину Ubuntu (10.10), которая будет использоваться несколькими людьми. Это общий компьютер в небольшом офисе. Его основные роли - размещение виртуальных машин с помощью VirtualBox и обслуживание файлов с Samba.

Для Samba необходимо настроить несколько учетных записей пользователей, чтобы различные люди могли подключаться к общим ресурсам Samba со своих рабочих станций. Тем не менее, есть также учетная запись, предназначенная только для запуска виртуальных машин, которые будут использоваться несколькими людьми. Иногда люди пытаются сделать что-то с этой учетной записью, которая требует повышенных привилегий - это вызывает всплывающее диалоговое окно «Пожалуйста, введите пароль администратора». Тем не менее, этот диалог запрашивает мой пароль - когда я настраивал машину, моя была первой созданной учетной записью, поэтому, похоже, я предполагаю, что я единственный пользователь, которому предоставлены полномочия sudo.

Я хочу назначить другого пользователя как «администратора первого курорта», так сказать, и он не может быть пользователем общей учетной записи, потому что каждый должен знать пароль этой учетной записи, поэтому Я хочу, чтобы его привилегии строго ограничивались. Это не может быть моя учетная запись, поскольку я не могу сказать другим людям свой пароль, и я не буду присутствовать на сайте достаточно часто, чтобы войти в него сам. Есть, однако, кто-то, кто может сделать это лично, поэтому я добавил их в /etc/sudoers. Как я могу сказать Ubuntu, что, когда ему нужно повысить привилегии для чего-то, он должен сначала попросить их учетную запись ?

Подводя итог:

  • Учетные записи на компьютере: Алиса, Боб, Кэрол, Дейв, Элиза.
  • Когда Ubuntu был установлен, Алиса была первым пользователем, добавленным во время процесса установки.
  • «Dave» на самом деле это учетная запись, которую используют многие люди, кто не может быть в /etc/sudoers, потому что его пароль является общедоступным.
  • Боб был настроен как «Административная» учетная запись в Gnome и соответствующим образом введен в /etc/sudoers. Боб - босс в этом офисе.
  • Когда действия, требующие повышенных привилегий (g7) Когда действия, требующие повышенных привилегий, выполняются во время входа в систему как Алиса, система должна запросить учетные данные Алисы (например, хотя Алиса - своего рода системный администратор buckaroo и имеет привычку использовать su - для выполнения расширенных задач администратора.)

Какие изменения конфигурации мне нужно сделать, чтобы добиться желаемого состояния здесь ?

11
задан 14 December 2011 в 01:16

3 ответа

Прежде всего, можно указать, что привилегированные действия разрешены для пользователя без полномочий root через два разных механизма.

sudo PolicyKit

Первый используется, когда вы явно выполняете команду с sudo или пунктом меню, команда которого завершена с помощью gksu (например, non-root ). В этом случае требуемым паролем является пароль вызывающего пользователя, обычно пользователь зарегистрировался.

Второй используется, когда приложение, поддерживающее PolicyKit, пытается выполнить привилегированное действие. В этом случае приложение запрашивает локальную власть PolicyKit (через D-Bus), если действие может быть выполнено. Затем локальный орган через агента проверки подлинности просит активного пользователя подтвердить свою личность. Диалоговое окно выглядит следующим образом (к сожалению, с текстом на итальянском языке:)

Вы можете определить PolicyKit из маленького черного треугольника и метки. Как вы можете видеть, если больше одного пользователя находится в группе admin, вы можете выбрать из списка, который пользователь должен использовать для аутентификации.

Учитывая все это, как sudo, так и PolicyKit намного сложнее в отношении конфигураций, которые могут быть достигнуты: вы можете настроить действие, которое может быть выполнено без пароля, выполняемое только конкретным пользователем или группа и т. д.

Подойдя к вашему вопросу, когда механизм, используемый приложением, является PolicyKit, независимо от текущего зарегистрированного пользователя, требуемым паролем должен быть пароль Bob или Alice (только два пользователя admin , если я правильно понимаю), и вы можете перейти из списка, который вы хотите использовать для аутентификации.

Когда механизм, используемый приложением, - sudo (для задач администратора, выполняемых через графический интерфейс, это становясь менее частым), у вас нет непосредственного и простого средства выбора пользователя для аутентификации.

9
ответ дан 25 May 2018 в 15:58
  • 1
    Я чувствую, что сейчас я лучше понимаю ситуацию. Спасибо. – Brighid McDonnell 14 December 2011 в 03:39

Ясно, что 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 по command s (см. 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 помогает:

, поэтому я добавил их в /etc/sudoers

. Основная структура пользовательской спецификации - who where = (as_whom) what. [!d15 ]

root    ALL=(ALL) ALL

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

Это говорит о том, что пользователь существует 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 с радостью принимает shell-подобные подстановочные знаки, чтобы ограничить возможности разрешенных аргументов.

Я постоянно обнаружил, что администраторы не используют sudoers способ его использования, поэтому Я оценил соответствующий «Hack» из двух книг «Linux Server Hacks» и «Linux Server Hacks Volume Two», благодаря чему я начал с более сложного использования этого прекрасного средства.

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

#includedir /etc/sudoers.d
6
ответ дан 25 May 2018 в 15:58

В Unix / Linux есть только один суперпользователь, его имя - root, но sudoers - это пользователи, которые могут стать root. Вы должны использовать группы:

newgrp admins

, а затем назначить пользователей этой группе:

chgrp alice admins

затем добавить группу админов в конфигурационный файл sudoers, например, если группа была

Обновить

Или вы можете добавить любого пользователя в группу администратора:

chgrp alice admin
-1
ответ дан 25 May 2018 в 15:58
  • 1
    Извините, я нажал клавишу вкладки и отправлю ее, не закончив ее. – Francisco Valdez 14 December 2011 в 01:54
  • 2
    Zorched комментарий, основанный на неполном ответе. Выполните текущий ответ. Предполагая, что дополнительная экспозиция для будущих читателей, возможно, менее знакома с работой администратора. – Brighid McDonnell 14 December 2011 в 02:00
  • 3
    Конечно, я не хотел быть нахальным, есть сайт stackexchange о sysadmin – Francisco Valdez 14 December 2011 в 02:07
  • 4
    Я знаю, что ServerFault существует. Я спрашиваю здесь, потому что это поведение, характерное для Ubuntu. – Brighid McDonnell 14 December 2011 в 02:32
  • 5
    AFAIK: adduser <user>, addgroup <group> и adduser <user> <group> являются предпочтительным способом для Debian / Ubuntu. – 0xC0000022L 1 February 2013 в 08:22

Другие вопросы по тегам:

Похожие вопросы: