Татьяна Василькова, ведущий инженер, Научно-исследовательский институт средств автоматизации
Татьяна
Василькова - ведущий инженер Научно-исследовательского института
средств автоматизации (Минск, Республика Беларусь). Основная область
профессиональных интересов – защита информации в информационных
системах, в том числе, программные средства безопасности с открытым
исходным кодом. Имеет степень магистра технических наук.
Описание: В настоящей статье будут рассмотрены
часто возникающие задачи такого рода, а также стандартные средства
операционной системы Linux, которые можно использовать для решения этих
задач.
Дата: 16.02.2010
Уровень сложности: средний
Комментарии:
Средний показатель рейтинга (основанный на 49 голосов)
В первой статье серии речь шла о принципах и задачах мониторинга
рабочих мест, а также о технологии VNC и ее возможностях с точки зрения
решения этих задач. Контроль за состоянием рабочих мест учащихся
подразумевает не только наблюдение, но и выполнение неких действий
непосредственно на машинах класса. В настоящей статье будут рассмотрены
часто возникающие задачи такого рода, а также стандартные средства
операционной системы Linux, которые можно использовать для решения этих
задач.
Начнем с рассмотрения способов подключения к машине пользователя.
Использование технологии vnc, работа с которой была рассмотрена в
предыдущей статье, удобно, но требует достаточно сложной установки и
настройки реализующих ее программных средств. Можно попадать на машины
учащихся и другим способом – путем подключения по протоколу ssh.
Технология ssh используется повсеместно и хорошо описана в множестве
как англоязычных, так и русскоязычных материалов (например, в этой статье, поэтому остановимся на общем принципе лишь кратко.
Клиенты ssh (программа ssh) подключаются к серверу программы (sshd)
по защищенному каналу, и после успешной аутентификации предоставляет
пользователю сеанс командной строки на удаленной машине. Для
аутентификации клиент использует пару специально сгенерированных
криптографических ключей или пару имя/пароль учетной записи
операционной системы удаленного компьютера.
Клиент ssh может быть запущен двумя способами: «ssh host» или «ssh
host command». На удаленной машине в первом случае запускается сеанс
командной строки, во втором – выполняется указанная команда.
Очень часто ssh используется злоумышленниками для проникновения на
удаленный компьютер путем подбора пароля учетной записи администратора
root. Чтобы сделать это невозможным, нужно выполнить на сервере ssh (в
нашем случае – на всех машинах учащихся) несколько настроек.
Во-первых, изменим стандартный порт в файле настроек /etc/ssh/sshd_config:
#Port 22 Port 2200
Понятно, что тот же порт теперь следует использовать в ssh-клиенте для подключения к этому серверу.
Во-вторых, запретим использование менее защищенной 1-й версии протокола:
#Protocol 2,1 Protocol 2
Наконец, запретим доступ к серверу с учетной записью root:
#PermitRootLogin yes PermitRootLogin no
Это отнюдь не лишает администратора возможности выполнять на
удаленной машине действия с правами полного администратора – нужно
будет только сменить учетную запись после подключения. Однако хакеру
такой запрет усложняет задачу фактически в 2 раза: теперь нужно
подобрать не только пароль, но и имя пользователя.
Итак, администратор класса находится на своем рабочем месте, но
открытый в его сеансе операционной системы Linux терминал командной
строки позволяет выполнять любые действия на машине учащегося. Точнее
говоря, пока не совсем любые. Для получения полного доступа нужно
сменить учетную запись при помощи команды su.
[ssh-user@test ~]# su root
Теперь можно запускать на исполнение команды Linux и наблюдать результаты в окне терминала.
Команда ps выдает информацию об активных процессах
на машине пользователя. Выводятся идентификатор процесса, идентификатор
терминала, истраченное к данному моменту время ЦП и имя команды. По
умолчанию информация дается только о процессах, ассоциированных с
данным терминалом:
[root@test ~]# ps PID TTY TIME CMD 4948 pts/9 00:00:00 bash 4965 pts/9 00:00:00 su 5011 pts/9 00:00:00 su 5014 pts/9 00:00:00 bash 5047 pts/9 00:00:00 su 5112 pts/9 00:00:00 su 5114 pts/9 00:00:00 bash 5130 pts/9 00:00:00 ps
Как правило, этой информации мало, поэтому пользуются опциями,
которые делятся на несколько групп: опции простого выбора, опции выбора
по списку, опции формата вывода, длинные опции, другие опции.
Полный перечень опций приведен в документации (введите man ps), а в
компактном виде будет выведен, например, в случае попытки выполнить
команду ps с неверными параметрами:
********* simple selection ********* ********* selection by list ********* -A all processes -C by command name -N negate selection -G by real group ID (supports names) -a all w/ tty except session leaders -U by real user ID (supports names) -d all except session leaders -g by session OR by effective group name -e all processes -p by process ID T all processes on this terminal -s processes in the sessions given a all w/ tty, including other users -t by tty g OBSOLETE -- DO NOT USE -u by effective user ID (supports names) r only running processes U processes for specified users x processes w/o controlling ttys t by tty *********** output format ********** *********** long options *********** -o,o user-defined -f full --Group --User --pid --cols --ppid -j,j job control s signal --group --user --sid --rows --info -O,O preloaded –o v virtual memory --cumulative --format --deselect -l,l long u user-oriented --sort --tty --forest --version -F extra full X registers --heading --no-heading --context ********* misc options ********* -V,V show version L list format codes f ASCII art forest -m,m,-L,-T,H threads S children in sum -y change -l format -M,Z security data c true command name -c scheduling class -w,w wide output n numeric WCHAN,UID -H process hierarchy
Например, чтобы вывести перечень всех процессов в полном формате, выполним команду ps с опциями -f и -a:
Удобно использовать команду ps в сочетании с less, чтобы просматривать вывод в страничном режиме:
[root@test ~]# ps -a | less
При использовании команды ps следует помнить о нескольких важных
моментах. Во-первых, пока вы изучаете результаты ее выполнения,
ситуация постоянно изменяется. Во-вторых, возможно изменение вывода
команды взломщиком, желающим скрыть следы своего пребывания на машине в
виде посторонних процессов.
Команда top выводит процессы системы и дополнительную информацию как о каждом из них, так и о загрузке ресурсов машины в целом:
Преимущество использования команды top, по сравнению с ps,
заключается в том, что после однократного ее выполнения результат
обновляется в реальном времени. Таким образом, администратор получает в
окне терминала монитор загрузки процессора, способный, к тому же,
принимать в интерактивном режиме управляющие команды:
Полезные интерактивные команды, которые можно использовать в top:
[Пробел] Немедленно обновить содержимое экрана;
[h] Вывести справку о программе;
[k] Уничтожить процесс. Программа запрашивает код процесса и сигнал, который будет ему послан;
[n] Изменить число отображаемых процессов. Нужно ввести число;
[u] Сортировать по имени пользователя;
[M] Сортировать по объёму используемой памяти;
[P] Сортировать по загрузке процессора.
Чтобы выйти из программы top, нужно нажать клавишу [q].
Команда df предназначена для контроля свободного
места на жестком диске. Для каждой файловой системы выводится общий
объем занимаемого дискового пространства, размер занятого и свободного
пространства, процент использования и точка монтирования:
[root@test ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda3 15425084 13788924 852592 95% / /dev/sda1 101086 11531 84336 13% /boot None 330356 0 330356 0% /dev/shm
Команду tail удобно использовать для просмотра
содержимого файлов, содержащих строки текстовой информации. Эта
команда, по сути, представляет собой фильтр, она считывает содержимое
указанного файла в соответствии с переданными параметрами:
tail +|- [счетчик] [l b c r] [-f] [имя_файла]
Параметры l, b, c указывают строки, блоки и символы соответственно, r копирует строки из файла в обратном порядке.
Аргумент "счетчик" определяет начальную точку в файле. Если перед
значением счетчика стоит +, то tail будет начинать вывод строки,
отстоящей на указанное количество строк от начала файла. При
отрицательном значении счетчика выводятся последние строки в файле,
число которых задается значением счетчика.
Опция -f позволяет в реальном времени наблюдать поступающие в файл
записи, так как запущенная с этой опцией команда tail повторно
считывает файл каждые 10 секунд.
В завершение рассмотрим несколько часто встающих перед администратором класса задач по мониторингу состояния машин учащихся.
Поиск и завершение запрещенного процесса
Для того чтобы установить, запущен ли на машине учащегося
интересующий нас процесс (например, чат), выполним поиск по результатам
команды ps, перенаправив результат ее выполнения на вход команды grep:
[root@test ~]# ps x | grep chat 5384 ? S 0:00 xchat 5386 ? S 0:00 xchat 5392 pts/8 R+ 0:00 grep chat
Наши подозрения оказались верны. Болтать в учебное время, понятное
дело, нельзя. Завершим запрещенный процесс, используя команду kill и
убедимся в успешном результате:
Для получения информации о загрузке аппаратных ресурсов машины
учащегося как нельзя лучше подходят команды top и df. C помощью первой
из них можно решить и предыдущую задачу: обнаружив в списке процессов
запрещенный, администратор нажимает клавишу k и вводит номер процесса,
который нужно завершить.
Просмотр файлов логов
Лог-файлы операционной системы в целом и отдельных программ могут
дать хорошее представление о состоянии машины учащегося. Журналы
операционной системы, как правило, находятся в каталоге /var/log и
распределены по нескольким файлам в соответствии с настройками службы
аудита syslogd.
Администратор должен просматривать логи на машинах учащихся
регулярно с целью выявления возможных неполадок в работе операционной
системы и отдельных приложений. Расследование инцидентов и диагностика
проблем также невозможны без анализа данных аудита.
В некоторых случаях может понадобиться в реальном времени наблюдать
за поступающими в тот или иной журнальный файл событиями. Для этого
удобно использовать команду tail, запустив ее с параметром -f (follow).
[root@test ~]# tail -15 [-f] /var/log/messages
Для анализа логов созданы специальные программы мониторинга, такие
как logcheck, logwatch. Об этих средствах речь пойдет в следующей
статье.
В этой статье мы рассмотрели задачи контроля состояния рабочих мест,
решение которых требует «нахождения» администратора непосредственно на
удаленной машине, пусть и через удаленное подключение. Используя
стандартные команды операционной системы Linux, администратор имеет
возможность получить картину происходящего на рабочем месте
пользователя. Однако такой мониторинг не может быть признан достаточно
эффективным, если речь идет не о двух-трех узлах, подлежащих
мониторингу, а о целом классе.
Необходимо иметь возможность централизованно получать информацию о
состоянии процессов на машинах. Решить такую задачу можно, например,
создав в единой точке центральный журнал аудита и применив к нему
средства анализа данных аудита. О том, как создать такую систему, речь
пойдет в следующей статье.
Татьяна
Василькова - ведущий инженер Научно-исследовательского института
средств автоматизации (Минск, Республика Беларусь). Основная область
профессиональных интересов – защита информации в информационных
системах, в том числе, программные средства безопасности с открытым
исходным кодом. Имеет степень магистра технических наук.