- •Государственный комитет РФ по высшему образованию
- •“ОРГАНИЗАЦИЯ ВЫЧИСЛИТЕЛЬНЫХ ПРОЦЕССОВ”
- •Санкт-Петербург - 1996
- •Имя команды Ключи Имена файлов
- •1.4. Содержание отчета
- •1.5. Защита работы
- •2.1. Общие сведения
- •2.2. Подготовка к работе
- •2.3. Порядок выполнения работы
- •2.4. Содержание отчета
- •2.5. Защита работы
- •2.6. Контрольные вопросы
- •3.1. Общие сведения
- •3.3. Порядок выполнения работы
- •3.5. Защита работы
- •4.1. Общие сведения
- •4.2. Подготовка к работе
- •4.3. Порядок выполнения работы
- •4.4. Содержание отчета
- •4.5. Защита работы
- •4.6. Контрольные вопросы
- •5.1. Общие сведения
- •5.2. Подготовка к работе
- •5.3. Порядок выполнения работы
- •5.4. Содержание отчета
- •5.5. Защита работы
- •5.6. Контрольные вопросы
- •6.1. Общие сведения
- •6.2. Подготовка к работе
- •6.3. Порядок выполнения работы
- •6.4. Содержание отчета
- •6.5. Защита работы
- •6.6. Контрольные вопросы
- •7.1. Общие сведения
- •7.2. Подготовка к работе
- •7.4. Содержание отчета
- •7.5. Защита работы
- •8.1. Общие сведения
- •8.2. Подготовка к работе
- •8.3. Порядок выполнения работы
- •8.4. Содержание отчета
- •8.5. Защита работы
- •8.6. Контрольные вопросы
- •9.1. Общие сведения
- •9.2. Подготовка к работе
- •9.3. Порядок выполнения работы
- •9.4. Содержание отчета
- •9.5. Защита работы
- •9.6. Контрольные вопросы
- •Список литературы
- •Содержание
1.4. Содержание отчета
В отчете должны быть приведены команды, используемые при выполнении лабораторной работы.
1.5. Защита работы
Для защиты лабораторной работы студенту необходимо знать: основные команды ОС LINUX, структуру файловой системы и способы ее использования.
1.6. Контрольные вопросы
1. Какие уровни защиты предоставляет система и кто их может изменять? 2.Каким образом можно передавать данные между командами?
Лабораторная работа 2 ИДЕНТИФИКАЦИЯ ПОЛЬЗОВАТЕЛЕЙ В ОС LINUX
Цель работы: изучение и использование системных функций и команд, позволяющих получить информацию о пользователях и группах пользователей, работающих в операционной системе LINUX.
2.1. Общие сведения
Для работы в ОС LINUX каждый пользователь предварительно должен быть зарегистрирован в системе. Эти действия выполняются администратором системы, который заносит сведения о пользователе в учетный файл регистраций пользователей (/etc/passwd) и в учетный файл регистраций групп (/etc/group). Каждая запись учетного файла пользователей представляет собой строку, состоящую из 7 полей, отделенных друг от друга двоеточием. Первое поле - регистрационное имя пользователя (это имя пользователь должен указать при каждом входе в систему на запрос login); второе - пароль в зашифрованном виде (пароль указывается при входе в систему на запрос passwd); третье - целочисленный идентификатор пользователя (является атрибутом процесса и идентифицирует пользователя, создавшего процесс; один и тот же идентификатор может соответствовать различным регистрационным именам); четвертое - целочисленный идентификатор группы (является атрибутом процесса и идентифицирует группу, в которую входит пользователь, создавший процесс); пятое - имя и фамилия пользователя или другая информация о пользователе (это поле может отсутствовать); шестое - спецификация текущего каталога, в который пользователь попадает при входе в систему); седьмое - имя интерпретатора команд (если это поле отсутствует, то используется стандартный интерпретатор команд /bin/sh). За исключением пароля, все остальные поля
устанавливаются администратором. Пароль заносится пользователем при первом входе в
6 - -
систему с помощью команды passwd. Пароль должен содержать не менее 6 символов, которые при вводе не отображаются на экране.
В системе имеется ряд информационных команд, которые позволяют идентифицировать пользователя в системе. По команде id выводится на экран идентификатор пользователя, работающего за данным терминалом, его регистрационное имя, текущие идентификатор и имя группы, а также полный список идентификаторов и имен групп, в которые входит пользователь. Если требуется узнать только регистрационное имя, то можно воспользоваться командой logname. В программе этот параметр можно получить с помощью функции getlogin(), которая возвращает указатель на строку, содержащую регистрационное имя пользователя.
Имеется также возможность узнать регистрационные имена всех пользователей, работающих в данный момент в системе. Такая информация выдается по команде who, которая выводит на экран список всех пользователей, имена связанных с ними терминалов и время входа в систему. Эта команда может иметь два аргумента. Первый - имя файла с учетной информацией о текущих пользователях. По умолчанию это системный файл /etc/utmp. Можно использовать и другой системный файл /usr/adm/wtmp, содержащий сведения о всех сеансах работы в системе. Второй аргумент am i позволяет узнать имя, под которым пользователь вошел в систему.
Пользователь может также прочитать в свою программу запись из файла учета регистраций, используя системные функции getpwuid(uid_t uid) и getpwnam(char * name). Обе функции возвращают указатель на структуру типа struct passwd, содержащую запись учетной базы пользователей, которая соответственно выбирается из базы либо по идентификатору пользователя uid, либо по регистрационному имени name. В случае ошибки или если требуемой записи в базе не оказалось, возвращается нулевой указатель. Если один и тот же uid идентифицирует несколько пользователей, то из базы будет выбрана первая запись с данным идентификатором пользователя. Тип структуры passwd и функции getpwuid и getpwnam определены в библиотечном файле /usr/include/pwd.h. Структура passwd имеет следующее описание:
struct passwd { |
|
char *pw_name; |
/* Регистрационное имя пользователя. */ |
char *pw_passwd; |
/* Пароль. */ |
uid_t pw_uid; |
/* Идентификатор пользователя. */ |
gid_t pw_gid; |
/* Групповой идентификатор пользователя. */ |
char *pw_gecos; |
/* ФИО. */ |
char *pw_dir; |
/* Директорий пользователя. */ |
char *pw_shell; |
/* Имя интерпретатора команд. */ |
}; |
|
Каждый пользователь должен быть членом по крайней мере одной группы. Группа - это объединение пользователей, работающих над одним и тем же проектом и имеющих
7 - -
право доступа к одним и тем же файлам. Информация о группах хранится в учетном файле регистраций групп. Каждая запись этого файла представляет собой строку, состоящую из 4 полей, отделенных друг от друга двоеточием. Первое поле - имя группы; второе - зашифрованный пароль группы(может отсутствовать, тогда при выводе этого поля будет напечатан символ *); третье - целочисленный идентификатор группы (используется для идентификации группы в учетном файле пользователей и в процессах); четвертое - список регистрационных имен пользователей, разделенных запятыми. При включении нового пользователя в систему администратор либо добавляет его регистрационное имя в одну из существующих групп, либо создает новую группу, определяя ее имя, идентификатор и членов группы. Один пользователь может быть членом нескольких групп и в процессе работы менять принадлежность к той или иной группе. При входе в систему пользователь будет иметь группу, идентификатор которой хранится в файле учета пользователей. Изменить свою группу пользователь может только при условии, что он является членом другой группы и знает ее пароль. Это изменение выполняется командой newgrp имя группы, которая вызывает командный интерпретатор и создает для пользователя другую операционную среду, где он будет иметь новый групповой идентификатор. Для возврата в старую среду необходимо выполнить команду exit.
Информацию о группе пользователь может получить с помощью системных функций getgrgid(gid_t gid) и getgrnam(char * name). Обе функции возвращают указатель на структуру типа struct group, содержащую данные о группе. Эти данные соответственно выбираются из учетного файла регистраций групп либо по идентификатору группы gid, или имени группы name. В случае ошибки возвращается нулевой указатель. Тип структуры group и функции getgrgid и getgrnam определены в библиотечном файле /usr/include/grp.h. Структура group имеет следующее описание:
struct group { |
|
|
char *gr_name; |
/* Имя группы. |
*/ |
char *gr_passwd; |
/* Пароль. */ |
|
gid_t gr_gid; |
/* Идентификатор группы. */ |
|
char **gr_mem; |
/* Список членов группы. */ |
|
}; |
|
|
Получить идентификаторы всех групп, в которые входит пользователь, можно с помощью функции getgroups(int gidsetsize, gid_t *grouplist). Функция getgroups
возвращает число групп и заполняет массив grouplist идентификаторами групп, в которые входит пользователь. Размер массива задается параметром gidsetsize. Если число групп меньше числа элементов массива, то значение оставшихся элементов массива не определено.
В структурах passwd и group для описания полей данных используются системные типы данных uid_t и gid_t, определенные как unsigned short в библиотечном макрофайле sys/types.h.
8 - -
2.2. Подготовка к работе
Написать программу, которая выводит на экран и в файл информацию о записях из учетных баз пользователей и групп. Имя файла должно задаваться как аргумент функции main. В процессе выполнения программа должна запрашивать регистрационное имя или идентификатор пользователя и выводить в файл текст, в каждой строке которого указываются имя параметра, хранящегося в поле записи учетной базы, и его значение.
2.3. Порядок выполнения работы
1.Зарегистрироваться в системе.
2.Выполнить и проанализировать результаты работы команд logname и id.
3.Вызвать текстовый редактор и набрать подготовленную программу.
4.Откомпилировать программу и получить загрузочный модуль.
5.С помощью команды who получить список всех пользователей, работающих в системе, и переадресовать вывод ее результатов в файл .
6. |
Запустить |
программу, используя в качестве исходных данных имена |
пользователей, полученных по команде who. |
||
7. |
Распечатать программу и файлы результатов. |
2.4. Содержание отчета
Отчет по лабораторной работе должен содержать листинги программы и файлов результатов.
2.5. Защита работы
Для защиты лабораторной работы студенту необходимо знать: состав и назначение баз учета пользователей и групп; набор системных вызовов и команд,
позволяющих получить информацию о пользователе и группе пользователей.
2.6. Контрольные вопросы
1.Какую информацию заносит администратор в файлы учета пользователей и групп?
2.Каким образом можно узнать идентификатор пользователя и его группы?
3.Зачем нужны регистрационное имя и идентификатор пользователя?
Лабораторная работа 3 ПОРОЖДЕНИЕ И ИДЕНТИФИКАЦИЯ ПРОЦЕССОВ
Цель работы: изучение и использование системных функций и команд, обеспечивающих порождение и идентификацию процессов.
9 - -