Перейти к тексту

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Вся введенная информация защищена.

  • Закрыть [x]

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

Вся введенная информация защищена.

  • Закрыть [x]

Контроль за состоянием машин учащихся средствами Linux: Часть 2. Выполнение контролирующих действий на удаленной машине

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

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

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


В первой статье серии речь шла о принципах и задачах мониторинга рабочих мест, а также о технологии 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, администратор имеет возможность получить картину происходящего на рабочем месте пользователя. Однако такой мониторинг не может быть признан достаточно эффективным, если речь идет не о двух-трех узлах, подлежащих мониторингу, а о целом классе.

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


Об авторе

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

Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Спасибо. Эта запись была помечена для модератора.


Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Сообщение о нарушении не было отправлено. Попробуйте, пожалуйста, позже.


developerWorks: вход


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Выберите ваше отображаемое имя

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

(Должно содержать от 3 до 31 символа.)


Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Оценить эту статью

Комментарии

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux
ArticleID=468500
ArticleTitle=Контроль за состоянием машин учащихся средствами Linux: Часть 2. Выполнение контролирующих действий на удаленной машине
publish-date=02162010
author1-email=wasilkova@gmail.com
author1-email-cc=

Теги

Help
Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Используйте ползунок, чтобы отразить больше или меньше тегов.

КнопкаПопулярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere).

Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).

Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Кнопка Популярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere). Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).