Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка ПП.pdf
Скачиваний:
10
Добавлен:
02.06.2015
Размер:
288.49 Кб
Скачать

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 - -