Дано: функционирующий дистрибутив линукс на машине с именем comp, зарегистрированные в системе пользователи: tux и tom (имена взяты для примера).
Задача: обеспечить выполнение некоторых программ, требующих права пользователя root, обычным пользователям.
Уровень пользователя: начинающий|средний.
Решение:
Программа sudo необходима для выполнения обычным пользователем команд с привилегиями суперпользователя root. Иными словами, обычный пользователь может запускать программы с привилегиями root, но при этом не вводить пароль root`а. Это удобно, если приходится часто монтировать\отмонтировать устройства или управлять сетевыми соединениями, на что требуются права root`а. Также sudo может давать конкретным пользователям конкретные права на запуск программ.

Внимание! Для наглядности в консольных примерах, дополнительно указывается и приглашение. Например:

tux@comp:~$ sudo -l 

- означает, что текущий пользователь, от имени которого вводятся команды это tux, а сама команда: sudo -l

Установка sudo

Перед использованием sudo, необходимо убедиться, что программа установлена в системе, путём ввода в консоли "sudo -l". Возможно 3 результата:
1. Программа sudo не установлена.

tux@comp:~$ sudo -l
bash: sudo: команда не найдена

2. Программа sudo установлена, но для текущего пользователя не разрешён (или не настроен) запуск программ.

tux@comp:~$ sudo -l
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for tux: 

3. Программа sudo установлена и текущий пользователь tux может выполнять команды: shutdown и reboot

tux@comp$:~$ sudo -l
User tux may run the following commands on this host:
    (root) NOPASSWD: /sbin/shutdown, (root) /sbin/reboot

Если программа sudo не установлена, что в современных дистрибутивах встречается довольно редко, лучше воспользоваться менеджером пакетов дистрибутива. Пакет так и называется: sudo. Для установки программ, следует войти в систему как root или получить права через команду "su -"

В Debian, Ubuntu установку можно произвести через Synaptic, или из консоли:

[root@comp ~]# apt-get install sudo

В ArchLinux:

[root@comp ~]# pacman -S sudo

В Mandriva - через менеджер пакетов rpmdrake или через консоль:

[root@comp ~]# urpmi sudo

Для других дистрибутивов - смотрите руководство по управлению пакетами в документации по дистрибутиву.
Когда программа установлена, переходим к настройке.

Настройка

sudo конфигурируется файлом /etc/sudoers . Обычно этот файл содержит много-много комментариев (строк, начинающихся с #) с примерами и одной строкой, определяющей права для пользователя root:

 root ALL=(ALL) ALL

В Ubuntu, первый зарегистрированный пользователь (обычно это пользователь, который создаётся в системе во время установки дистрибутива на компьютер) помещается в группу admin, и в файле sudoers может встретиться строка:

 %admin ALL=(ALL) ALL

, которая позволяет пользователю, состоящему в группе admin, через команду sudo получать права root`а на запуск всех программ. Вероятно это сделано для удобства настройки и "доводки" системы под пожелания пользователя. С точки зрения безопасности, давать обычному пользователю возможности root`а для запуска любой команды, конечно же нельзя.

Есть одна особенность - файл sudoers нужно изменять редактором, который бы работал с файлом в памяти, а не записывал каждое изменение пользователя на диск. Связано это с тем, что sudo каждый раз обращается к файлу, и может так случиться, что файл не будет готов полностью и sudo не сможет его перечитать из-за, например, ошибки синтаксиса. Для этих целей специально сделана команда visudo. Эта команда запускает текстовый редактор Vim, который в свою очередь открывает на редактирование файл /etc/sudoers . После редактирования, делается проверка на наличие ошибок, и в случае наличия таковых, пользователю будет предложено записать изменения или снова вернуться к редактированию или выйти. Запускать команду следует также - от имени root`а.

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

После знакомства с vi, перейдём к редактированию. Сперва нужно определить псевдонимы для компьютера на который будут действовать разрешения на запуск программ. Другими словами, нужно привязать переменную, определяющую компьютер к имени компьютера. Делается это директивой Host_Alias:

Host_Alias LOCALHOST = localhost, comp

Здесь "localhost" - это имя по умолчанию для самого компьютера и "comp" - это DNS имя компьютера (обычно DNS-имя совпадает с именем, которое пользователь дал при установке операционной системы). Строка с директивой Host_Alias должна быть в конфиге перед директивами, дающими права пользователям (определяться раньше, чем команды).

Теперь вернёмся к задаче: необходимо дать права на перезагрузку машины обоим пользователям, но пользователю tux нужно дать ещё права на монтирование и размонтирование устройств.
Будет выглядеть это так:

tux LOCALHOST = NOPASSWD: /sbin/reboot, /bin/mount, /bin/umount
tom LOCALHOST = NOPASSWD: /sbin/reboot

Здесь:

  • tux и tom - имена зарегистрированных пользователей (их логины в системе),
  • LOCALHOST - определённый нами выше превдоним для компьютера,
  • NOPASSWD: - указывает на отключение ввода пользовательского пароля при вводе команды.
  • /sbin/reboot, /bin/mount, /bin/umount - перечисленные программы, разрешённые для запуска. Путь до программ должен быть абсолютным! Кстати, в разных дистрибутивах, вышеперечисленные программы (команды) могут быть не в каталоге sbin, а в bin или наоборот. Пользователь сам должен это выяснить и вписать правильный путь.

В итоге, для задачи, файл sudoers будет выглядеть примерно так:

root ALL=(ALL) ALL 
Host_Alias LOCALHOST = localhost, comp
tux LOCALHOST = NOPASSWD: /sbin/reboot, /bin/mount, /bin/umount
tom LOCALHOST = NOPASSWD: /sbin/reboot

После ввода строк, нужно сохранить изменения через команду редактора :w , затем выйти из редактора через команду :q! после чего редактор проверит синтаксис и, либо закроется, при этом записав изменения в sudoers, либо выведет сообщение об ошибке, типа такого:

 
>>> /etc/sudoers: syntax error near line 6 <<<
What now? _

Это сообщение говорит о наличии ошибки в строке 6. Программа будет ждать действий пользователя - в строке после "What now?", можно ввести:
e - для продолжения редактирования, - программа вернётся снова в редактор,
x - для выхода без сохранения,
Q - для записи изменений в файл sudoers несмотря на наличие ошибки,
, и завершить нажатием на Enter.
Команду Q следует использовать с особой осторожностью, поскольку можно сделать sudo полностью неработоспособным!

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

[tom@comp ~]$ sudo reboot
[tux@comp ~]$ sudo mount /dev/hdc /mnt

Смотрите также

Печать/экспорт