Защита информации в UNIX. Процессы.

advertisement
К.В. Звонарев
Программно-аппаратные
средства обеспечения
информационной безопасности
ТЕМА ЛЕКЦИИ
Защита информации в UNIX. Процессы.
Защита информации в UNIX. Процессы.
Обычно программой называют совокупность файлов:
исходные тексты, объектные, конфигурационные,
исполняемые файлы.
Процесс − программа на стадии выполнения и
включает образ программы, загруженной в память, и
среду выполнения.
Одна программа может породить несколько
процессов, в тоже время существуют процессы,
которые не соответствуют никакой программе.
Защита информации в UNIX. Процессы.
Типы процессов:
Системные − являются частью ядра и всегда расположены в
оперативной памяти. Они не имеют соответствующих им
программ в виде исполняемых файлов и запускаются
особым образом при инициализации системы. К таким
процессам относятся диспетчер свопинга, диспетчер памяти
ядра, диспетчер буферного кэша и т.п. К системным
относится и процесс init, являющийся прародителем всех
остальных процессов в системе.
Демоны (аналог служб Windows) − неинтерактивные процессы,
запускаются обычным образом из исполняемых файлов и
выполняются в фоновом режиме. Примерами являются ftpсервер, web-сервер, подсистема печати, подсистема
сетевого доступа и т.п.
Защита информации в UNIX. Процессы.
Прикладные процессы − все остальные процессы в
системе, порождаются в рамках пользовательского
сеанса работы.
Пользовательские процессы могут выполняться как в
интерактивном, так и в фоновом режиме.
Интерактивные процессы монопольно владеют
терминалом, и пока такой процесс не завершится,
пользователь не сможет работать с другими
приложениями.
Время жизни прикладных процессов ограничено
сеансом работы пользователя. При выходе из
системы
все
пользовательские
процессы
уничтожаются.
Защита информации в UNIX. Процессы.
Атрибуты процессов:
• PID (Process IDentifier, идентификатор процесса) −
уникальный числовой идентификатор. PID=1 имеет
процесс init, являющийся прародителем всех
остальных процессов. Присвоение
идентификаторов происходит по возрастающей.
• PPID (Parent Process ID) − идентификатор
родительского процесса. Для системных процессов
ядра и init PPID всегда равен нулю.
• Nice Number − относительный приоритет процесса.
Варьируется в диапазоне от -20 (высший приоритет,
наименьшее «дружелюбие» по отношению к другим
процессам) до +20 (низший приоритет, наибольшее
«дружелюбие» по отношению к другим процессам).
Защита информации в UNIX. Процессы.
Атрибуты процессов:
• TTY − терминал связанный с процессом, если существует.
Процессы демоны не имеют терминала.
• UID, EUID − реальный и эффективный идентификаторы
пользователя. Реальным идентификатором пользователя
данного является идентификатор пользователя, запустившего
процесс.
Эффективный
идентификатор
служит
для
определения прав доступа процесса к системным ресурсам.
Обычно эти идентификаторы совпадают, однако, если у
исполняемого файла установлен атрибут SUID, то
эффективный
идентификатор
становится
равным
идентификатору владельца файла и процесс получает права
владельца файла (обычно root), а не пользователя
запустившего процесс.
• GUID, EGUID − реальный и эффективный идентификатор
группы. Смысл аналогичен UID и EUID.
Защита информации в UNIX. Процессы.
Для получения информации о процессах служит команда ps.
Запущенная неким пользователем без опций, она выдает краткую
информацию о процессах текущего терминала, владельцем
которых данный пользователь является:
Колонка TT определяет терминал, связанный с процессом.
STAT − состояние процесса: R − процесс выполняется в данное
время (runable); I − idle (sleeping > 20s); S − sleeping < 20s; T −
stopped; Z − zombie.
TIME − количество процессорного времени, использованного
программой.
COMMAND − команда, которой была запущена программа.
Защита информации в UNIX. Процессы.
Более подробную информацию о процессах можно
получить со следующими опциями:
-a − выводит информацию о процессах всех
пользователей;
-u − выводит дополнительные сведения о процессах
(имя пользователя, запустившего процесс,
использование ресурсов процессора и памяти);
-l − выводит вместо имени пользователя его UID и
PPID родительского процесса;
-x − отображает информацию о системных процессах
и процессах демонах.
Защита информации в UNIX. Процессы.
Защита информации в UNIX. Процессы.
Войдя в систему под учетной записью обычного
пользователя, запустим команду passwd, а на другой
консоли − команду ps al:
Хотя команду passwd запустил обычный пользователь,
UID=0, следовательно, процесс обладает правами rootадминистратора.
Поле PPID=607. Такой идентификатор имеет
командный интерпретатор sh из которого и была
запущена команда passwd.
Защита информации в UNIX. Процессы.
Новый процесс в UNIX создается путем пары вызовов
fork() и exec().
Системный вызов fork() создает новый процесс,
который является точной копией текущего. Он
наследует все открытые файлы родительского
процесса, сегмент данных и продолжает свое
выполнение с той же точки, что и родительский
процесс.
Для запуска новой программы, процесс должен
выполнить системный вызов exec(). При этом новый
процесс не порождается, а исполняемый код процесса
полностью замещается кодом запускаемой программы.
Защита информации в UNIX. Процессы.
if (fork() == 0)
exec(“/bin/ee”, “/etc/passwd”, 0);
Вызов fork() возвращает в родительский процесс
идентификатор дочернего, а в дочерний всегда ноль.
Рассмотрим эту схему на примере. Пользователь,
работая в командном режиме, запускает команду ls.
Защита информации в UNIX. Процессы.
Защита информации в UNIX. Процессы.
Возможны ситуации, когда достаточно одного вызова
fork() без exec(). В этом случае код родительского
процесса должен содержать логическое ветвление
для родительского и дочернего процесса:
if ( fork()==0 )
{
код дочернего процесса
}
else
{
код родительского процесса
}
Защита информации в UNIX. Процессы.
Пользователь может управлять только теми
процессами, владельцем которых он является.
Администратор может управлять всеми процессами в
системе.
Чтобы запустить программу с приоритетом, отличным
от обычного, используется команда nice:
nice value prog
nice -5 ee
− запускает редактор ee с
приоритетом увеличенным на 5 единиц («дружелюбие»
по отношению к другим процессам уменьшено на 5
единиц).
nice +7 ee
− запускает редактор ee с
приоритетом уменьшенным на 5 единиц.
Защита информации в UNIX. Процессы.
Для запущенных программ приоритет меняется
командой renice:
renice value PID
renice 7 735
− задает nice value = 7,
renice -20 735 − задает nice value = -20
(максимальный приоритет).
Защита информации в UNIX. Процессы.
Сигналы являются способом передачи от одного
процесса другому или от ядра OS уведомлений о
возникновении определенного события.
Например, если процесс производит деление на ноль,
ядро посылает сигнал FPE, а при нажатии
<Ctrl>+<c> сигнал INT.
Послать сигнал процессу можно с помощью команды
kill:
kill –SIG PID
Защита информации в UNIX. Процессы.
При получении сигнала процесс имеет три варианта
действий:
• Игнорирует сигнал. Не следует игнорировать
сигналы, вызванные аппаратной частью. Например,
при делении на ноль или ссылке на недопустимую
область памяти. Дальнейшее поведение
программы может оказаться непредсказуемым.
• Требует действий по умолчанию. Обычно это
сводится к завершению процесса.
• Перехватывает и обрабатывает сигнал. Например,
перехватывая сигнал INT, процесс может удалить
временные файлы и выполнить другие
необходимые для завершения операции, другими
словами достойно подготовится к «смерти».
Защита информации в UNIX. Процессы.
Сигналы KILL и STOP нельзя ни перехватить, ни
игнорировать.
По умолчанию команда kill посылает сигнал TERM.
Действием по умолчанию для него является
завершение процесса с записью всех буферизованных
данных. Такой сигнал посылается всем текущим
процессам при завершении работы по командам
reboot, halt, shutdown.
Иногда процесс продолжает существовать и после
посылки сигнала TERM, тогда применяют более жесткое
средство − сигнал KILL. Посылка такого сигнала
означает немедленное и неизбежное завершение
процесса.
Защита информации в UNIX. Процессы.
Уничтожение родительского процесса приведет к
завершению и всех дочерних. Уничтожение login shell
автоматически приведет к завершению сеанса работы
данного пользователя и выведет приглашение к
повторной авторизации.
Бывают случаи, когда команда kill KILL не приводит
к уничтожению процесса. Это имеет место для
процессов зомби. Фактически процесса как такого не
существует, осталась лишь запись в системной таблице
процессов, поэтому удалить его можно только
перезапуском системы.
Зомби в небольших количествах не представляют
опасности, но если их много, то это может привести к
переполнению таблицы процессов.
Download