Уважаемые подписчики!
Наконец-то я определился, чему этим летом будет посвящена рассылка.
У меня (на время, я надеюсь) пропало желание переводить новые страницы
справочного руководства после очередного опроса подписчиков.
(Вы меня почти убедили - кому надо, сам переведет, или английский выучит.
Какого хрена я свое время на это трачу...)
С другой стороны, надо бы опубликовать переводы целого ряда страниц по
основным пользовательским командам - для полноты картины и удобства ссылок.
И отдохнуть хочется...
Кроме того, я давно и многим обещал опубликовать материалы своего учебного курса "Основы ОС UNIX". Пожалуй, эта публикация решит многие проблемы. Поэтому летом в рассылке будут публиковаться фрагменты (около 10) учебных материалов этого курса. Сегодня вашему вниманию предлагается первая часть, посвященная основным событиям в истории, особенностям архитектуры ОС UNIX и основным файлам, в которых хранится информация о пользователях и группах.
Ваши отзывы об этих учебных материалах шлите мне по почте, в гостевую или оставляйте в комментариях на соответствующей странице проекта "Хроника бегства от безопасности".
Copyleft (no c) - Fuck copyright! 1999-2003 В. Кравчук, OpenXS Initiative, идея, составление, перевод, примеры
Этот краткий (предположительно, 16 часов, из которых 6 - практические занятия) вводный курс предназначен для ознакомления с архитектурой, особенностями и основными средствами ОС UNIX. При успешном освоении, курс позволит свободно и продуктивно работать в ОС UNIX в качестве пользователя и продолжить изучение администрирования или программирования этой операционной системы.
Изложение ведется, в основном, без привязки к особенностям какой-либо версии UNIX, но при необходимости конкретизации, она делается для систем SVR4, в частности, ОС Solaris 8.
История ОС UNIX началась в 1969 году в одном из подразделений AT&T Bell Laboratories, когда на "малоиспользуемой" машине DEC PDP-7 Кен Томпсон (Ken Thompson), Деннис Ричи (Dennis Ritchie) и другие (прежде занимавшиеся созданием ОС Multics) начали работу над операционной системой, названной ими первоначально Unics (UNiplexed Information and Computing System). В течение первых 10 лет развитие UNIX происходило, в основном, в Bell Labs. Соответствующие начальные версии назывались "Version n" (Vn) и предназначались для ЭВМ DEC PDP-11 (16-битовая) и VAX (32-битовая).
Версии Vn разрабатывались группой Computer Research Group (CRG) в Bell Labs. Поддержкой занималась другая группа, Unix System Group (USG). Разработкой также занималась группа Programmer's WorkBench (PWB), привнесшая систему управления исходным кодом sccs, именованные каналы и ряд других идей. В 1983 году эти группы были объединены в одну, Unix System Development Lab.
Ниже в хронологическом порядке представлены наиболее существенные версии и события в истории UNIX вплоть до 2002 года, а также информация о взаимосвязях между ними:
Ожидается:
Итак, в настоящее время (начало 2002 года - В.К.) мы имеем на платформе Intel следующие основные версии UNIX:
На других платформах (основные версии):
ОС UNIX имеет следующие основные характеристики:
Архитектура ОС UNIX - многоуровневая. На нижнем уровне, непосредственно над оборудованием, работает ядро операционной системы. Функции ядра доступны через интерфейс системных вызовов, образующих второй уровень. На следующем уровне работают командные интерпретаторы, команды и утилиты системного администрирования, коммуникационные драйверы и протоколы, - все то, что обычно относят к системному программному обеспечению. Наконец, внешний уровень образуют прикладные программы пользователя, сетевые и другие коммуникационные службы, СУБД и утилиты.
Основные функции ядра UNIX (которое может быть монолитным или модульным) включают:
Системные вызовы обеспечивают:
Системные вызовы преобразуют процесс, работающий в режиме пользователя, в защищенный процесс, работающий в режиме ядра. Это позволяет процессу вызывать защищенные процедуры ядра для выполнения системных функций.
Системные вызовы обеспечивают программный интерфейс для доступа к процедурам ядра. Они обеспечивают управление системными ресурсами, такими как память, пространство на дисках и периферийные устройства. Системные вызовы оформлены в виде библиотеки времени выполнения. Многие системные вызовы доступны через командный интерпретатор.
Пользовательские процессы образуют следующие два уровня и:
Пространство (памяти) ядра - это область памяти, в которой процессы ядра (процессы, работающие в контексте ядра) реализуют службы ядра. Любой процесс, выполняющийся в пространстве ядра, считается работающим в режиме ядра. Пространство ядра - привилегированная область; пользователь получает к ней доступ только через интерфейс системных вызовов. Пользовательский процесс не имеет прямого доступа ко всем инструкциям и физическим устройствам, - их имеет процесс ядра. Процесс ядра также может менять карту памяти, что необходимо для переключения процессов (смены контекста).
Пользовательский процесс работает в режиме ядра, когда начинает выполнять код ядра через системный вызов.
Поскольку пользовательские процессы и ядро не имеют общего адресного пространства памяти, необходим механизм передачи данных между ними. При выполнении системного вызова, аргументы вызова и соответствующий идентификатор процедуры ядра передаются из пользовательского пространства в пространство ядра. Идентификатор процедуры ядра передается либо через аппаратный регистр процессора, либо через стек. Аргументы системного вызова передаются через пользовательскую область вызывающего процесса.
Пользовательская область процесса содержит информацию о процессе, необходимую ядру:
Пользовательский процесс не может обращаться к пространству ядра, но ядро может обращаться к пространству процесса.
ОС UNIX обеспечивает ряд стандартных системных программ для решения задач администрирования, переконфигурирования и поддержки файловой системы, в частности:
Для решения этих задач системное ПО (работающее в пользовательском режиме) часто использует системные вызовы.
UNIX - многопользовательская операционная система. Пользователи, занимающиеся общими задачами, могут объединяться в группы. Каждый пользователь обязательно принадлежит к одной или нескольким группам. Все команды выполняются от имени определенного пользователя, принадлежащего в момент выполнения к определенной группе.
В многопользовательских системах необходимо обеспечивать защиту объектов (файлов, процессов), принадлежащих одному пользователю, от всех остальных. ОС UNIX предлагает базовые средства защиты и совместного использования файлов на основе отслеживания пользователя и группы, владеющих файлом, трех уровней доступа (для пользователя-владельца, для пользователей группы-владельца, и для всех остальных пользователей) и трех базовых прав доступа к файлам (на чтение, на запись и на выполнение). Базовые средства защиты процессов основаны на отслеживании принадлежности процессов пользователям.
Для отслеживания владельцев процессов и файлов используются числовые идентификаторы. Идентификатор пользователя и группы - целое число (обычно) в диапазоне от 0 до 65535. Присвоение уникального идентификатора пользователя выполняется при заведении системным администратором нового регистрационного имени. Значения идентификатора пользователя и группы - не просто числа, которые идентифицируют пользователя, - они определяют владельцев файлов и процессов. Среди пользователей системы выделяется один пользователь - системный администратор или суперпользователь, обладающий всей полнотой прав на использование и конфигурирование системы. Это пользователь с идентификатором 0 и регистрационным именем root.
При представлении информации человеку удобнее использовать вместо соответствующих идентификаторов символьные имена - регистрационное имя пользователя и имя группы. Соответствие идентификаторов и символьных имен, а также другая информация о пользователях и группах в системе (учетные записи), как и большинство другой информации о конфигурации системы UNIX, по традиции, представлена в виде текстовых файлов. Эти файлы - /etc/passwd, /etc/group и /etc/shadow (в системах с теневым хранением паролей) - детально описаны ниже.
Каждая строка (учетная запись) в файле /etc/passwd описывает одного известного системе пользователя и имеет семь разделенных двоеточиями полей. Пример записи:
user_01:x:169:10:Student:/home/user_01:/bin/sh
Назначение полей этой записи представлено в следующей таблице.
Таблица 1. Поля файла /etc/passwd и их назначение
| Поле | Назначение |
| Имя пользователя (регистрационное имя) | Содержит символьное имя пользователя, используемое при регистрации в системе. В пределах одной машины должно быть уникальным. Регистрационное имя должно состоять из алфавитно-цифровых символов (нижнего регистра), без пробелов, с максимальной длиной, определяемой конкретной ОС. Наиболее часто используется максимальная длина - восемь символов. Дублирование имен пользователей приводит к определенным осложнениям. Например, дубликаты появляются тогда, когда администратор использует в имени более 8 символов. Тогда для системы jarmstrong то же, что jarmstroff. Когда имя так продублировано, система использует первую найденную для него запись в файле /etc/passwd и игнорирует последующие. |
| Пароль | Поле хранит зашифрованный пароль. Допускается пустое поле. При использовании системы теневого хранения паролей, в этом поле находится только метка пароля (x), а зашифрованный пароль хранится в другом месте. Правила задания пароля обычно находятся в файле /etc/default/passwd, (например, директива PASSLENGТH=число в этом файле задает минимальное количество символов в пароле). Некоторые системы также учитывают регистр, а в некоторых предусматривается использование как минимум одного не алфавитно-цифрового символа. |
| Идентификатор пользователя | Поле хранит числовой идентификатор пользователя, который связан с его регистрационным именем. Любой созданный пользователем файл или запущенный процесс ассоциируется с его числовым идентификатором. |
| Идентификатор группы | Содержит числовой идентификатор группы. Любой созданный пользователем файл ассоциируется с его идентификатором группы. Указанная здесь группа является основной (первичной) для данного пользователя. |
| Комментарий | Содержит комментарий - любую алфавитно-цифровую строку. Предположительно это поле содержит информацию о реальном владельце регистрационного имени. ОС UNIX не задает его формат, так что подойдет любой. Некоторые программы печати и электронной почты используют это поле для вывода настоящего имени пользователя. |
| Начальный каталог | Определяет начальный каталог пользователя. Когда пользователь начинает сеанс работы, система помещает его в данный каталог. Пользователь должен иметь соответствующие права доступа к нему. |
| Начальная команда | Определяет командную среду пользователя (обычно запускается один из командных интерпретаторов UNIX, но, теоретически, можно указать любую команду). Это поле можно изменять. |
Таблица 2. Поля файла /etc/group и их назначение
| Поле | Назначение |
| Имя группы | Содержит (уникальное) символьное имя группы. |
| Пароль группы | Группы могут иметь пароли, хотя использование паролей групп - явление редкое. В примере данное поле пустое - это значит, что пароль отсутствует. |
| Идентификатор группы | Содержит числовой идентификатор группы. |
| Список пользователей | Содержит список регистрационных имен пользователей данной группы. Имена в этом списке разделяются запятыми. Пользователи могут принадлежать к нескольким группам и, при необходимости, переключаться между ними с помощью команды newgrp. |
Пример записи из файла /etc/group:
bin::2:root,bin,daemon
Этот файл используется в системах с теневым хранением паролей, где они вынесены из доступного всем пользователям на чтение файла /etc/passwd для повышения безопасности системы. Здесь (помимо собственно зашифрованных паролей) хранятся дополнительные ограничения, связанные с регистрационным именем и паролем пользователя. Доступ к этому файлу на чтение имеет только пользователь root, а работают с ним команды passwd и login.
Файл содержит по одной записи из восьми полей, разделенных двоеточиями, для каждой учетной записи в системе. Назначение полей этой записи представлено в табл. 3.
Таблица 3. Поля файла /etc/shadow и их назначение
| Номер поля | Назначение |
| 1 | Имя пользователя. |
| 2 | Зашифрованный по особому алгоритму (обычно, DES или MD5) пароль. |
| 3 | Количество дней между 01.01.1970 (началом эры UNIX) и днем последнего изменения пароля. |
| 4 | Минимальное количество дней между изменениями пароля. |
| 5 | Срок действия пароля пользователя. |
| 6 | За сколько дней система будет начинать предупреждать пользователя о необходимости изменения пароля. |
| 7 | Сколько дней пользователь может не работать в системе, прежде чем его регистрационное имя будет заблокировано. |
| 8 | Дата, после которой имя пользователя нельзя будет использовать в системе. |
Каждая версия ОС UNIX резервирует несколько специальных регистрационных имен для предопределенных системных целей. Так, в UNIX SVR4 системными считаются регистрационные имена, соответствующие идентификаторам от 0 до 100. Наиболее часто резервируются регистрационные имена, представленные в табл. 4.
Таблица 4. Системные регистрационные имена в ОС UNIX SVR4
| Регистрационное имя | Назначение |
| root | Регистрационное имя суперпользователя, администратора системы, соответствующее идентификатору 0. Единственное имя, обязательно имеющееся в любой UNIX-системе. Пользователь root не связан никакими ограничениями по доступу. Для выполнения большинства программ администрирования используется регистрационное имя root, обеспечивающее гарантированный доступ к необходимым ресурсам. |
| daemon | Владелец процессов, реализующих пользовательские службы. |
| sys | Владелец выполняемых пользовательских системных команд UNIX (часто соответствует идентификатору 0). |
| bin | Владелец стандартных пользовательских утилит UNIX (часто соответствует идентификатору 0). |
| adm | Псевдопользователь, владеющий файлами системы журнализации. |
| cron | Псевдопользователь, владеющий соответствующими файлами, от имени которого выполняются процессы подсистемы запуска программ по расписанию. |
| news | Псевдопользователь, от имени которого выполняются процессы системы телеконференций (дискуссионных групп или групп новостей). |
| nobody | Псевдопользователь, используемый при работе сетевой файловой системы NFS. |
| uucp | Псевдопользователь подсистемы UUCP, позволяющий передавать почтовые сообщения и файлы между UNIX-хостами. |
| lp, lpd | Псевдопользователь, от имени которого выполняются процессы системы печати, владеющий соответствующими файлами. |
Точно так же задаются и системные группы в файле /etc/group. В SVR4 зарезервированными считаются имена групп с идентификаторами от 0 до 100.
С наилучшими пожеланиями,
В.К.
|
|