Идентификатор группы (GID). Это числовой идентификатор первой из групп, в которую входит пользователь. Дальнейшая принадлежность к группам этого пользователя определена в системном файле групп.

Комментарий. Это поле содержит текст, описывающий пользователя. Такой текст выводится различными программами, например finger(1).

Домашний каталог. Исходный каталог, в который пользователь попадает после входа в систему. Содержимое этого поля становится значением переменной среды HOME.

• Оболочка входа в систему. Это программа, которой передается управление после входа пользователя в систему. Обычно это одна из оболочек, например bash, но может быть и любая другая программа. Если это поле остается пустым, то в качестве исходной применяется оболочка /bin/sh, Bourne shell. Содержимое поля становится значением переменной среды SHELL.

В автономной системе вся информация, касающаяся паролей, находится в файле /etc/passwd. Но если для хранения паролей в сетевой среде используется такая система, как Network Information System (NIS) или Lightweight Directory Access Protocol (LDAP), часть этой информации или же вся она целиком находится в удаленной системе. Поскольку программы, обращающиеся за информацией о паролях, используют рассматриваемые далее функции (getpwnam(), getpwuid() и т. д.), приложениям безразлично, что именно применяется: NIS или LDAP. То же самое можно сказать и о теневых файлах паролей и групп, рассматриваемых в следующих разделах.

8.2. Теневой файл паролей: /etc/shadow

Исторически сложилось так, что в системах UNIX вся информация о пользователях, включая зашифрованные пароли, хранится в файле /etc/passwd. В связи с этим возникают проблемы безопасности. Поскольку различным непривилегированным системным утилитам требуется доступ для чтения к другой информации, содержащейся в файле паролей, ее нужно делать доступной для чтения для всех пользователей. Тем самым открывается лазейка для программ по взлому паролей, пытающихся их расшифровать с помощью длинных списков наиболее вероятных вариантов (например, стандартных записей из словарей или имен людей), чтобы определить, соответствуют ли они зашифрованному паролю пользователя. Теневой файл паролей, /etc/shadow, был разработан как средство противостояния таким атакам. Замысел заключается в том, что вся неконфиденциальная информация о пользователе находится в открытом, доступном для чтения файле паролей, а зашифрованные пароли хранятся в теневом файле паролей, доступном для чтения только программам с особыми привилегиями.

Вдобавок к имени для входа в систему, обеспечивающему совпадение с соответствующей записью в файле паролей, и зашифрованному паролю теневой файл паролей также содержит ряд других полей, связанных с обеспечением мер безопасности. Дополнительные подробности, касающиеся этих полей, можно найти на странице руководства shadow(5). Нас же главным образом интересует поле зашифрованного пароля, которое более подробно мы рассмотрим при изучении библиотечной функции crypt() в разделе 8.5.

Теневые пароли в SUSv3 не определены. Кроме того, они предоставляются не всеми реализациями UNIX.

8.3. Файл групп: /etc/group

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

Набор групп, к которым принадлежит пользователь, определен в виде сочетания поля идентификатора группы в записи пользователя в файле паролей и групп, под которыми этот пользователь перечисляется в файле групп. Это странное разбиение информации на два файла сложилось исторически. В ранних реализациях UNIX можно было одновременно входить только в одну группу. Исходная группа, в которую входил пользователь при входе в систему, определялась полем GID файла паролей и могла быть в нем изменена после использования команды newgrp(1). Эта команда требовала от пользователя предоставить пароль группы (если вход в группу был защищен паролем). В 4.2BSD было введено понятие одновременной принадлежности к нескольким группам, позже ставшее стандартом в POSIX.1-1990. Согласно этой схеме в файле групп имелся список принадлежности каждого пользователя к дополнительным группам. (Команда groups(1) выводит либо те группы, в которые входит данный процесс оболочки, либо, если были переданы (одно или несколько) имена пользователей, — те группы, в которые входят эти пользователи.)

Файл групп /etc/group содержит по одной строке для каждой группы в системе. Каждая строка, как показано в следующем примере, состоит из четырех полей, отделенных друг от друга двоеточиями:

users: x:100:

jambit: x:106:claus,felli,frank,harti,markus,martin,mtk,paul

Рассмотрим эти поля в порядке следования.

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

Перейти на страницу:

Похожие книги