Установка и настройка sudo в Debian GNU/Linux и Ubuntu Linux

Копия статьи с ныне мёртвого проекта debian-ubuntu-linux.ru.
Обратите внимание, что я всего лишь скопировал статью сюда — я не правил её, и не имею никакого отношения к её содержимому (более того, с некоторыми моментами я категорически не согласен). С другой стороны, я считаю эти статьи полезными для новичка, и потому копирую их.
Все авторские права принадлежат Дмитрию Белоусову.

Дмитрий Белоусов
Последнее обновление: 02.02.2008

…По умолчанию в Debian GNU/Linux пакет sudo отсутствует. Установка sudo — это, по глубокому убеждению автора, перовое, что необходимо сделать после завершения установки базовой системы Debian GNU/Linux. У пользователей Ubuntu Linux sudo установлен по умолчанию, однако тоже может потребовать конфигурации.

I.Установка sudo из репозиториев Debian GNU/Linux.

Выполните команду:

# aptitude install sudo

II.Базовая настройка sudo.

Sudo — очень гибкий инструмент, позволяющий настроить права на выполнения административных действий для каждого пользователя отдельно. Например одному разрешить перезагружать какой-либо сервер, а другому дать возможность менять права доступа к файлам и папкам. Откройте файл /etc/sudoers. Это можно сделать либо отдав команду на открытие файла в вашем любимом текстовом редакторе, например так:

# nano /etc/sudoers

либо при помощи утилиты visudo:

# visudo

Последний способ откроет файл /etc/sudoers в редакторе пользователя по умолчанию, или если таковой не задан, то в редакторе vi. Преимущество данного способа в том, что при сохранении файл будет проверен на соответствие синтаксису.

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

Defaults env_reset
# User privilege specification
root ALL=(ALL) ALL
user ALL=(ALL) ALL

Такая конфигурация дает пользователю user все права пользователя root при выполнении команды sudo. Defaults env_reset полностью запрещает все пользовательские переменные при исполнении команд от имени root. Это хорошо с точки зрения безопасности, однако иногда вызывает проблемы. Можно разрешить использование личных переменных какой-либо группе или отдельному пользователю, добавив подобную этой строку:

Defaults:%admin !env_reset

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

Defaults:user env_keep=TZ

которая сохранит переменную TZ для пользователя user.

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

%admin  ALL=(ALL) ALL

Как можно догадаться, эта запись дает доступ к root-привилегиям всем членам группы admin.

Можно настроить для каждого конкретного пользователя доступ только к конкретным командам. Например:

user ALL = /bin/mount, /bin/kill

даст пользователю user права на выполнение команд mount и kill с любой машины, а:

user2 mydebiancomp = /sbin/modprobe

даст пользователю user2 права на выполнение modprobe с машины mydebiancomp. Я думаю, что синтаксис понятен:

пользователь хост = команда

где команда прописывается с полным путем. Для группы все аналогично, только добавляется знак “%”.

III.Продвинутые настройки sudo.

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

Cmnd_Alias command_alias = command1, command2, ... // алиасы команд
Host_Alias host_alias = hostname1, hostname2, ... // алиасы хостов
User_Alias user_alias = user1, user2, ... // алиасы пользователей

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

Исполнение команды от имени другого пользователя тоже возможно. Например при такой записи:

user ALL = (user2, user3) /usr/bin/ark

пользователь user может выполнить команду ark от имени user2 или user3, при помощи ключа u, например так:

$ sudo -u user2 ark

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

Defaults:user timestamp_timeout=0

пароль полдьзователя user не будет запоминаться вообще, а при:

Defaults:user timestamp_timeout=-1

будет запоминаться на все время аптайма.

Sudo без паролей также возможно. Для этого существует подобная конструкция:

user myubuntucomp = NOPASSWD: /bin/kill

которая даст возможность пользователю 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
строки

user ALL = NOPASSWD: /usr/sbin/hibernate
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, удалив оттуда соответствующую строку и добавив Интернет-репозитории — тогда пакет скачается оттуда. Удачи!

Drop me a line! (wonder where’s the comments form?)