Форма входа

Логин:
Пароль:

Поиск

Наши координаты

Телефон:
+7 (913) 229 5479
Адрес:
г. Барнаул
пр. Строителей, 16, оф. 613
Почтовый адрес:
656067, Алтайский край, г.Барнаул, 67 отделение связи,
а/я 4180
E-mail:
support@oit-company.ru

Наши партнёры





Среда, 20.09.2017, 01:27
Приветствуем Вас Гость
Регистрация | Вход | RSS

ОТДЕЛ
ИНФОРМАЦИОННЫХ
ТЕХНОЛОГИЙ
 
Каталог статей


Главная » Статьи » Интересные статьи

Контроль за состоянием машин учащихся средствами Linux: Часть 2. Выполнение контролирующих действий на удаленной машине
Источник developerWorks Россия
Татьяна Василькова, ведущий инженер, Научно-исследовательский институт средств автоматизации

Описание:  В настоящей статье будут рассмотрены часто возникающие задачи такого рода, а также стандартные средства операционной системы Linux, которые можно использовать для решения этих задач.

Дата:  16.02.2010
Уровень сложности:  средний
Комментарии:  

1 star2 stars3 stars4 stars5 stars Средний показатель рейтинга (основанный на 49 голосов)

 

В первой статье серии речь шла о принципах и задачах мониторинга рабочих мест, а также о технологии VNC и ее возможностях с точки зрения решения этих задач. Контроль за состоянием рабочих мест учащихся подразумевает не только наблюдение, но и выполнение неких действий непосредственно на машинах класса. В настоящей статье будут рассмотрены часто возникающие задачи такого рода, а также стандартные средства операционной системы Linux, которые можно использовать для решения этих задач.

Начнем с рассмотрения способов подключения к машине пользователя. Использование технологии vnc, работа с которой была рассмотрена в предыдущей статье, удобно, но требует достаточно сложной установки и настройки реализующих ее программных средств. Можно попадать на машины учащихся и другим способом – путем подключения по протоколу ssh.

1. 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 раза: теперь нужно подобрать не только пароль, но и имя пользователя.


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:

[root@test ~]# ps -a -f
UID PID PPID C STIME TTY TIME CMD
Root 4638 4618 0 09:28 pts/1 00:00:00 /usr/bin/mc -P
Root 4789 4767 0 09:35 pts/4 00:00:00 /usr/bin/mc -P
root 4837 4817 0 09:46 pts/6 00:00:00 /usr/bin/mc
root 4965 4948 0 09:51 pts/9 00:00:00 su oracle
oracle 4966 4965 0 09:51 pts/9 00:00:00 bash
root 5011 4966 0 09:52 pts/9 00:00:00 su root
root 5014 5011 0 09:53 pts/9 00:00:00 bash
root 5047 5014 0 09:53 pts/9 00:00:00 su oracle
oracle 5048 5047 0 09:53 pts/9 00:00:00 bash
root 5112 5048 0 10:50 pts/9 00:00:00 su root
root 5114 5112 0 10:51 pts/9 00:00:00 bash
root 5148 5131 0 10:51 pts/10 00:00:00 vi 1.txt
root 5190 5114 0 10:58 pts/9 00:00:00 ps -a -f

В столбцах содержится следующая информация:

  • UID: идентификатор пользователя;
  • PID: идентификатор процесса;
  • PPID: идентификатор родительского процесса;
  • C: приоритет процесса, используемый планировщиком задач;
  • STIME: время старта процесса;
  • TTY: терминал, с которым связан данный процесс;
  • TIME: общее время работы процесса;
  • CMD: команда, запустившая данный процесс.

Удобно использовать команду ps в сочетании с less, чтобы просматривать вывод в страничном режиме:

[root@test ~]# ps -a | less

При использовании команды ps следует помнить о нескольких важных моментах. Во-первых, пока вы изучаете результаты ее выполнения, ситуация постоянно изменяется. Во-вторых, возможно изменение вывода команды взломщиком, желающим скрыть следы своего пребывания на машине в виде посторонних процессов.

Команда top выводит процессы системы и дополнительную информацию как о каждом из них, так и о загрузке ресурсов машины в целом:

top - 11:31:59 up 4:00, 7 users, load average: 1.57, 1.59, 1.37
Tasks: 103 total, 2 running, 101 sleeping, 0 stopped, 0 zombie
Cpu(s):5.0% us, 10.6% sy, 0.0% ni, 84.1% id, 0.2% wa, 0.1% hi, 0.0% si
Mem: 660712k total, 360840k used, 299872k free, 30108k buffers
Swap: 2048276k total, 0k used, 2048276k free, 222092k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5201 root 25 0 2608 1024 788 R 93.4 0.2 30:23.23 top
1 root 16 0 2596 548 468 S 0.0 0.1 0:00.64 init
2 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
3 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftir/0
4 root 5 -10 0 0 0 S 0.0 0.0 0:00.11 events/0
5 root 5 -10 0 0 0 S 0.0 0.0 0:00.01 khelper
6 root 15 -10 0 0 0 S 0.0 0.0 0:00.00 kacpid
19 root 5 -10 0 0 0 S 0.0 0.0 0:00.00 kblockd/0
20 root 15 0 0 0 0 S 0.0 0.0 0:00.00 khubd
37 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pdflush
38 root 15 0 0 0 0 S 0.0 0.0 0:00.30 pdflush
39 root 25 0 0 0 0 S 0.0 0.0 0:00.00 kswapd0
40 root 14 -10 0 0 0 S 0.0 0.0 0:00.00 aio/0
186 root 25 0 0 0 0 S 0.0 0.0 0:00.00 kseriod
424 root 24 0 0 0 0 S 0.0 0.0 0:00.00 scsi_eh_0
438 root 9 -10 0 0 0 S 0.0 0.0 0:00.00 ata/0
439 root 9 -10 0 0 0 S 0.0 0.0 0:00.00 ata_aux
447 root 15 0 0 0 0 S 0.0 0.0 0:00.83 kjournald
1678 root 6 -10 2992 444 360 S 0.0 0.1 0:00.08 udevd
2195 root 6 -10 0 0 0 S 0.0 0.0 0:00.00 kauditd
2514 root 15 0 0 0 0 S 0.0 0.0 0:00.00 kjournald
2958 rpc 15 0 2384 540 444 S 0.0 0.1 0:00.00 portmap

Преимущество использования команды 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 секунд.


3. Часто встречающиеся задачи

В завершение рассмотрим несколько часто встающих перед администратором класса задач по мониторингу состояния машин учащихся.

  1. Поиск и завершение запрещенного процесса

    Для того чтобы установить, запущен ли на машине учащегося интересующий нас процесс (например, чат), выполним поиск по результатам команды 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 и убедимся в успешном результате:

    [root@test ~]# kill 5384
    [root@test ~]# ps x | grep chat
    5395 pts/8 R+ 0:00 grep chat

  2. Мониторинг загрузки ресурсов

    Для получения информации о загрузке аппаратных ресурсов машины учащегося как нельзя лучше подходят команды top и df. C помощью первой из них можно решить и предыдущую задачу: обнаружив в списке процессов запрещенный, администратор нажимает клавишу k и вводит номер процесса, который нужно завершить.

  3. Просмотр файлов логов

    Лог-файлы операционной системы в целом и отдельных программ могут дать хорошее представление о состоянии машины учащегося. Журналы операционной системы, как правило, находятся в каталоге /var/log и распределены по нескольким файлам в соответствии с настройками службы аудита syslogd.

    Администратор должен просматривать логи на машинах учащихся регулярно с целью выявления возможных неполадок в работе операционной системы и отдельных приложений. Расследование инцидентов и диагностика проблем также невозможны без анализа данных аудита.

    В некоторых случаях может понадобиться в реальном времени наблюдать за поступающими в тот или иной журнальный файл событиями. Для этого удобно использовать команду tail, запустив ее с параметром -f (follow).

    [root@test ~]# tail -15 [-f] /var/log/messages 

    Для анализа логов созданы специальные программы мониторинга, такие как logcheck, logwatch. Об этих средствах речь пойдет в следующей статье.


Заключение

В этой статье мы рассмотрели задачи контроля состояния рабочих мест, решение которых требует «нахождения» администратора непосредственно на удаленной машине, пусть и через удаленное подключение. Используя стандартные команды операционной системы Linux, администратор имеет возможность получить картину происходящего на рабочем месте пользователя. Однако такой мониторинг не может быть признан достаточно эффективным, если речь идет не о двух-трех узлах, подлежащих мониторингу, а о целом классе.

Необходимо иметь возможность централизованно получать информацию о состоянии процессов на машинах. Решить такую задачу можно, например, создав в единой точке центральный журнал аудита и применив к нему средства анализа данных аудита. О том, как создать такую систему, речь пойдет в следующей статье.


Об авторе

Татьяна Василькова - ведущий инженер Научно-исследовательского института средств автоматизации (Минск, Республика Беларусь). Основная область профессиональных интересов – защита информации в информационных системах, в том числе, программные средства безопасности с открытым исходным кодом. Имеет степень магистра технических наук.


...читать дальше

Категория: Интересные статьи | Добавил: sashacd (17.02.2010)
Просмотров: 878 | Комментарии: 1 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Имя *:
Email *:
Код *:

Copyright ООО "Отдел Информационных Технологий" © 2017