Скачиваний:
84
Добавлен:
12.05.2015
Размер:
533.5 Кб
Скачать

6.3. Теневые пароли

Зашифрованный пароль – это пароль пользователя, пропущенный через односторонний алгоритм шифрования. Поскольку алгоритм является односторонним, невозможно получить оригинальный пароль, имея его зашифрованную версию.

Чтобы затруднить доступ к зашифрованным паролям, современные системы хранят их в другом файле – /etc/shadow, который часто называют теневым файлом паролей. Этот файл должен содержать как минимум имена пользователей и зашифрованные пароли.

Обязательными являются только два поля – имя пользователя (sp_namp) и зашифрованный пароль (sp_pwdp). В скобках указаны названия соответствующих полей структуры spwd, которая определена в заголовочном файле <shadow.h>. Другие поля хранят информацию о том, как часто должен изменяться пароль и как долго будет оставаться активной учетная запись.

Теневой файл паролей не должен быть доступен на чтение для всех. Доступ к нему должны иметь лишь несколько программ, например login и passwd. Владельцем таких программ является суперпользователь, и для них устанавливается бит set-user-ID. При использовании теневых паролей обычный файл паролей, /etc/passwd, может быть доступен для чтения любому.

В ОС Linux для доступа к теневому файлу паролей предусмотрен отдельный набор функций, которые очень похожи на те, что используются для работы с обычным файлом паролей.

#include <shadow.h>

struct spwd *getspnam (const char *name);

struct spwd *getspent (void);

/* обе функции возвращают непустой указатель на структуру spwd в случае успеха, NULL – в случае ошибки */

void setspent (void);

void endspent (void);

6.4. Файл групп

Файл групп Unix, называемый в стандарте Posix.1 базой данных групп, содержит поля, которые перечислены в табл. 6.3. Значения этих полей хранятся в структуре group, определенной в файле <grp.h>. Поле gr_mem представляет собой массив указателей на имена пользователей, которые входят в состав группы. Этот массив завершается пустым указателем.

Таблица 6.3

Поля файла /etc/group

Поле структуры group

Описание

char *gr_name

Имя группы

char *gr_passwd

Зашифрованный пароль

gid_t gr_gid

Числовой идентификатор группы

char **gr_mem

Массив указателей на имена членов группы

Для поиска имени группы или ее числового идентификатора в файле групп стандарт Posix.1 определяет следующие две функции.

#include <grp.h>

struct group *getgruid (gid_t gid);

struct group *getgrnam (const char *name);

/* обе функции возвращают непустой указатель на структуру group в случае успеха, NULL – в случае ошибки */

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

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

#include <grp.h>

struct group *getgrent (void);

/* функция возвращает непустой указатель на структуру group в случае успеха, NULL – в случае ошибки или по достижении конца файла */

void setgrent (void);

void endgrent (void);

Функция setgrent открывает файл групп, если он еще не был открыт, и переходит в его начало. Функция getgrent считывает очередную запись из файла групп, предварительно открыв его, если он еще не был открыт. Функция endgrent закрывает файл групп.

Соседние файлы в папке Chapter.2