Мир на трёх кашалотах мается
3. Пользователи

Глава из книги Сага о FreeBSD

Алексей Федорчук

2008-11-19

назад | к началу

Назначение системных групп

Возникает вопрос — а для чего предназначены системные группы? В отношении системных пользователей мы этот вопрос несколько прояснили ранее. Попробуем проделать это и для групп.

Начнём с наблюдения, что каждая системная группа включает минимум одного пользователя — имя его идентично имени группы. В чем легко убедиться просмотром файла /etc/passwd. Исключение — группа wheel: пользователя с таким именем в базе учетных записей мы не обнаружим. Но зато в этой группе явным образом изначально прописан один член — тот самый легендарный суперпользователь, именуемый root'ом, права которого столь часто требуются обычному юзеру для выполнения всякого рода административных действий.

Из этого можно догадаться о назначении группы wheel: во FreeBSD возможность получения прав администратора командой su по умолчанию имеют только те из обычных пользователей, которые являются ее членами. На самом деле это не какая-то исключительная особенность именно FreeBSD — то же самое можно видеть и в некоторых дистрибутивах Linux (например, в Gentoo). А вообще говоря, особый статус членов группы wheel зависит не от ОС или дистрибутива, а устанавливается в файле /etc/login.access. Где и может быть отменен при желании.

Впрочем, необходимости в этом я не вижу. Гораздо проще включить пользователя, для которого могут потребоваться административные полномочия, в группу wheel, оставив за ее пределами всех остальных. Что дает некоторую дополнительную гарантию от фатальных ошибок. Так, в моей домашней системе, единственным физическим пользователем которой являюсь я сам, всегда существует две учетные записи реальных пользователей. Одна — для себя, любимого, под которой я выполняю всякую работу (например, сочиняю эти заметки). Другая же подразумевает опять же меня, но предназначена для всякого рода нездоровых экспериментов. Так вот — к группе wheel приписан только первый аккаунт, так что в роли второго пользователя я даже случайно не могу нанести серьезного вреда.

К группе wheel приписано большинство исполнимых файлов базовой системы, расположенных в каталогах /{bin,sbin} и /usr/{bin,sbin}. В нее же, за редким исключением, попадают и исполнимые файлы программ, устанавливаемых из портов или пакетов, которые записываются в каталог /usr/local/bin. Все файлы группы wheel имеют маску доступа -r-xr-xr-x, то есть теоретически их исполнение разрешено любому пользователю. Что, конечно, не значит, будто обычный пользователь, не получив прав root'а, может выполнить дисковую разметку, будь он хоть трижды членом группы wheel: для таких действий нужны еще и права доступа к соответствующим устройствам.

Некоторые файлы из каталогов /{bin,sbin} и /usr/{bin,sbin} (напомню, что владельцев всех их является пользователь root) имеют, однако, иную групповую принадлежность. Причем характерно, что для них устанавливается маска доступа -r-xr-x---, запрещающая исполнение не-членами группы. А часто они помечены и битом суидности (-r-sr-x---) с теми же ограничениями на запуск. Возникает вопрос, для чего предназначены прочие стандартные группы, и как атрибуты принадлежащих им файлов могут отразиться на пользовательских действиях?

Для определения назначения стандартных групп посмотрим, а какие же именно из исполняемых файлов к ним приписаны. Начнем с группы operator, которая, как и группа wheel, изначально имеет приписанного к ней члена — все того же вездесущего root'а. Для чего выполним простой поиск в соответствующих каталогах:

% find /{bin,sbin,usr/{bin,sbin}} -group operator

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

/sbin/mksnap_ffs
/sbin/shutdown

оба с атрибутами доступа -r-sr-x---. Из чего следует, что принадлежность к группе operator дает возможность без административных прав выключить, перезагрузить или реинициализировать систему (командой /sbin/shutdown), а также сделать слепок (snapshot) текущего состояния какой-либо из наличных файловых систем (командой mksnap_ffs). Нужно ли оно нам — на этот вопрос каждый должен ответить для себя. Мне принадлежность к группе operator представляется не лишней.

Далее, группы dialer и network: интуитивно понятно, что первая имеет какое-то отношение к установке модемного соединения, а вторая — к работе с сетью. Проверяем тем же методом:

$ find /{bin,sbin,usr/{bin,sbin}} -group dialer

дает нам на выводе

/usr/sbin/pppd

а

find /{bin,sbin,usr/{bin,sbin}} -group network

обнаруживает

/usr/sbin/sliplogin
/usr/sbin/ppp

А поскольку права доступа у них установлены как -r-sr-x---, становится ясным, что без членства в соответствующей группе для пользователя невозможно модемное соединение ни посредством пользовательской программы ppp, ни с помощью демона pppd. Не удастся соединиться и с помощью всякого рода front-end'ных звонилок, типа kppp из комплекта KDE.

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

Аналогичным образом разбираемся и с остальными группами из списка /etc/group. С помощью все той же команды find выясняется, что группе daemon принадлежит несколько файлов, имеющих отношение к печати:

/usr/bin/lpq
/usr/bin/lpr
/usr/bin/lprm
/usr/sbin/lpc

Однако все они имеют атрибуты доступа вида -r-sr-sr-x, то есть никаких действий по переопределению групп как-будто бы не требуется.

Относительно прочих групп из списка /etc/group затрудняюсь сказать что-нибудь определенное. Некоторые из них характеризуют принадлежность файлов устройств. Например, к группе tty относятся активизированные терминалы, как виртуальные консоли (устройства вида /dev/ttyv*, на которых авторизован какой-либо пользователь, так и псевдотерминалы (устройства вида /dev/ttyp*, соответствующие открытым терминальным окнам в Иксах (неактивизированные терминалы принадлежат к группе wheel).

К некоторым группам (например, staff) в моей системе не принадлежат никакие файлы — не только в каталогах для исполняемых бинарников или устройств, но и вообще. Так что об их назначении я могу только гадать.

Создание и изменение аккаунтов

Таким образом мы плавно подошли к вопросу о том, как создаются и изменяются пользовательские аккаунты. Или, иными словами, кто определяет пользователей системы, и каким образом.

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

Правда, пользователь root действительно существует в системе от века, аналогично Господу Богу. Вернее, пользователь с UID 0 — как уже говорилось, сама по себе система об именах пользователей не имеет никакого понятия. Все же прочие пользователи являются порождением нашего бога из машины — root-оператора. Причем косвенно это относится даже к псевдопользователям-демонам. А уж обычные реальные и виртуальные (почтовые и ftp-клиенты) пользователи порождаются root'ом непосредственно.

Впрочем, сейчас нас волнуют только реальные пользователи. Для их создания (то есть учреждения соответствующих учетных записей) в POSIX-системах существует ряд инструментов (вплоть до обычного текстового редактора). Однако это уже требует непосредственного использования ряда команд, и потому будет рассмотрено в соответствующей главе.

назад | к началу