Задать пароль sudo debian

Обновлено: 06.07.2024

…По умолчанию в 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:

как сд еще ему нужен?

© 2008–2021 Alexander Batischev. Site’s source.
Content licensed under CC-BY-NC-SA 4.0; code samples under CC0 1.0 Universal.

В операционных системах семейства Linux реализован принцип разграничения пользовательских привилегий, то есть у разных учетных записей разный объем прав доступа к каталогам, файлам и программам. Максимальными правами наделена встроенная учетная запись root. Вновь создаваемые пользовательские аккаунты обычно существенно ограничены в доступе к системным конфигурационным файлам, управлении сервисами, установке и удалении программных пакетов. При этом работа в операционной системе под учетной записью root настоятельно не рекомендуется, прежде всего в целях безопасности. В этом случае на помощь приходит утилита командной строки sudo.

Команда sudo позволяет запускать отдельные команды с повышением привилегий (по умолчанию с правами root) пользуясь непривилегированной учетной записью. Давайте разберемся, что же требуется для работы этой утилиты.

Установка и настройка

В ОС Ubuntu sudo включена по умолчанию, а в Debian, если в процессе установки не был выбран соответствующий пакет, скорее всего будет следующая картина:

Значит, требуется установить недостающий пакет. Обновляем информацию о репозиториях и устанавливаем sudo:

apt-get update
apt-get install sudo

Дожидаемся окончания процесса:

Процесс установки sudo

Скриншот №1. Процесс установки sudo

После успешной установки потребуется сконфигурировать sudo, определив, какие пользователи или группы смогут использовать повышение привилегий и в каком объеме. Все эти настройки хранятся в конфигурационном файле /etc/sudoers, однако вносить в него изменения напрямую настоятельно не рекомендуется. Для этих целей используется специальная команда:

которая запускает текстовый редактор с конфигурационным файлом:

Текстовый редактор

Скриншот №2. Текстовый редактор

За предоставление прав здесь отвечают две строки:

root ALL=(ALL:ALL) ALL
%sudo ALL=(ALL:ALL) ALL

Первая строка назначает права для учетной записи root, вторая устанавливает права для членов группы sudo, которая была создана при установке пакета (знак % перед названием означает, что имя относится к группе пользователей). Соответственно, у нас есть два основных способа предоставить пользовательской учетной записи право использовать sudo:

Добавить учетную запись пользователя (например, user) в группу sudo на сервере:

usermod –a –G sudo user

После изменения членства в группе, потребуется заново авторизоваться в этой учетной записи для применения новой конфигурации. Данный метод рекомендуется в тех случаях, когда пользователю необходимо предоставить полные права.

Создать в файле новую запись, например, для учетной записи user. Мы добавляем строку по аналогии с root:

user ALL=(ALL:ALL) ALL

Добавлять новую запись рекомендуется в тех случаях, когда список привилегий будет корректироваться (об этом чуть позднее). Если мы внесли изменения в файл, нужно их сохранить нажатием сочетания клавиш Ctrl-O и выйти из редактора — Ctrl-X.

Теперь можно проверить корректность работы:

$ sudo cat /etc/sudoers
[sudo] password for user:

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

Тонкая настройка

Таким образом, обычный пользователь может запускать команды с правами учетной записи root не зная ее пароль. Это очень удобно, но может быть небезопасно — есть ли возможность ограничить круг команд, которые можно исполнять посредством sudo? Да, и поможет нам в этом тот же самый конфигурационный файл. Снова запускаем visudo и разбираемся дальше. Нас интересуют параметры, указанные после имени пользователя:

Настройки ограничения команд

Скриншот №3. Настройки ограничения команд

Разберем их подробнее:

  • ALL=(ALL:ALL) ALL — первый параметр определяет к какому хосту применяется конфигурация. При использовании выделенного сервера параметр можно оставить без изменений;
  • ALL=(ALL:ALL) ALL — параметры в скобках определяют с полномочиями какого пользователя (первый параметр) и/или группы (второй параметр) будет выполняться команда. По умолчанию sudo выполняет команду от имени root, однако при запуске с ключом –u можно указать другую учетную запись, а с ключом –g другую группу, чьи полномочия будут использованы при запуске;
  • ALL=(ALL:ALL) ALL — третий параметр определяет к каким файлам и командам относятся данные настройки.

Исходя из вышесказанного, при необходимости определить перечень разрешенных команд заменяем последний параметр ALL тем, что нам требуется, перечисляя команды через запятую. Например, строка:

user ALL=(ALL:ALL) /sbin/shutdown –r, /bin/cat

дает право пользователю user с помощью sudo осуществлять перезагрузку сервера командой sudo /sbin/shutdown –r и просматривать файлы с помощью sudo /bin/cat. Другие команды через sudo выполняться не будут. Например, при попытке выключить сервер командой sudo /sbin/shutdown –h, получим ответ:

Sorry, user user is not allowed to execute '/sbin/shutdown -h' as root on debian10.

Полезное

Увидеть список привилегий можно, запустив sudo –l (будет отображен список для текущего пользователя), либо sudo –l –U user (будет отображен список привилегий пользователя user):

Список привилегий пользователя

Скриншот №4. Список привилегий пользователя

В состав sudo входит команда sudoedit, которая запускает текстовый редактор с указанным файлом сразу с повышенными привилегиями, то есть вместо команды:

sudo nano /etc/network/interfaces

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

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

Sudo — программа, дающая возможность системным администраторам позволять пользователям выполнять команды как root (или другой пользователь). Основная философия — позволить людям выполнить свою задачу, используя как можно меньше привилегий. Также sudo — эффективный способ для записи деятельности root: кто использует sudo,какую команду и когда.

Sudo не включён по умолчанию в Debian

Грубо говоря, sudo установлен и включён (если во время установки были выбраны компоненты рабочего стола). Но в Debian права не предоставляются по умолчанию (в отличие от некоторых других дистрибутивов).

(Примечание для DebianSqueeze: введён аналогичный инструмент PolicyKit, ориентированные на потребности настольных компьютеров и ноутбуков).

Почему sudo

    Нет необходимости в пароле root (sudo запрашивает пароль текущего пользователя).

По этим причинам, переключение на root с помощью "sudo -i" (или sudo su) считается устаревшим, поскольку отменяет вышеперечисленные особенности.

Обзор настроек

Небольшой пример для того чтобы разрешить определённым пользователям запускать некоторые программы (для получения дополнительной информации, см. документацию).

Проблемы и решения

Извините, пользователь jdoe не может выполнять .

Типичный сеанс выглядит следующим образом:

sudoers только для чтения

Файл /etc/sudoers только для чтения, даже для root!

Нужно использовать команду visudo для редактирования /etc/sudoers.

CVE-2005-4158

    sudo (1.6.8p7-1.3) stable-security; urgency=high
      Non-maintainer upload by the Security Team
    • 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 - это программа позволяющая администраторам давать ограниченные 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 и уже в нем перечислить необходимые настройки.

    Синхронизация файла sudoers

    Вообще говоря, утилита sudo является локальной, в ней нет встроенных механизмов для распространения единых настроек на множество серверов из одного центра. Для синхронизации можно использовать, к примеру, NFS, rsync или LDAP.

    Пример содержимого файла sudoers

    Когда читаешь руководство по настройке sudo в Debian, то довольно сложно что-то понять, но на примере все становится на свои места. Так что для начала рассмотрим пример из man sudoers:

    Далее мы переопределим некоторые значения установленные по умолчанию при компиляции. Мы хотим чтобы sudo вел лог через syslog с использованием auth во всех случаях. Мы мне хотим, чтобы сотрудники работающие полный день получали предупреждение от sudo, пользователь millert не должен вводить пароль и мы не хотим сбрасывать переменные окружения LOGNAME, USER or USERNAME когда выполняем команды от рута. Дополнительно на машинах в Host_Alias SERVERS мы храним дополнительный локальный лог-файл и убеждаемся, что будет логироваться год в каждой линии так как логи будут храниться несколько лет. Напоследок, в целях безопасности для команд в списке PAGERS мы отключаем возможность запускать другие команды.

    Далее идет часть в которой определяется кто что может запускать.

    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

    Пункты могут быть заключены в двойные кавычки чтобы избежать использования экранирования специальных символов. При использовании двойных кавычек префиксы должны быть включены в текст между кавычками.

    Runas_Alias

    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

    Это может использоваться в ситуации, когда у вас есть директивы для sudo общие для всех серверов и особые на каждом сервере. В таком случае можно создать два файла, к примеру, sudoers и sudoers.local. Затем второй инклудится в первый с помощью директивы (вместе со значком решетки):

    Также можно создать файлы с разными частями после точки, соответствующими именам серверов и инклудить их следующим образом:

    где вместо %h подставляется имя хоста.

    Стоит учесть, что файлы обрабатываются и сортируются лексически, а не по номерам. То есть, к примеру, файл /etc/sudoers.d/01_first будет обработан перед /etc/sudoers.d/10_second, но файл с именем /etc/sudoers.d/1_whoops будет обработан после /etc/sudoers.d/10_second, так как вначале названия отсутствует ноль.

    Дополнительные специальные символы

    ALL - является зарезервированным словом, которое обозначает все возможные значения. Может использоваться вместо любых алиасов и значений в полях “кто”, “где”, “от кого”, “что”. Не пытайтесь создавать алиасы с именем ALL.

    Восклицательный знак ('!') используется как логический оператор отрицания (not) и позволяет исключать определенные значения. К примеру, можно разрешить выполнять любые операции за исключением некоторых используя ALL и “!”.

    Длинные строки можно разбивать на подстроки с помощью символа обратной косой черты ('\') стоящего в конце каждой подстроки кроме последней.

    Пробелы между элементами '=', ':', '(', ')' не обязательны. То есть их можно использовать, а можно не использовать.

    Следующие символы необходимо экранировать с помощью символа обратной косой черты ('\'):

    '!', '=', ':', ',', '(', ')', '\'.

    sudoedit

    Если требуется отредактировать какой-либо текстовый файл, доступ к которому есть доступ только у другого пользователя или рута, то можно воспользоваться утилитой sudoedit, что быстрее, чем запускать редактор с помощью sudo. Также можно использовать ключи -u и -g для запуска от определенного пользователя или группы. По умолчанию будет использовать учетная запись рута.


    SUDO по умолчанию в системе Debian не настроено для непривилегированного пользователя, установленного в системе. Для того, чтобы настроить sudo необходимо выполнить несложные действия в операционной системе. После этого, непривилегированный пользователь сможет настраивать систему и устанавливать различные программы.

    Чтобы настроить sudo для непривилегированного пользователя:

    Открываем терминал, в окне терминала набираем команду users. Эта команда выводит информацию о пользователях работающих в системе в данный момент

    Попробуем установить программу mc в системе под непривилегированным пользователем

    Далее система попросит набрать пароль для непривилегированного пользователя

    Если пользователь отсутствует в группе sudo, то появится предупреждение и команда выполнена не будет

    Переключаемся на пользователя root

    Вводим пароль пользователя root и можно работать без каких либо ограничений.

    Для установки различных программ настроим репозиторий

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

    Сохраняем файл и обновляем информацию о пакетах в добавленных репозиториях в системе

    Далее добавляем непривилегированного пользователя в группу sudo (в данном случае добавляем пользователя sten в группу sudo)

    Система выдаст группу sudo и пользователей, которые в группе sudo находятся

    Для применения настроек надо перелогиниться в системе. После входа в систему, открываем терминал и можем выполнять различные действия с помощью sudo под непривилегированным пользователем. Например, для установки программы mc выполним команду

    Система запросит пароль текущего пользователя, далее выполнит команду по установке программы mc в системе.

    Таким несложным способом можно добавить в группу sudo любого непривилегированного пользователя.

    Посмотреть видео по настройка sudo для непривилегированного пользователя можно здесь:

    Читайте также: