7.1. Измените программу из листинга 7.1 (free_and_sbrk.c) так, чтобы она выводила текущее значение крайней точки программы после каждого выполнения функции malloc(). Запустите программу, указав небольшой размер выделяемого блока. Тем самым будет продемонстрировано, что функция malloc() не использует sbrk() для изменения положения крайней точки программы при каждом вызове, а вместо этого периодически выделяет более крупные фрагменты памяти, из которых возвращает вызывающему коду небольшие фрагменты.
7.2. (Повышенной сложности.) Реализуйте функции malloc() и free().
8. Пользователи и группы
У каждого пользователя имеется уникальное имя для входа в систему и связанный с ним числовой идентификатор пользователя (UID). Пользователи могут состоять в одной или нескольких группах. У каждой группы также есть уникальное имя и идентификатор группы (GID).
Основное предназначение пользовательских и групповых идентификаторов — определение принадлежности различных системных ресурсов и управление правами, предоставляемыми процессам по доступу к этим ресурсам. Например, каждый файл принадлежит конкретному пользователю и группе, а у каждого процесса есть несколько пользовательских и групповых идентификаторов, определяющих владельцев процесса и набор прав для доступа к файлу (подробности изложены в главе 9).
В этой главе мы рассмотрим системные файлы, используемые для определения пользователей и групп в системе, а затем библиотечные функции для извлечения информации из этих файлов. В завершение мы разберем работу функции crypt(), используемой для шифрования и аутентификации паролей входа в систему.
В
mtk: x:1000:100:Michael Kerrisk:/home/mtk:/bin/bash
Рассмотрим эти поля по порядку следования.
•
Здесь будет считаться, что пароли зашифрованы с помощью исторически сложившейся и по-прежнему широко используемой в UNIX схемы шифрования паролей под названием Data Encryption Standard (DES). Схему DES можно заменить другими схемами, например MD5, которая создает из данных на входе 128-битный профиль сообщения (разновидность хеша). В файле паролей (или теневом файле паролей) это значение сохраняется в виде 34-символьной строки.
Возможно (но редко встречается) наличие в файле паролей более одной записи с одним и тем же UID, что позволяет иметь для этого идентификатора сразу несколько имен для входа в систему. При этом нескольким пользователям разрешено иметь доступ к одним и тем же ресурсам (например, файлам), используя различные пароли. С различными наборами идентификаторов групп могут быть связаны различные имена для входа в систему.