- ru sudo
- Sudo не включён по умолчанию в Debian
- Почему sudo
- Обзор настроек
- Проблемы и решения
- Извините, пользователь jdoe не может выполнять .
- sudoers только для чтения
- CVE-2005-4158
- Опция PASSWD не работает
- Неправильное поведение HOME (и настроек профиля)
- Установка и настройка sudo в Debian GNU/Linux и Ubuntu Linux
- I.Установка sudo из репозиториев Debian GNU/Linux.
- II.Базовая настройка sudo.
- III.Продвинутые настройки sudo.
- Comments (migrated from Blogger)
- Установка и настройка sudo в Debian 7
- Список разделов
- Установка sudo в Debian 7
- Параметры команды sudo
- Настройка sudo в Debian 7
- Синхронизация файла sudoers
- Пример содержимого файла sudoers
- Формат файла sudoers
- Алиасы
- Форма записи алиасов
- Типы алиасов
- User_Alias
- Runas_Alias
- Host_Alias
- Cmnd_Alias
- Переопределение умолчаний
- Ключевые слова
- NOPASSWD и PASSWD
- NOEXEC и EXEC
- Подстановочные знаки
- Включение содержимого других файлов в sudoers
- Дополнительные специальные символы
- sudoedit
- ru
- sudo
?Обсуждения
Sudo — программа, дающая возможность системным администраторам позволять пользователям выполнять команды как root (или другой пользователь). Основная философия — позволить людям выполнить свою задачу, используя как можно меньше привилегий. Также sudo — эффективный способ для записи деятельности root: кто использует sudo,какую команду и когда.
Sudo не включён по умолчанию в Debian
Грубо говоря, sudo установлен и включён (если во время установки были выбраны компоненты рабочего стола). Но в Debian права не предоставляются по умолчанию (в отличие от некоторых других дистрибутивов).
Выполнить команду от имени root: (по умолчанию в Debian)
Пароль учётной записи root выбирается при установке системы.
Gnome запрашивает пароль (для учетной записи администратора) при запуске программ, которые настраивают систему.
Для выполнения команды от root, откройте Root Terminal (Приложения > Стандартные > Root Terminal), или запустите su в любом терминале.
(Примечание для DebianSqueeze: введён аналогичный инструмент PolicyKit, ориентированные на потребности настольных компьютеров и ноутбуков).
Почему sudo
Использование sudo лучше (безопаснее) открытия сессии root, по следующим причинам:
- Нет необходимости в пароле root (sudo запрашивает пароль текущего пользователя).
По умолчанию команды выполняются от имени обычного пользователя (не привилегированного), что позволяет избежать ошибок. От имени root выполняются только команды с префиксом sudo.
По этим причинам, переключение на root с помощью «sudo -i» (или sudo su) считается устаревшим, поскольку отменяет вышеперечисленные особенности.
Обзор настроек
Небольшой пример для того чтобы разрешить определённым пользователям запускать некоторые программы (для получения дополнительной информации, см. документацию).
Проблемы и решения
Извините, пользователь jdoe не может выполнять .
Типичный сеанс выглядит следующим образом:
Это сообщение обычно означает, что пользователю не разрешено выполнять этого действие.
sudoers только для чтения
Файл /etc/sudoers только для чтения, даже для root!
Нужно использовать команду visudo для редактирования /etc/sudoers.
CVE-2005-4158
With the fix for CVE-2005-4158: Insecure handling of PERLLIB PERL5LIB PERL5OPT environment vars, the default behaviour of handling environment variables was switched to protect against malicious local users with sudo privileges getting sudo to do more than the malcontent was given privileges to do.
- sudo (1.6.8p7-1.3) stable-security; urgency=high
- Non-maintainer upload by the Security Team
Reverse the environment semantic by forcing users to maintain a whitelist [env.c, Bug 342948, CVE-2005-4158]
As a result, unless you modify your sudoers file to contain Defaults env_reset, you may experience problems using sudo like the following:
- E138: Can’t write viminfo file $HOME/.viminfo!
- dircolors: no SHELL environment variable, and no shell type option given
- squidview: can’t get your home directory, exiting
If you had more complex setups where you meant to pass through environment variables, your work around may be more complex or no longer possible.
Опция PASSWD не работает
sudo has a flag called exempt_group which contains a list of groups for which always NOPASSWD is true and setting PASSWD has no effect. On Debian Systems this list consists of the group sudo.
Неправильное поведение HOME (и настроек профиля)
If you are having problems when you sudo to your shell and your HOME (and profile settings) doesn’t work as expected because your new HOME is root’s homedir you must know that sudo since upstream version 1.7.4 (Debian Squeeze/Sid after Sep/2010) resets all environmental variables in it’s new default configuration, to restore the old behavior of reading the users HOME dir you may preserve the HOME environment variable by adding this to your /etc/sudoers configuration file:
Для получения дополнительной информации см. список изменений для версии 1.7.4
Источник
Установка и настройка sudo в Debian GNU/Linux и Ubuntu Linux
Копия статьи с ныне мёртвого проекта debian-ubuntu-linux.ru.
Обратите внимание, что я всего лишь скопировал статью сюда — я не правил её, и не имею никакого отношения к её содержимому (более того, с некоторыми моментами я категорически не согласен). С другой стороны, я считаю эти статьи полезными для новичка, и потому копирую их.
Все авторские права принадлежат Дмитрию Белоусову.
…По умолчанию в Debian GNU/Linux пакет sudo отсутствует. Установка sudo — это, по глубокому убеждению автора, перовое, что необходимо сделать после завершения установки базовой системы Debian GNU/Linux. У пользователей Ubuntu Linux sudo установлен по умолчанию, однако тоже может потребовать конфигурации.
I.Установка sudo из репозиториев Debian GNU/Linux.
II.Базовая настройка sudo.
Sudo — очень гибкий инструмент, позволяющий настроить права на выполнения административных действий для каждого пользователя отдельно. Например одному разрешить перезагружать какой-либо сервер, а другому дать возможность менять права доступа к файлам и папкам. Откройте файл /etc/sudoers . Это можно сделать либо отдав команду на открытие файла в вашем любимом текстовом редакторе, например так:
либо при помощи утилиты visudo :
Последний способ откроет файл /etc/sudoers в редакторе пользователя по умолчанию, или если таковой не задан, то в редакторе vi. Преимущество данного способа в том, что при сохранении файл будет проверен на соответствие синтаксису.
Простейшая конфигурация выглядит так:
Такая конфигурация дает пользователю user все права пользователя root при выполнении команды sudo. Defaults env_reset полностью запрещает все пользовательские переменные при исполнении команд от имени root. Это хорошо с точки зрения безопасности, однако иногда вызывает проблемы. Можно разрешить использование личных переменных какой-либо группе или отдельному пользователю, добавив подобную этой строку:
которая будет сохранять переменные окружения для всех пользователей группы admin, или:
которая сохранит переменную TZ для пользователя user.
Если сервер администрируется группой людей, то имеет смысл поступить таким образом:
Как можно догадаться, эта запись дает доступ к root-привилегиям всем членам группы admin.
Можно настроить для каждого конкретного пользователя доступ только к конкретным командам. Например:
даст пользователю user права на выполнение команд mount и kill с любой машины, а:
даст пользователю user2 права на выполнение modprobe с машины mydebiancomp . Я думаю, что синтаксис понятен:
где команда прописывается с полным путем. Для группы все аналогично, только добавляется знак “%”.
III.Продвинутые настройки sudo.
Очень удобно при настройке sudo создать группу алиасов. Чтобы не вбивать постоянно повторяющиеся команды, пользователей и хосты, мы можем собрать их в группы и устанавливать правила для каждой группы алиасов. Например так:
Далее именами алиасов можно оперировать точно также, как командами, машинами и пользователями, задавая правила.
Исполнение команды от имени другого пользователя тоже возможно. Например при такой записи:
пользователь user может выполнить команду ark от имени user2 или user3, при помощи ключа u, например так:
По умолчанию sudo запоминает пароли на 5 минут. Если вы этого не хотите, то для каждого пользователя, группы или алиаса можете установить отдельное правило, например при:
пароль полдьзователя user не будет запоминаться вообще, а при:
будет запоминаться на все время аптайма.
Sudo без паролей также возможно. Для этого существует подобная конструкция:
которая даст возможность пользователю user с хоста myubuntucomp использовать kill без запроса пароля. Вставьте свои значения, например ALL вместо имени хоста и команды, чтобы пользователь user мог вообще никогда не вводить пароль для выполнения команд от имени root с любого хоста, однако помните, что это делает систему очень уязвимой.
Надеюсь, что данной информации будет достаточно для настройки ограничений прав доступа при помощи sudo .
Comments (migrated from Blogger)
On 2009-03-27T23:07:00.000+02:00, Andrey wrote:
Статья супер.
Вот только как сделать так, чтобы гномовские административные приложения, запускающиеся через gksu, просили пароль не рута, а юзера?
On 2009-03-27T23:20:00.000+02:00, Programmaster wrote:
Статья супер.
Благодарим Дмитрия Белоусова 🙂
Вот только как сделать так, чтобы гномовские административные приложения, запускающиеся через gksu, просили пароль не рута, а юзера?
Никак. su (консольная утилита) просит пароль того пользователя, права которого ты хочешь получить (по умолчанию — рута), а gksu является GTK+ интерфейсом для /bin/su.
On 2009-03-27T23:29:00.000+02:00, Andrey wrote:
Хмм… может как же тогда в убунту реализована эта возможность, ведь там все гномовские административные приложения кушают пароль юзера и довольны 🙂
On 2009-03-28T00:34:00.000+02:00, Programmaster wrote:
Хмм… может как же тогда в убунту реализована эта возможность, ведь там все гномовские административные приложения кушают пароль юзера и довольны 🙂
Довели, погуглил 🙂
Оказалось, что помимо gksu существует также gksudo (я, честно говоря, подумал о том, что gksudo должна существовать, но почему-то ожидал увидеть реализацию в виде отдельного пакета; очевидно, обе утилиты лежат в gksu), делающий то же,что sudo, но через GTK+ интерфейс. В Debian всё работает правильно, в Ubuntu root’а по умолчанию нет и потому обе утилиты спрашивают пароль текущего юзера. Всей ветки (ссылки ниже) я не читал, но, судя по всему, тебе придётся вручную заменить gksu на gksudo во всех шорткатах в меню, если ты хочешь вводить пасс юзера, а не рута.
On 2009-03-28T09:58:00.000+02:00, Andrey wrote:
thanks! В выходные озадачусь и прикручу sudo + gksudo 🙂
On 2009-03-28T10:07:00.000+02:00, Programmaster wrote:
Рад, что смог помочь. Удачи!
Кстати, было бы интересно потом почитать в твоём блоге, чем же дело закончилось — мало ли, вдруг самому когда придётся с этим возится 🙂
On 2009-03-28T12:22:00.000+02:00, Andrey wrote:
Ок, я в блоге отпишусь обязательно. Давно хотел настроить sudo, да вот никак времени не было
On 2009-04-21T13:45:00.000+03:00, Анонимный wrote:
Ubuntu 8.04
Почему, несмотря на наличие в /etc/sudoers
строки
sudo при выполнении /usr/sbin/hibernate спрашивает пароль user-а?
On 2009-04-21T17:55:00.000+03:00, Programmaster wrote:
Ubuntu 8.04
Почему, несмотря на наличие в /etc/sudoers
строки
user ALL = NOPASSWD: /usr/sbin/hibernate
sudo при выполнении /usr/sbin/hibernate спрашивает пароль user-а?
Честно говоря, не знаю. Ubuntu я вообще не юзал, хотя учитывая то, что она основана на используемом мною Debian’е, кажется странным то, что ты наблюдаешь.
Всё, что могу сделать — посоветовать обратится на форумы. В частности, мне всегда помогали на linuxforum.ru — сходи туда, авось и тебе помогут.
On 2013-08-11T22:41:46.475+03:00, kaban wrote:
у меня пишет
# aptitude install sudo
Следующие НОВЫЕ пакеты будут установлены:
sudo
0 пакетов обновлено, 1 установлено новых, 0 пакетов отмечено для удаления, и 1 пакетов не обновлено.
Необходимо получить 0 B/851 kB архивов. После распаковки 1 885 kB будет занято.
Смена носителя: вставьте диск, помеченный как «Debian GNU/Linux 7.1.0 _Wheezy_ — Official i386 CD Binary-1 20130615-21:54» в привод «/media/cdrom/» и нажмите [Enter].
как сд еще ему нужен?
On 2013-08-12T15:47:40.437+03:00, Minoru wrote:
@kaban , там же ясно написано: нужен первый CD. Это тот диск, с которого ты ставил систему. Если диска у тебя больше нет, можно поправить /etc/apt/sources.list, удалив оттуда соответствующую строку и добавив Интернет-репозитории — тогда пакет скачается оттуда. Удачи!
© 2008–2021 Alexander Batischev. Site’s source.
Content licensed under CC-BY-NC-SA 4.0; code samples under CC0 1.0 Universal.
Источник
Установка и настройка sudo в Debian 7
Список разделов
Sudo — это программа позволяющая администраторам давать ограниченные root права пользователям и вести журнал root активности. Базовая философия заключается в том, чтобы дать так мало прав, как это возможно, но при этом позволить людям нормально выполнять свои задачи. Отличие от команды su в том, что пользователь вводит пароль от своей учетной записи, а не пароль пользователя root.
Sudo в Debian имеет пятнадцатиминутный (может быть переопределен) таймаут после ввода пароля. Это значит, что когда вы первый раз ввели пароль рута, то у вас есть 15 минут в течение которых вы можете выполнить следующую команду без ввода пароля. Таймаут может быть немедленно сброшен с помощью команды sudo -k.
Установка sudo в Debian 7
Во время установки создается конфигурационный файл /etc/sudoers и директория /etc/sudoers.d, о которых мы поговорим чуть позже.
Параметры команды sudo
-k [command] — позволяет сбросить таймаут до момента, когда необходимо будет снова вводить пароль. Если указать команду, которая может потребовать ввода пароля, то таймаут будет сброшен конкретно для этой команды.
-h — будет выведена небольшая подсказка на стандартный выход.
-V — отобразиться версия sudo и плагинов. Если запустить от root, то будут выведены все настройки.
-g group — позволяет задать от какой группы будет запущена команда.
-H — задает директорию, которая будет указана в переменной окружения HOME.
-i [command] — симулирует начальный вход. Если команда не указана, то будет произведен вход в систему, таким образом можно сделаться рутом вместо использования sudo su.
-l[l] [command] — если команда не указана, то будет выведен список доступных команд для вызвавшего пользователя (или пользователя указанного с параметром -U). Если указана команда и она доступна, то будет выведен полный путь до команды и доступные параметры. Если команда не доступна, то sudo закроется со статусом 1. Если использовать параметр -ll или указать -l два раза, то будет использован более подробный формат вывода.
-s [command] — будет запущена оболочка указанная в переменной окружения SHELL. Если указана команда, то она будет передана на исполнения запущенной оболочке.
-U user — совместно с параметром -l позволяет отобразить привилегии определенного пользователя. Доступ спискам привилегий по умолчанию есть у root и пользователей со всеми привилегиями (ALL).
-u user — указанная команда будет запущена от имени указанного пользователя, а не от root.
-v — позволяет продлить таймаут на 15 минут или на тот, который указан в sudoers), но не выполнять каких-либо команд.
Здесь указана большая часть доступных параметров, но не все. Чтобы посмотреть полный список используйте команду man sudo.
Настройка sudo в Debian 7
Рекомендуется все пользовательские настройки задавать в файлах в директории /etc/sudoers.d, а не в основном файле /etc/sudoers. То есть можно создать файл с любым названием в директории /etc/sudoers.d и уже в нем перечислить необходимые настройки.
Файл /etc/sudoers рекомендуется править с помощью утилиты visudo, так как она блокирует файл и осуществляет проверку правильности написания директив при закрытии. visudo использует текстовый редактор по умолчанию, который можно переопределить в sudoers директивой вида:
Синхронизация файла sudoers
Вообще говоря, утилита sudo является локальной, в ней нет встроенных механизмов для распространения единых настроек на множество серверов из одного центра. Для синхронизации можно использовать, к примеру, NFS, rsync или LDAP.
Пример содержимого файла sudoers
Когда читаешь руководство по настройке sudo в Debian, то довольно сложно что-то понять, но на примере все становится на свои места. Так что для начала рассмотрим пример из man sudoers:
# Алиасы содержащие имена пользователей
User_Alias FULLTIMERS = millert, mikef, dowdy
User_Alias PARTTIMERS = bostley, jwfox, crawl
User_Alias WEBMASTERS = will, wendy, wim
# Runas алиасы содержащие имена пользователей или групп от которых будут запускаться команды
Runas_Alias OP = root, operator
Runas_Alias DB = oracle, sybase
Runas_Alias ADMINGRP = adm, oper
# Алиасы для наборов хостов
Host_Alias SPARC = bigtime, eclipse, moet, anchor :\
SGI = grolsch, dandelion, black :\
ALPHA = widget, thalamus, foobar :\
HPPA = boa, nag, python
Host_Alias CUNETS = 128.138.0.0/255.255.0.0
Host_Alias CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0
Host_Alias SERVERS = master, mail, www, ns
Host_Alias CDROM = orion, perseus, hercules
# Алиасы для наборов команд
Cmnd_Alias DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/rdump,\
/usr/sbin/restore, /usr/sbin/rrestore
Cmnd_Alias KILL = /usr/bin/kill
Cmnd_Alias PRINTING = /usr/sbin/lpc, /usr/bin/lprm
Cmnd_Alias SHUTDOWN = /usr/sbin/shutdown
Cmnd_Alias HALT = /usr/sbin/halt
Cmnd_Alias REBOOT = /usr/sbin/reboot
Cmnd_Alias SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh, \
/usr/local/bin/tcsh, /usr/bin/rsh, \
/usr/local/bin/zsh
Cmnd_Alias SU = /usr/bin/su
Cmnd_Alias PAGERS = /usr/bin/more, /usr/bin/pg, /usr/bin/less
Далее мы переопределим некоторые значения установленные по умолчанию при компиляции. Мы хотим чтобы sudo вел лог через syslog с использованием auth во всех случаях. Мы мне хотим, чтобы сотрудники работающие полный день получали предупреждение от sudo, пользователь millert не должен вводить пароль и мы не хотим сбрасывать переменные окружения LOGNAME, USER or USERNAME когда выполняем команды от рута. Дополнительно на машинах в Host_Alias SERVERS мы храним дополнительный локальный лог-файл и убеждаемся, что будет логироваться год в каждой линии так как логи будут храниться несколько лет. Напоследок, в целях безопасности для команд в списке PAGERS мы отключаем возможность запускать другие команды.
# Переопределяем встроенные умолчания
Defaults syslog=auth
Defaults>root !set_logname
Defaults:FULLTIMERS !lecture
Defaults:millert !authenticate
[email protected] log_year, logfile=/var/log/sudo.log
Defaults!PAGERS noexec
Далее идет часть в которой определяется кто что может запускать.
root ALL = (ALL) ALL
%wheel ALL = (ALL) ALL
Мы позволяем руту и всем пользователям в группе wheel запускать любые команды на любом хосте от имени любого пользователя.
FULLTIMERS ALL = NOPASSWD: ALL
Сотрудники работающие полный день (millert, mikef и dowdy) могут запускать любые команды на любом хосте без ввода пароля.
PARTTIMERS ALL = ALL
Сотрудники работающие часть дня (bostley, jwfox и crawl) могут исполнять любые команды на любых хостах, но должны вначале пройти процедуру аутентификации.
jack CSNETS = ALL
Пользователь jack может выполнять любые команды на машинах из списка CSNETS.
operator ALL = DUMPS, KILL, SHUTDOWN, HALT, REBOOT, PRINTING,\
sudoedit /etc/printcap, /usr/oper/bin/
Оператор может выполнять команды ограниченные простой поддержкой системы. Эти команды связаны с созданием резервных копий, убийством процессов, системой печати, отключением системы и командами в директории /usr/oper/bin/.
joe ALL = /usr/bin/su operator
Пользователь joe может использовать su только чтобы стать пользователем operator.
pete HPPA = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
%opers ALL = (: ADMINGRP) /usr/sbin/
Пользователи в группе opers могуть запускать команды из /usr/sbin/ от имени себя в сочетании с любой группой из Runas_Alias ADMINGRP (группы adm и oper).
Пользователь pete может менять пароль любого пользователя за исключением root на любой машине из списка HPPA. В данном случае не получится указать несколько имен пользователей в командной строке.
bob SPARC = (OP) ALL : SGI = (OP) ALL
Пользователь bob может исполнять любые команды на машинах из групп SPARC и SGI от имени пользователей в Runas_Alias OP (root и operator).
jim +biglab = ALL
Пользователь jim может запускать любые команды в сетевой группе biglab. Sudo понимает, что biglab — это сетевая группа благодаря префиксу “+”.
fred ALL = (DB) NOPASSWD: ALL
Пользователь fred может выполнять любые команды от имени пользователей в Runas_Alias DB без авторизации.
john ALPHA = /usr/bin/su [!-]*, !/usr/bin/su *root*
На машинах в списке ALPHA пользователь john может использовать su чтобы стать любым пользователем кроме рута. При этом он не может использовать какие-либо параметры команды su.
jen ALL, !SERVERS = ALL
Пользователь jen может запускать любые команды на любой машине кроме входящих в список SERVERS.
jill SERVERS = /usr/bin/, !SU, !SHELLS
На любых машинах из списка SERVERS, jill может запускать любые команды за исключением содержащихся в списках SU и SHELLS.
steve CSNETS = (operator) /usr/local/op_commands/
Пользователь steve может запускать любые команды в директории /usr/local/op_commands/ на машинах в сети CSNETS но только в качестве пользователя operator.
matt valkyrie = KILL
На его персональной рабочей станции пользователю matt требуется возможность убивать процессы.
WEBMASTERS www = (www) ALL, (root) /usr/bin/su www
На хосте www любой пользователь в списке WEBMASTERS (will, wendy и wim) могут запускать любые команды от пользователя www (который владеет файлами сайтов) или просто становиться пользователем www с помощью команды su.
ALL CDROM = NOPASSWD: /sbin/umount /CDROM,\
/sbin/mount -o nosuid\,nodev /dev/cd0a /CDROM
Любой пользователь может монтировать или отмонтировать CD-ROM на машинах в списке CDROM без ввода пароля.
Далее подробно разберем разные элементы файла /etc/sudoers.
Формат файла sudoers
Файл sudoers содержит два типа записей: алиасы (обычные переменные) и спецификации пользователей (указывают кто, что и где может запускать).
Когда есть несколько спецификаций для одного пользователя, они применяются по порядку, то есть используется последняя.
В итоге форма спецификации имеет следующий вид:
кто где = (от имени кого) что
В более полной форме:
кто где = (от имени кого) что, (от имени кого) что : где = (от имени кого) что, (от имени кого) что
Также можно указать от какой группы можно запускать команду:
кто где = (от имени кого : от какой группы) что
Или даже более сложный вариант:
кто где = (от имени кого, от имени кого : от какой группы, от какой группы) что, что
В скобках указано от какого пользователя или группы можно запускать команды. Пользователи и группы друг от друга отделяются запятыми. Пользователи от групп отделяются двоеточиями.
Если вы хотите для одного пользователя задать разные настройки на разных хостах, то для разделения также используются двоеточия.
user1 host1 = (op : opgr) /bin/ls
это правило говорит о том, что пользователь user1 может выполнить команду /bin/ls следующим образом:
Алиасы
Форма записи алиасов
Тип_алиаса Имя = пункт 1, пункт 2 : Имя = пункт 3, пункт 4
Имя алиаса может состоять из латинских букв обоих регистров, цифр и символа нижнего подчеркивания. Имя обязательно должно начинаться с буквы в верхнем регистре.
Типы алиасов
User_Alias
Может содержать одно или более имен пользователей, id пользователей (с префиксом #), имен групп пользователей и их id (с префиксами % и %#, соответственно), сетевые группы (с префиксом +), не-юникосовые имена групп и ID (с префиксами %: и %:#, соответственно), а также алиасы пользователей (User_Aliases). Каждый пункт может предваряться символом восклицательного знака (“!”).
Пункты могут быть заключены в двойные кавычки чтобы избежать использования экранирования специальных символов. При использовании двойных кавычек префиксы должны быть включены в текст между кавычками.
Runas_Alias
Данный алиас может содержать те же пункты, что и User_Alias. Обратите внимание, что имена и группы сравниваются как строки. Другими словами, два пользователя (группы) с разными именами, но с одинаковыми uid (gid) считаются различными. Если вы хотите указать все имена пользователей с одинаковым uid (к примеру, root и toor), вы можете использовать uid (#0 в нашем примере).
Host_Alias
Может состоять из одного или более имен хостов, IP адресов, сетей, сетевых групп (с префиксом +) и других алиасов. Повторимся, значение пункта может задано в отрицательном ключе с помощью символа восклицательного знака. Если вы не задали маску сети вместе с адресом сети, sudo проверит каждый сетевой интерфейс хоста и если адрес сети подойдет к одному из сетевых интерфейсов, будет использована соответствующая сетевая маска. Маска может быть задана либо в виде обычного IP-адреса (вида 255.255.255.0), либо в краткой форме в виден числа (количество бит, к примеру /24). Имя хоста может включать подстановочные знаки (о них чуть позже), но чтобы они работали необходимо, чтобы команда hostname выдавала полностью определенное доменное имя (fqdn). Стоит учесть, что sudo проверяет только реально существующие сетевые интерфейсы и IP-адрес 127.0.0.1 (localhost) использовать не удастся.
Cmnd_Alias
В список могут входить одна или более команд, директорий или других алиасов. Команда — это полностью определенное имя файла (то есть содержащее путь до файла), которое может содержать подстановочные символы. Простое имя файла позволяет пользователю запускать команду с любыми аргументами. Однако вы можете также указать аргументы командной строки (включая подстановочные символы). С другой стороны, можно указать “” чтобы предотвратить использование каких-либо аргументов с данной командой. Директория — это полностью определенный путь заканчивающийся символом ‘/’. Когда в Cmnd_Alias указана директория, пользователь может запускать любые файлы внутри этой директории (но не в ее поддиректориях).
Переопределение умолчаний
Некоторые опции могут быть изменены во время запуска с помощью одной или более записей Defaults, которые могут влиять на всех пользователей на любом хосте, на всех пользователей на определенном хосте, на определенного пользователя, определенную команду или на команды запускаемые от определенного пользователя. Стоит помнить, что записи для отдельных команд не могут включать аргументы. Если нужно задать аргументы, то задайте Cmnd_Alias и используйте его.
При записи Defaults для различных алиасов используются различные символы указывающие на тип алиаса:
‘Defaults’ ‘@’ Host_List
‘Defaults’ ‘:’ User_List
‘Defaults’ ‘!’ Cmnd_List
‘Defaults’ ‘>’ Runas_List
Параметрами могут быть флаги, целочисленные значения, строки и списки. Флаги являются булевыми и могут быть отключены с помощью оператора “!”. Значения могут быть заключены в двойные кавычки если они содержат несколько слов. Специальные символы могут быть экранированы с помощью обратной косой черты (\).
Списки имеют два оператора присваивания += и -=. Эти операторы используются для добавления и удаления из списка, соответственно.
Записи ‘Defaults’ обрабатываются в следующем порядке: вначале основные, для хостов и пользователей, затем runas и, наконец, для команд.
Полный список опций достаточно велик и мы не будем их здесь приводить. Если вы хотите их просмотреть, пожалуйста, воспользуйтесь командой man sudoers.
Ключевые слова
С командой может использоваться ноль или более ключевых слов. Существует восемь ключевых слов: NOPASSWD, PASSWD, NOEXEC, EXEC, SETENV, NOSETENV, LOG_INPUT, NOLOG_INPUT, LOG_OUTPUT and NOLOG_OUTPUT.
NOPASSWD и PASSWD
По умолчанию, чтобы выполнить команду необходимо предварительно авторизоваться. Такое поведение можно изменить с помощью ключевого слова NOPASSWD. NOPASSWD оказывает влияние на команды, которые идут после ключевого слова. PASSWD же можно использовать чтобы обратить влияние NOPASSWD. Например:
user1 host1 = NOPASSWD: /bin/ls, /bin/ln, PASSWD: /bin/kill
NOEXEC и EXEC
NOEXEC может использоваться для того, чтобы предотвратить запуск динамически слинкованых исполняемых файлов с помощью доступных для исполнения команд. Пример:
user1 host1 = NOEXEC: /usr/bin/more
Информацию об остальных ключевых словах читайте в том же мане.
Подстановочные знаки
sudo позволяет использовать подстановочные знаки (а также, мета или глобальные символы) в именах хостов, путях и аргументах командной строки в файле sudoers. Стоит помнить, что это не регулярные выражения.
* — заменяет ноль или более любых символов.
? — заменяет любой один символ.
[. ] — заменяет любой символ в заданном диапазоне.
[. ] — заменяет любой символ НЕ входящий в заданных диапазон.
\ — символ экранирования чтобы в именах можно было использовать специальные символы.
Также можно использовать классы символов. Однако, так как двоеточние (“:”) является специальным символом, то его приходится экранировать:
это будет обозначать любой файл начинающийся с буквы.
Кроме того, прямая косая черта не заменяется подстановочными знаками. К примеру:
соответствует /usr/bin/who, но не соответствует /usr/bin/X11/xterm.
Чтобы запретить использование аргументов командной строки, можно использовать двойные кавычки — «».
Включение содержимого других файлов в sudoers
Включение (“инклуд” от include) содержимого других файлов возможен с помощью директив #include и #includedir.
Это может использоваться в ситуации, когда у вас есть директивы для sudo общие для всех серверов и особые на каждом сервере. В таком случае можно создать два файла, к примеру, sudoers и sudoers.local. Затем второй инклудится в первый с помощью директивы (вместе со значком решетки):
Также можно создать файлы с разными частями после точки, соответствующими именам серверов и инклудить их следующим образом:
где вместо %h подставляется имя хоста.
Что касается директивы #includedir, то можно создать отдельную директорию, в которую можно складывать файлы и они будут автоматически включаться в файл sudoers. К примеру, в Debian после установки sudo создается директория /etc/sudoers.d/, а в файле /etc/sudoers добавлена директива:
Стоит учесть, что файлы обрабатываются и сортируются лексически, а не по номерам. То есть, к примеру, файл /etc/sudoers.d/01_first будет обработан перед /etc/sudoers.d/10_second, но файл с именем /etc/sudoers.d/1_whoops будет обработан после /etc/sudoers.d/10_second, так как вначале названия отсутствует ноль.
Дополнительные специальные символы
Знак решетки (‘#‘) используется для создания комментариев, за исключением применения в директиве #include. Все символы от знака решетки до конца строки считаются комментарием.
ALL — является зарезервированным словом, которое обозначает все возможные значения. Может использоваться вместо любых алиасов и значений в полях “кто”, “где”, “от кого”, “что”. Не пытайтесь создавать алиасы с именем ALL.
Восклицательный знак (‘!‘) используется как логический оператор отрицания (not) и позволяет исключать определенные значения. К примеру, можно разрешить выполнять любые операции за исключением некоторых используя ALL и “!”.
Длинные строки можно разбивать на подстроки с помощью символа обратной косой черты (‘\‘) стоящего в конце каждой подстроки кроме последней.
Пробелы между элементами ‘=‘, ‘:‘, ‘(‘, ‘)‘ не обязательны. То есть их можно использовать, а можно не использовать.
Следующие символы необходимо экранировать с помощью символа обратной косой черты (‘\’):
‘!‘, ‘=‘, ‘:‘, ‘,‘, ‘(‘, ‘)‘, ‘\‘.
sudoedit
Если требуется отредактировать какой-либо текстовый файл, доступ к которому есть доступ только у другого пользователя или рута, то можно воспользоваться утилитой sudoedit, что быстрее, чем запускать редактор с помощью sudo. Также можно использовать ключи -u и -g для запуска от определенного пользователя или группы. По умолчанию будет использовать учетная запись рута.
Источник