- Ubuntu Documentation
- Introduction
- Editing the sudoers file
- Aliases
- User Aliases
- Runas Aliases
- Host Aliases
- Command Aliases
- User Specifications
- The Default Ubuntu Sudoers File
- Common Tasks
- Shutting Down From The Console Without A Password
- Multiple tags on a line
- Enabling Visual Feedback when Typing Passwords
- Troubleshooting
- Как использовать sudo и файл sudoers
- Что такое sudo
- Sudoers файл
- Синтаксис файла sudoers
- Редактирование файла sudoers
- Используйте файлa sudoers для предоставления определенных привилегий
- Подведем итоги
- Sudo (Русский)
- Contents
- Обоснование
- Установка
- Использование
- Настройка
- Просмотр текущих настроек
- Использование visudo
- Примеры настроек
- Права доступа к файлам sudoers по умолчанию
- Время действия введённого пароля
- Советы и рекомендации
- Автодополнение по нажатию Tab в bash
- Один тайм-аут на все сеансы терминала
- Всегда показывать замечание о безопасности
- Переменные окружения
- Перенос псевдонимов
- Шутливые оскорбления
- Пароль суперпользователя
- Отключение учетной записи root
- kdesu
- Еще один пример настройки
- Настройка sudo с помощью вкладываемых в /etc/sudoers.d файлов
- Решение проблем
- Проблемы с TTY через SSH
- Показать привилегии пользователя
- Наложение umask
- Опции по умолчанию
Ubuntu Documentation
Introduction
The /etc/sudoers file controls who can run what commands as what users on what machines and can also control special things such as whether you need a password for particular commands. The file is composed of aliases (basically variables) and user specifications (which control who can run what).
Editing the sudoers file
For Ubuntu 8.04 : The default editor for visudo has changed to vi, which may cause confusion to those who are not familiar to its command bindings. To change this behavior, open your
/.bashrc file, and append the line to the bottom of the file:
If you wish to use another text editor, replace «nano» with any text editor of your choice. Run source
/.bashrc to ensure the changes you made have taken effect.
Now launch visudo with sudo -E visudo in the terminal, and put in Defaults editor=/usr/bin/nano in the file.
So the top of the file should now look like this:
Again, if you wish to use another text editor, replace «nano» with the full path to the text editor of your choice. Save, and from now on launching visudo with gksu visudo for Ubuntu; kdesu visudo for Kubuntu or sudo visudo in the terminal will now open with your chosen editor.
For Ubuntu 8.10 : The default editor for visudo has changed to sensible-editor. sensible-editor defaults to nano now, and select-editor (which will run by default the first time) allows you to select another one.
To setup the default editor for visudo.
You will get a prompt to choose which editor you want.
If you don’t consider yourself competent in any of the enlisted terminal-based editors, it is recommended that you choose option 3, nano.
Because sudo is such a powerful program you must take care not to put anything formatted incorrectly in the file. To prevent any incorrect formatting getting into the file you should edit it using the command visudo run as root or by using sudo.
The sudoers file is read in one pass so when multiple entries match for a user, they are applied in order. Where there are conflicting values, the last match is used (which is not necessarily the most specific match). Also you must set an alias before you can use it. Normally you will set the aliases at the beginning of the file and then set the user specifications after all the aliases are laid out.
You can insert comments by prefixing them with a # but this is also used to specify a uid in certain parts of the file when it is followed by a number.
Aliases
There are four kinds of aliases: User_Alias, Runas_Alias, Host_Alias and Cmnd_Alias. Each alias definition is of the form:
- Alias_Type NAME = item1, item2, .
Where Alias_Type is one of User_Alias, Runas_Alias, Host_Alias or Cmnd_Alias. A name is a string of uppercase letters, numbers and underscores starting with an uppercase letter. You can put several aliases of the same type on one line by separating them with colons (:) as so:
- Alias_Type NAME1 = item1, item2 : NAME2 = item3
You can include other aliases in an alias specification provided they would normally fit there. For example you can use a user alias wherever you would normally expect to see a list of users (for example in a user or runas alias).
There are also built in aliases called ALL which match everything where they are used. If you used ALL in place of a user list it matches all users for example. If you try and set an alias of ALL it will be overridden by this built in alias so don’t even try.
User Aliases
User aliases are used to specify groups of users. You can specify usernames, system groups (prefixed by a %) and netgroups (prefixed by a +) as follows:
Runas Aliases
Runas Aliases are almost the same as user aliases but you are allowed to specify users by uid’s. This is helpful as usernames and groups are matched as strings so two users with the same uid but different usernames will not be matched by entering a single username but can be matched with a uid. For example:
Host Aliases
A host alias is a list of hostname, ip addresses, networks and netgroups (prefixed with a +). If you do not specify a netmask with a network the netmask of the hosts ethernet interface(s) will be used when matching.
Command Aliases
Command aliases are lists of commands and directories. You can use this to specify a group of commands. If you specify a directory it will include any file within that directory but not in any subdirectories.
The special command ‘»sudoedit»‘ allows users to run sudo with the -e flag or as the command sudoedit. If you include command line arguments in a command in an alias these must exactly match what the user enters on the command line. If you include any of the following they will need to be escaped with a backslash (\): «,», «\», «:», «=».
User Specifications
User Specifications are where the sudoers file sets who can run what as who. It is the key part of the file and all the aliases have just been set up for this very point. If this was a film this part is where all the key threads of the story come together in the glorious unveiling before the final climatic ending. Basically it is important and without this you ain’t going anywhere.
A user specification is in the format
The user list is a list of users or a user alias that has already been set, the host list is a list of hosts or a host alias, the operator list is a list of users they must be running as or a runas alias and the command list is a list of commands or a cmnd alias.
The tag list has not been covered yet and allows you set special things for each command. You can use PASSWD and NOPASSWD to specify whether the user has to enter a password or not and you can also use NOEXEC to prevent any programs launching shells themselves (as once a program is running with sudo it has full root privileges so could launch a root shell to circumvent any restrictions in the sudoers file.
For example (using the aliases and users from earlier)
The Default Ubuntu Sudoers File
The sudoers file that ships with Ubuntu 8.04 by default is included here so if you break everything you can restore it if needed and also to highlight some key things.
This is pretty much empty and only has three rules in it. The first (Defaults env_reset) resets the terminal environment after switching to root. So, ie: all user set variables are removed. The second (root ALL=(ALL) ALL) just lets root do everything on any machine as any user. And the third (%admin ALL=(ALL) ALL) lets anybody in the admin group run anything as any user. Note that they will still require a password (thus giving you the normal behaviour you are so used to).
If you want to add your own specifications and you are a member of the admin group then you will need to add them after this line. Otherwise all your changes will be overridden by this line saying you (as part of the admin group) can do anything on any machine as any user provided you give a password.
Common Tasks
This section includes some common tasks and how to accomplish them using the sudoers file.
Shutting Down From The Console Without A Password
Often people want to be able to shut their computers down without requiring a password to do so. This is particularly useful in media PCs where you want to be able to use the shutdown command in the media centre to shutdown the whole computer.
To do this you need to add some cmnd aliases as follows:
You also need to add a user specification (at the end of the file after the «%admin ALL = (ALL) ALL» line so it takes effect — see above for details):
Obviously you need to replace » » with the username of the user who needs to be able to shutdown the pc without a password. You can use a user alias here as normal.
Multiple tags on a line
There are times where you need to have both NOPASSWD and NOEXEC or other tags on the same configuration line. The man page for sudoers is less than clear, so here is an example of how this is done:
This example lets the user «myuser» run as root the «vim» binary without a password, and without letting vim shell out (the :shell command).
Enabling Visual Feedback when Typing Passwords
As of Ubuntu 10.04 (Lucid), you can enable visual feedback when you are typing a password at a sudo prompt.
Simply edit /etc/sudoers and change the Defaults line to read:
Troubleshooting
If your changes don’t seem to have had any effect, check that they are not trying to use aliases that are not defined yet and that no other user specifications later in the file are overriding what you are trying to accomplish.
Sudoers (последним исправлял пользователь j-w-taylor-01 2014-12-11 10:54:25)
The material on this wiki is available under a free license, see Copyright / License for details
You can contribute to this wiki, see Wiki Guide for details
Источник
Как использовать sudo и файл sudoers
Команда sudo позволяет пользователям без полномочий root запускать команды, которые обычно требуют привилегий суперпользователя, в то время как в файле sudoers прописаны инструкции, как обрабатывать команду sudo. В этом руководстве мы покажем вам все основы команд sudo и способы редактирования файла sudoers.
Что такое sudo
Чтобы показать, как работает команда sudo, сначала получите доступ к вашему VPS через SSH. Если у вас возникли проблемы, ознакомьтесь с руководством по PuTTY.
По умолчанию пользователю root не нужно использовать префикс sudo. У них уже есть все возможные привилегии. Между тем, если пользователь без полномочий root хочет добавить другого пользователя, он должен добавить префикс sudo к команде useradd, например так:
Если попробовать выполнить команду без использования префикса sudo, то можно получить отказ «Permission denied».
Sudoers файл
Команда sudo настраивается через файл, расположенный в /etc/, называемый sudoers.
С помощью команды sudo вы предоставляете привилегии административного уровня обычным пользователям. Обычно первый пользователь, которого вы создаете при установке linux, имеет права sudo. В среде VPS это пользователь root по умолчанию. Вы можете настроить других пользователей, чтобы они также могли запускать команду sudo. Это можно сделать, отредактировав sudoers.
Важно: будьте осторожны! Редактирование файла sudoers с ошибками или неправильным синтаксисом может привести к блокировке всех пользователей в вашем дистрибутиве.
Синтаксис файла sudoers
Вы можете открыть файл в любом текстовом редакторе. Мы будем использовать vim:
Файл на нашем VPS выглядит следующим образом:
Рассмотрим формат и правила, которым необходимо следовать при редактировании sudoers:
- Все строки, начинающиеся с #, являются комментариями
- root ALL=(ALL:ALL) ALL – эта строка означает, что пользователь root имеет неограниченные привилегии и может выполнять любую команду в системе
- %admin ALL=(ALL) ALL – знак % указывает группу. Любой пользователь в группе администраторов имеет те же привилегии, что и пользователь root
- %sudo ALL=(ALL:ALL) ALL – все пользователи в группе sudo имеют права на запуск любой команды
Строка – #includedir /etc/sudoers.d, говорит нам о том, что мы можем добавить конфигурации в файл sudoers.d и связать его здесь.
Редактирование файла sudoers
Чтобы отредактировать файл /etc/sudoers, выполним следующую команду:
Для редактирования файла sudoers рекомендуется использовать visudo. Visudo гарантирует, что sudoers редактируется одним пользователем за раз, и обеспечивает необходимые проверки синтаксиса.
Чтобы увидеть, какие пользователи входят в группу sudo, мы можем использовать команду grep:
Команда выведет на экран список имен пользователей.
Чтобы добавить пользователя с именем alex в группу sudo, мы используем команду adduser в командной строке, например:
Если мы воспользуемся командой grep, чтобы проверить, кто входит в группу, то увидим имени пользователя alex.
Если вы захотите дать кому-либо привилегии root пользователя, то просто добавьте их в sudo.
Чтобы удалить пользователя из sudo выполним:
Команда deluser удалит Alex’a из группы sudo.
Теперь пользователь alex больше не может выполнять действия, требующие привилегий sudo.
Используйте файлa sudoers для предоставления определенных привилегий
Что если мы захотим, чтобы alex мог запускать только определенные виды команд с привилегиями sudo, например с сетью?
Для этого создадим файл конфигурации в /etc/sudoers.d/ с названием networking.
И добавим следующий текст в файл:
В приведенном выше файле мы создали группу netadmin. Пользователи в группе netadmin могут запускать команды, указанные в NETALL. NETALL, в свою очередь, включает все команды под псевдонимами CAPTURE и SERVERS. Команда tcpdump находится под псевдонимом CAPTURE, т.е. /usr/sbin/tcpdump.
Далее мы добавляем пользователя alex в группу netadmin:
Теперь alex сможет запускать команду tcpdump вместе с другими командами, связанными с сетью.
Подведем итоги
Если вы работаете с несколькими пользователями крайне необходимо понимание команды sudo и файла sudoers. В этом уроке описаны только основы контроля над привилегиями!
Источник
Sudo (Русский)
sudo (англ. substitute user do, дословно «подменить пользователя и выполнить») позволяет системному администратору делегировать полномочия, чтобы дать некоторым пользователям (или группе пользователей) возможность запускать некоторые (или все) команды c правами суперпользователя или любого другого пользователя, обеспечивая контроль над командами и их аргументами.
Contents
Обоснование
Sudo — это альтернатива su для выполнения команд с правами суперпользователя (root). В отличие от su, который запускает оболочку с правами root и даёт всем дальнейшим командам root права, sudo предоставляет временное повышение привилегий для одной команды. Предоставляя привилегии root только при необходимости, использование sudo снижает вероятность того, что опечатка или ошибка в выполняемой команде произведут в системе разрушительные действия.
Sudo может также использоваться для выполнения команд от имени других пользователей; кроме того, sudo логирует все команды и неудачные попытки доступа для аудита безопасности.
Установка
Чтобы начать использовать sudo как непривилегированный пользователь, его нужно настроить должным образом. Для этого прочтите раздел о настройке.
Использование
Пользователи могут предварять команды словом sudo , чтобы исполнять их с привилегиями суперпользователя (или другого пользователя).
Например, для использования pacman:
Смотрите руководство по sudo для получения дополнительной информации.
Настройка
Просмотр текущих настроек
Выполните sudo -ll для вывода текущей конфигурации sudo.
Использование visudo
Файл настроек /etc/sudoers всегда следует редактировать с помощью команды visudo . visudo блокирует файл sudoers , сохраняет изменения во временный файл и проверяет, что файл грамматически корректен, перед тем как скопировать его в /etc/sudoers .
visudo использует vi в качестве текстового редактора по умолчанию. В core репозитории sudo скомпилирована с —with-env-editor по умолчанию и использует переменные VISUAL и EDITOR . EDITOR не используется, если задана переменная VISUAL .
Чтобы сделать nano редактором visudo в течение текущего shell сеанса, задайте и экспортируйте переменную EDITOR перед тем, как выполнять visudo.
Он будет использован, если вы не определили другой редактор, установив переменные окружения VISUAL или EDITOR (используемые в таком порядке) в качестве желаемого редактора, например nano . Выполните команду с правами суперпользователя:
Для изменения редактора на постоянной основе для текущего пользователя, прочтите установка переменных окружения для пользователя. Для того, чтобы установить выбранный редактор на постоянной основе для всей системы, но только для visudo , добавьте следующее в /etc/sudoers (предположим, что вы предпочитаете nano в качестве редактора):
Примеры настроек
Настройка sudo осуществляется добавлением записей в файл /etc/sudoers . Чтобы дать пользователю привилегии суперпользователя, когда он вводит sudo перед командой, добавьте следующую строку:
Разрешить пользователю выполнять все команды от любого пользователя, но только на машине с определенным названием хоста:
Предоставить членам группы wheel доступ sudo:
Чтобы не спрашивать пароль у пользователя:
Разрешить выполнять только конкретные команды и только пользователю на определенном хосте:
Разрешить выполнять конкретно определённые команды только для пользователя на определенном хосте и без пароля:
Подробный пример для sudoers доступен в /usr/share/doc/sudo/examples/sudoers . Также смотрите руководство по sudoers для получения более подробной информации.
Права доступа к файлам sudoers по умолчанию
Файл sudoers должен иметь владельца root и группу root (0). Права доступа всегда должны быть установлены как r—r—— (0440). Эти права установлены по умолчанию, однако если вы случайно измените их, они должны быть немедленно изменены обратно, иначе sudo не будет работать.
Время действия введённого пароля
Возможно, вы захотите изменить промежуток времени, в течение которого sudo действует без ввода пароля. Этого легко добиться добавив опцию timestamp_timeout в /etc/sudoers :
Например, чтобы установить тайм-аут на 20 минут:
Советы и рекомендации
Автодополнение по нажатию Tab в bash
Один тайм-аут на все сеансы терминала
Если вы не хотите вводить пароль снова каждый раз, когда открываете новый терминал, отключите tty_tickets:
Всегда показывать замечание о безопасности
По умолчанию, /etc/sudoers настроен так, что sudo выводит замечание о безопасности только при первом открытии сеанса:
Чтобы это сообщение выводилось всегда, отредактируйте /etc/sudoers . Замените:
или просто добавьте эту строку, если её нет.
Переменные окружения
Если у вас много переменных окружения или вы экспортировали ваши настройки прокси через export http_proxy=». » , когда вы используете sudo, эти переменные не будут переданы в открытый сеанс, если вы не запустите sudo в опцией -E .
Рекомендованный способ сохранения переменных окружения — это прописать их в env_keep :
Перенос псевдонимов
Если у вас установлено много псевдонимов, вы могли заметить, что они не переносятся в сеанс sudo. Однако, это легко исправить. Просто добавьте в ваш
/.bashrc или /etc/bash.bashrc строку:
Шутливые оскорбления
Вы можете сконфигурировать sudo так, чтобы при вводе неверного пароля он выводил шутливые оскорбления вместо стандартного сообщения «Sorry, try again». Найдите строку Defaults в /etc/sudoers и добавьте insults в список опции, разделяя их запятыми. Конечный результат может выглядеть так:
Для проверки, введите sudo -K , чтобы завершить текущий сеанс и позволить sudo заново запросить пароль.
Пароль суперпользователя
Вы можете сконфигурировать sudo так, чтобы он спрашивал пароль суперпользователя вместо пароля текущего пользователя, добавив targetpw или rootpw в список опций Defaults в /etc/sudoers :
Чтобы не разглашать пароль root пользователям, вы можете запретить это определённым группам:
Отключение учетной записи root
Вы можете захотеть отключить возможность входа систему пользователя root. Без этого атакующие сначала должны будут угадать имя пользователя, сконфигурированного как sudoer, а также пароль этого пользователя. Смотрите для примера Secure Shell (Русский)#Отключение.
Пароль пользователя root можно заблокировать с помощью passwd :
Аналогичная команда разблокирует пароль пользователя root:
Также вы можете отредактировать /etc/shadow и заменить зашифрованный пароль root на «!»:
Тогда, чтобы задать новый пароль и тем самым разблокировать пользователя root:
Чтобы gksu использовал sudo по умолчанию, выполните:
kdesu
kdesu можно использовать в KDE для запуска графических программ с привилегиями суперпользователя. Вероятно, что kdesu по умолчанию будет пытаться использовать su, даже если аккаунт root отключен. К счастью, можно сказать kdesu использовать sudo вместо su. Создайте/отредактируйте файл
/.config/kdesurc для kf5 версии kdesu):
или используйте следующую команду (используйте kwriteconfig5 для kf5 версии kdesu):
Также вы можете установить kdesudo AUR из AUR, который поддерживает улучшенное автодополнение по Tab при вводе команды.
Еще один пример настройки
Допустим, вы создали 3 пользователей: admin, devel и joe. Пользователь «admin» используется для journalctl, systemctl, mount, kill и iptables; «devel» используется для установки пакетов и редактирования настроек; «joe» — пользователь, под которым вы вошли в систему. Чтобы разрешить «joe» перезагружаться, выключать систему и использовать netctl, мы должны сделать следующее:
Отредактировать /etc/pam.d/su и /etc/pam.d/su-1 Потребовать, чтобы пользователь был в группе wheel, но никого в неё не добавлять.
Ограничить вход по SSH для группы ‘ssh’. В эту группу будет входить только «joe».
Добавить пользователей в другие группы.
Установить права на настройки так, чтобы devel мог редактировать их.
С такими настройками вам практически никогда не понадобится входить как суперпользователь.
«Joe» может подсоединиться к своему домашнему WiFi.
«Joe» не может использовать netctl от имени другого пользователя.
Когда «joe» хочет воспользоваться journalctl или убить зависший процесс, он может переключиться на нужного пользователя:
Но «joe» не может переключиться на суперпользователя.
Если «joe» хочет начать gnu-screen сессию как admin, он может сделать это следующим образом:
Настройка sudo с помощью вкладываемых в /etc/sudoers.d файлов
sudo обрабатывает файлы, содержащиеся в директории /etc/sudoers.d/ . Это означает, что вместо того, чтобы редактировать /etc/sudoers , вы можете менять настройки в отдельных файлах и перемещать их в эту директорию. Это даёт два преимущества:
- Вам не понадобится редактировать файл sudoers.pacnew ;
- Если с новой записью будет проблема, вы можете просто уничтожить соответствующий файл, вместо необходимости редактировать /etc/sudoers .
Формат записей в этих вкладываемых файлах такой же, как и в самом файле /etc/sudoers . Чтобы редактировать их напрямую, используйте visudo -f /path/to/file . Смотрите раздел Including other files from within sudoers в sudoers(5) для дополнительной информации.
Решение проблем
Проблемы с TTY через SSH
По умолчанию SSH не выделяет tty при выполнении удалённой команды. Без tty sudo не может отключить отображение пароля при его вводе. Вы можете воспользоваться ssh опцией -tt , чтобы заставить его выделять tty (или -t дважды).
Defaults опция requiretty всего лишь позволяет запускать sudo пользователям, если они имеют tty.
Показать привилегии пользователя
Вы можете узнать какими привилегиями обладает конкретный пользователь следующей командой:
Или узнать ваши собственные привилегии командой:
Наложение umask
Sudo накладывает на значение umask пользователя свою собственную (которая по умолчанию установлена в 0022). Это предотвращает sudo от создания файлов с более либеральными правами доступа, чем это позволяет umask пользователя. Несмотря на то, что это разумное значение по умолчанию, если не используется измененная umask, это может привести к ситуации, когда программа, запущенная через sudo может создавать файлы с правами доступа отличными от тех, которые создаются при запуске программы непосредственно суперпользователем. Для исправления таких ошибок sudo предоставляет возможность исправить umask, даже если желаемая umask более либеральна, чем установлено в umask пользователя. Добавив такие строки (используйте visudo ) вы измените поведение sudo по умолчанию:
Это установит sudo umask в umask суперпользователя по умолчанию (0022) и переопределит поведение по умолчанию, всегда используя указанную umask и независимо от umask пользователя.
Опции по умолчанию
На сайте авторов есть список всех опций, которые можно использовать с командой Defaults в файле /etc/sudoers .
Смотрите [1] список опций (извлечён из исходного кода версии 1.8.7) представленный в формате, оптимизированном для sudoers .
Источник