К.В. Звонарев Программно-аппаратные средства обеспечения информационной безопасности ТЕМА ЛЕКЦИИ Защита информации в 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 не приводит к уничтожению процесса. Это имеет место для процессов зомби. Фактически процесса как такого не существует, осталась лишь запись в системной таблице процессов, поэтому удалить его можно только перезапуском системы. Зомби в небольших количествах не представляют опасности, но если их много, то это может привести к переполнению таблицы процессов.