главная Азбука Линукс Получить линукс Помочь сайту

Работа с правами root


В Linux может быть любое количество пользователей. Все они выполняют разнообразные задачи и имеют различные права в системе. И только один из них получает над операционной системой полную власть. Его имя - root, или суперпользователь. Прежде чем начинать разговор о суперпользователе, хотелось бы уточнить понятие "пользователь" применительно к UNIX вообще и Linux в частности. Количество строк в файле /etc/passwd свежеустановленной системы всегда существенно превышает то количество аккаунтов, которые были непосредственно созданы в процессе установки. Точный их список зависит как от системы, так и от установленных в ней компонентов. Среди пользователей, присутствующих в /etc/passwd, есть и такие, которым не соответствуют реальные люди. Это так называемые демоны - владельцы программ и системных процессов. Являясь по сути своей такими же пользователями, как vaisa или prtia, они выполняют важные функции на уровне обеспечения нормального функционирования системы. То есть, такие их параметры, как домашняя директория и shell, тоже могут быть изменены.

В Вашем /etc/passwd может и не быть httpd или uucp, но пользователь с UID (U - user, ID - цифровой идентификатор пользователя) равным нулю должен присутствовать обязательно. Как правило, его зовут root. Это скорее традиция: от перемены имени свойства самого root не меняются. Впрочем, из этого не следует, что его действительно стоит переименовать. Переименовывая его, нужно отдавать себе, отчет в том, что последствия могут обнаружиться в самых неожиданных местах.



У суперпользователя, как и у любого другого пользователя системы, должна присутствовать домашняя директория. Как правило, это /root. He стоит ее никуда переносить, пытаясь "навести порядок" в расположении домашних каталогов. В случае серьезного повреждения системы, когда /usr окажется недоступен, сожаления по поводу педантизма будут несколько запоздалыми: работы по восстановлению системы сильно усложнятся. Что могу? Короли..., Известная поговорка гласит "Have trouble with Windows - reboot, have trouble with UNIX - be root!".

На самом же деле привилегии root в недостаточно аккуратных руках могут создать гораздо больше проблем, нежели решений. Заметьте, речь не идет о взломах, атаках и прочих посягательствах на вашу машину из внешнего мира - сами пользователи иногда оказываются едва ли не эффективнее хакеров.

Дело в том, что файлы (а устройства с точки зрения системы тоже являются файлами, она обращается к устройствам посредством этих файлов) защищены от постороннего вмешательства правами доступа. Собственно, права доступа реализованы следующим образом: каждый файл может быть доступен для чтения (г - Read), записи (w - Write) и исполнения (х - eXecute). Также у каждого файла есть владелец-пользователь и владелец-группа. Права выставляются при помощи определения доступных действий для: а) пользователя, б) группы, в) всех остальных. Для просмотра используйте команду Is -l. Первый столбец, состоящий из смеси минусов с уже упоминавшимися буквами, покажет, что именно разрешено делать с данным файлом, а два следующих выведут информацию о его владельцах. Так,

$ Is -I book

-rw-rw-r-- тагу editor 248229 Map 30 22:54

book

означает, что файл book размером примерно 250 Кбайт принадлежит пользователю тагу и группе editor (при этом сама тагу может и не входить в данную группу). Редактировать его может не только тагу, но и редакторы, а читать могут все. Права доступа к файлу может менять только его владелец. То есть, в нашем случае именно тагу может определить, кому именно файл будет доступен на чтение и запись (а в случае со скриптами и программами - и на исполнение). Кроме владельца права на файл может менять только один пользователь. Как нетрудно догадаться - root. Кроме того, в некоторых системах только он может менять значение атрибута "владелец файла", то есть пользователи даже не могут "отдавать" друг другу свои файлы.

Очевидно, что при таких привилегиях "защититься" от суперпользователя выставлением на свой файл прав вида rw не возможно: он может не только прочитать его, но и при желании стереть все следы об ращения к этому файлу. В случае же, когда пароль root известен более чем одному человеку, то выяснить, кто именно в конкретный момент им воспользовался, будет невозможно. Более того, вспомнив о способности суперпользователя править Log-файлы, приходится признать, что даже ответ на вопрос "когда?" не всегда доступен.

Чтобы избежать попыток выяснить, кто и откуда вчера между тремя и пятью часами ночи удалил весь/home, для начала нужно определить, с каких терминалов будет разрешено заходить с правами администратора. Для начала отредактируйте файл /etc/securetty, в нем содержится список консолей, на которые разрешены администраторские логины. Не имея возможности входить в систему непосредственно с правами root, пользователи смогут воспользоваться командой su. Запущенная без дополнительных параметров, она попытается запустить командный интерпретатор с правами администратора. Проблем, которые возникнут в процессе, может быть две. Во-первых, команда su спрашивает пароль того пользователя, от имени которого должен будет запуститься интерпретатор, а не того, кто запустил su. Во-вторых, в большинстве систем su могут использовать только члены группы wheel.

Куда более гибкой системой распределения прав является использование команды sudo. Чтобы настроить ее лимиты, необходимо (разумеется, суперпользователем) выполнить команду visudo. В файле /etc/sudoers описывается, кому из пользователей (или групп) разрешено выполнять те или иные команды. Столь популярная конструкция вида:

%wheel ALL=(ALL) NOPASSWD: ALL весьма удобна, но не всегда безопасна Дело даже не в том, что основной "рабочий" аккаунт вовсе не обязан входить в группу wheel. Просто у пользователей при таких довольно мягких ограничениях быстро возникает условный рефлекс - к отказывающейся выполняться команде спереди приписывается магическое слово sudo, после чего все волшебным образом запускается. Проблема в том, что запускается процесс в таком случае с правами root, и последствия могут быть фатальными. Необходимость вводить пароль каждый раз перед запуском sudo хотя и не вызвана соображениями безопасности, но поддерживает некоторую собранность и чувство ответственности за свои действия. Следующим "рубежом обороны" является проверка допустимости действия непосредственно ядром. С его точки зрения пользователи делятся на root и всех остальных, причем на этом уровне проверяется уже не допустимость запуска файла программы, а допустимость выполнения системного вызова.

На практике это оборачивается тем, что никто кроме администратора не может открыть raw-socket, смонтировать/размонтировать файловую систему, загрузить или выгрузить модуль ядра.

Кроме того, как и в случае с файлами, только root может уничтожить процесс, принадлежащий другому пользователю, и, разумеется, никто кроме него не сможет терминировать процесс, запущенный суперпользователем.

К стати сказать в Ubuntu по умолчанию root аккаунт отключен и пароля у root просто нет. Все административные задачи выполняются через sudo. По умолчанию право на выполнение sudo предоставлено первому пользователю, созданному при установке дистрибутива. Все остальные по умолчанию - обычные пользователи.

Проиллюстрируем Как использовать SUDO на нескольких наглядных примерах:

1. В консоли/терминале:
$sudo <команда>
(запуск команды с правами суперпользователя). Последует запрос на ввод пароля, введите свой пользовательский пароль.

Система какое-то время (man sudo) помнит введённый пароль (сохраняет открытой sudo-сессию). И поэтому возможна ситуация, когда запрос на ввод пользовательского пароля не последует. Если вдруг захочется гарантированно прервать sudo-сессию Вы можете выполнить команду:

$sudo -K

2. При использовании "Alt+F2":
gksudo <команда>
(запуск графических приложений с правами суперпользователя). На запрос введите свой пользовательский пароль.

Обратите внимание что в Кубунту вместо gksudo используйте команду kdesu <имя программы>

Вы можете получить права администратора в терминале, чтобы не вводить каждый раз sudo?
$sudo -s -H
(не забыть "-") Терминал с правами root. Пароль пользователя при этом ввести нужно лишь один раз. Последующие команды можно запускать с правами root без необходимости добавлять sudo. Терминал переводится в /root папку. $sudo -s или sudo su

Терминал с правами root. Как и предыдущая команда, но оставляет терминал в домашней папке (/home/your_name)

Если Вы захотите больше узнать о любой из этих команд вам достаточно будет ввести в терминале имя команды --help, например sudo --help.

Прочтя выше изложенный материал либо в силу сложившихся привычек Вы захотите изменить sudo на традиционный root, то вам для этого потребуется:
а) Установка пароля рута: $sudo passwd root
Ликвидация пароля рута: $sudo passwd -l root

б) Вы также можете запретить использование sudo вообще, и использовать только пароль root:
Установить пароль root: $sudo passwd root
Запретить sudo выполнение любых команд под root`ом в /etc/sudoers.

в) При установке Ubuntu в экспертном режиме можно самостоятельно ввести пароль root. Однако тогда обычный пользователь не сможет воспользоваться командой sudo. Чтобы это исправить, достаточно установить пакет sudo и сконфигурировать /etc/sudoers, а также добавить пользователя в группу wheel.

г) В случае возникновения проблем можно загрузиться в single mode (для этого выбираем в grub при загрузке режим recovery mode) и всё исправить.



Закажи себе Linux на DVD

Hosted by uCoz