Я настраиваю машину Ubuntu (10.10), которая будет использоваться несколькими людьми. Это - общая машина в малом офисе. Его основные роли размещают виртуальные машины с VirtualBox и служат файлам с Samba.
Для Samba должны быть настроены несколько учетных записей пользователей так, чтобы различные люди могли соединиться с долями Samba от своих собственных рабочих станций. Однако существует также учетная запись, которая выделена просто выполнению виртуальных машин, которые будут использовать несколько человек. Иногда люди пытаются сделать вещи с этой учетной записью, которые требуют поднятых полномочий - это вызывает Gnome, "введите пароль административного пользователя" диалоговое окно для появления. Однако это диалоговое окно запрашивает мой пароль - когда я настроил машину, мой был первой созданной учетной записью, таким образом, это, кажется, предполагает, что я - предоставленные sudo полномочия единственного пользователя.
Я хочу назначить другого пользователя как "администратора первого курорта", если можно так выразиться, и это не может быть пользователь общей учетной записи, потому что все должны знать пароль той учетной записи, таким образом, я хочу ее полномочия, строго ограниченные. Это не может быть моя учетная запись, так как никакой effing путь не я говорящий другим людям мой пароль, и я не буду присутствовать на сайте достаточно часто для ввода его сам. Существует, тем не менее, кто-то, кто может сделать это лично, таким образом, я добавил их к /etc/sudoers
. Как я могу сказать Ubuntu, что, когда она должна поднять полномочия для чего-то, она должна попросить их учетную запись сначала?
Подводить итог:
/etc/sudoers
потому что его пароль является общеизвестным фактом. /etc/sudoers
- Bob является боссом в этом офисе.su -
сделать расширенные задачи администрирования).Какие изменения конфигурации я должен внести для вызывания требуемого состояния здесь?
В Unix / Linux есть только один суперпользователь, его имя - root, но sudoers - это пользователи, которые могут стать root. Вы должны использовать группы:
newgrp admins
, а затем назначить пользователей в эту группу:
chgrp alice admins
, а затем добавить группу admins в файл конфигурации sudoers, как если бы эта группа была пользователем.
Обновление
Или вы можете добавить любого пользователя в группу администраторов:
chgrp alice admin
Прежде всего позвольте указать, что привилегированные действия разрешены для некорневого пользователя через два разных механизма.
sudo
PolicyKit
Первый используется, когда вы явно запускаете команду с [ 111] или пункт меню, команда которого заключена в gksu
(например, Synaptic Package Manager ).
В этом случае требуется пароль вызывающего пользователя, обычно это пользователь, вошедший в систему.
Второй используется, когда приложение с поддержкой PolicyKit пытается выполнить привилегированное действие. В таком случае приложение запрашивает локальный орган PolicyKit (через D-Bus), можно ли выполнить действие. Затем локальный орган через агента аутентификации просит активного пользователя подтвердить свою личность. Диалоговые окна похожи на следующие (к сожалению, с текстом на итальянском языке:)
Вы можете идентифицировать PolicyKit по маленькому черному треугольнику и метке Подробности [ 119]. Как видите, если в группу admin
входит более одного пользователя, вы можете выбрать из списка, какого пользователя использовать для аутентификации.
Учитывая все это, и sudo
, и PolicyKit намного сложнее в отношении конфигураций, которые могут быть достигнуты: вы можете настроить действие, которое может быть выполнено без пароля, выполненным только конкретным пользователем или группой и т. д.
В ответ на ваш вопрос, когда механизмом, используемым приложением, является PolicyKit, независимо от текущего пользователя, вошедшего в систему, требуется пароль Боба или Алисы (только два администратора, если я правильно понимаю), и Вы можете изменить из списка, какого пользователя вы хотите использовать для аутентификации.
Когда механизмом, используемым приложением, является sudo
(для задач администратора, выполняемых через GUI, это становится все менее частым), у вас нет немедленного и простого способа выбрать пользователя для аутентификации.
Очевидно, sudo
был бы предпочтительный вариант для меня в таком случае. Важный пункт, кажется, что самые (фактические) администраторы на самом деле не используют /etc/sudoers
до его самой полной степени (User_Alias
, Runas_Alias
, Host_Alias
, Cmnd_Alias
).
Большинство администраторов заканчивает тем, что использовало только некоторые существующие правила и добавило пользователей, или хуже, просто добавляющих пользователей к sudo
группа, для которой правило обычно существует на установках Ubuntu (%sudo
...). Это, конечно, дает соответствующую пользовательскую полную свободу и полную мощность учетной записи суперпользователя.
Учитывая Ваш комментарий:
таким образом, я добавил их к
/etc/sudoers
Я считаю, что Вы также не используете его по мере возможности.
В сценарии такой как Ваш я буквально написал бы сценарий нескольких действий, которыми должен быть ограничен Bob. На самом деле это - то, что я сделал на сервере, который я поддерживаю, чтобы позволить двум конкретным пользователям перезагружать конкретного гостя KVM на хосте. Сценарии содержали бы hashbang с полным путем к интерпретатору (например. #!/bin/dash
вместо #!/usr/bin/env bash
) и вероятно выполненный с оболочкой, которая используется в другом месте для привилегированных задач (/bin/dash
или /bin/sh
). Это - просто меры предосторожности. Кроме этого, я удостоверился бы к hardcode все полные пути к двоичным файлам и использованию как можно меньше из них. Например, при использовании 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
файл, но Вы могли точно также использовать a 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
внутренний подстановочный псевдоним для различных типов псевдонима.
Но назад Bob:
LIMITED_ADMINS ALL=(root) PRIV_ACTION
позволил бы bob
и другие перечисленные члены User_Alias LIMITED_ADMINS
работать (на всех хостах, это что ALL
для) как пользователь root
(группа подразумевала, но могла быть дана, видеть man sudoers
) команды, поданные Cmnd_Alias PRIV_ACTION
. Это поправляется. Все еще принятие Вас пишет этот сценарий, Вы могли позволить различные параметры, таким образом, стараясь не писать несколько сценариев. /etc/sudoers
с удовольствием берет подобные оболочке подстановочные знаки для ограничения возможностей аргументов, позволенных быть переданными.
Я последовательно находил, что администраторы не используют sudoers
путем это должно использоваться, который является, почему я ценил соответствующий "Взлом" из двух книг "Взломы Сервера Linux" и "Объем Взломов Сервера Linux Два", который запустил меня с более сложного использования этого большого средства.
Можно придумать все виды замысловатых - который не может точно помочь аспекту безопасности - решения для особого случая, но после того как Вы говорите базовый словарь /etc/sudoers
можно выполнить довольно волшебные подвиги :)
NB: имеет в виду, что можно также создать новый файл внизу /etc/sudoers.d/
если Вы чувствуете себя настолько склонными. Это принимает Ваш /etc/sudoers
содержит строку:
#includedir /etc/sudoers.d