LINUX-сервер пошаговые инструкции инсталляции и настройки - Бруй В. В. , Карлов С. В
..pdfГлава 19. Snort – программное обеспечение для обнаружения попыток вторжения |
251 |
предписывает подключить файл classification.config.
Шаг 2
Для запуска и остановки Snort создайте файл /etc/init.d/snort, содержащий следующие стро-
ки:
#!/bin/bash
#This shell script takes care of starting and stopping the snort IDS daemon.
#chkconfig: 2345 40 60
#description: Snort is a lightweight network intrusion detection tool that \
# |
currently detects more than |
1100 host and network \ |
# |
vulnerabilities, portscans, |
backdoors, and more. |
#Source function library.
. /etc/init.d/functions
#Source networking configuration.
. /etc/sysconfig/network
#Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
# Specify your network interface here INTERFACE=eth0
RETVAL=0
prog="Snort"
start() {
echo -n $"Starting $prog: "
daemon /usr/bin/snort -A fast -u snort -g snort -b -s -z -d -D \ -i $INTERFACE -c /etc/snort/snort.conf
RETVAL=$? echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/snort return $RETVAL
}
stop() {
echo -n $"Shutting down $prog: " killproc snort
RETVAL=$? echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/snort return $RETVAL
}
# See how we were called. case "$1" in
start)
start
;;
stop)
stop
;;
status)
status snort
;;
restart) stop start
;;
252 |
Часть 4. Программное обеспечение для ограничения доступа к серверу... |
condrestart)
[ -f /var/lock/subsys/snort ] && restart
;;
*)
echo $"Usage: $prog {start|stop|status|restart|condrestart}" exit 1
esac
exit $RETVAL
Шаг 3
Установите права доступа к файлу, назначьте его владельцем пользователя root и создайте соответствующие ссылки:
[root@drwalbr /]# chmod 700 /etc/init.d/snort [root@drwalbr /]# chown 0.0 /etc/init.d/snort
Если вы хотите, чтобы Snort автоматически запускался при загрузке системы, создайте соответствующие ссылки:
[root@drwalbr /]# chkconfig --add sshd [root@drwalbr /]# chkconfig --level 2345 sshd on
Тестирование Snort
Шаг 1 Запустите Snort:
[root@drwalbr snort]# /etc/init.d/snort start
Запускается Snort: eth0: Promiscuous mode enabled.
[ОК]
Шаг 2
Просканируйте какую-нибудь систему в локальной сети с помощью сканера портов, например, Nmap (http://www.insecure.org/) в режиме определения типа операционной системы:
[root@drwalbr snort]# nmap |
-O 192.168.10.5 |
||
eth0: Promiscuous mode |
enabled. |
||
… |
|
|
|
eth0: Promiscuous mode |
enabled. |
||
Starting nmap V. 2.54BETA34 ( www.insecure.org/nmap/ ) |
|||
Insufficient responses |
for |
TCP sequencing (3), OS detection may be less |
|
accurate |
|
|
|
Insufficient responses |
for |
TCP sequencing (3), OS detection may be less |
|
accurate |
|
|
|
Insufficient responses |
for |
TCP sequencing (3), OS detection may be less |
|
accurate |
|
|
|
Interesting ports on |
(192.168.10.5): |
||
(The 1548 ports scanned but not shown below are in state: closed) |
|||
Port |
State |
Service |
|
21/tcp |
open |
ftp |
|
22/tcp |
filtered |
ssh |
|
25/tcp |
filtered |
smtp |
|
80/tcp |
open |
http |
|
110/tcp |
filtered |
pop-3 |
|
3000/tcp |
open |
ppp |
|
3306/tcp |
filtered |
mysql |
|
6667/tcp |
open |
irc |
|
No exact OS matches for host (If you know what OS is running on it, see http://www.insecure.org/cgi-bin/nmap-submit.cgi).
TCP/IP fingerprint: SInfo(V=2.54BETA34%P=i386-asplinux-linux- gnu%D=4/10%Time=3E953AC4%O=21%C=1) T1(Resp=Y%DF=N%W=E000%ACK=S++%Flags=AS%Ops=M) T2(Resp=N)
T3(Resp=N)
T4(Resp=N)
Глава 19. Snort – программное обеспечение для обнаружения попыток вторжения |
253 |
T5(Resp=Y%DF=N%W=0%ACK=S++%Flags=AR%Ops=)
T6(Resp=Y%DF=N%W=0%ACK=O%Flags=R%Ops=)
T7(Resp=Y%DF=N%W=0%ACK=S%Flags=AR%Ops=)
PU(Resp=Y%DF=N%TOS=0%IPLEN=38%RIPTL=148%RID=E%RIPCK=E%UCK=0%ULEN=134%DAT=
E)
Nmap run completed -- 1 IP address (1 host up) scanned in 52 seconds
ЗАМЕЧАНИЕ Нужно осуществлять сканирование систем, не указанных в строке: preprocessor portscan-ignorehosts: 212.45.28.122 212.45.28.123 файла /etc/snort/snort.conf.
Шаг 3
В файле /var/log/snort/portscan.log:
Apr 10 13:32:33 192.168.2.99:39192 -> 192.168.10.5:21 SYN ******S*
Apr 10 13:32:35 192.168.2.99:39197 -> 192.168.10.5:21 SYN ******S*
Apr 10 13:34:28 192.168.2.99:37780 -> 192.168.10.5:2035 SYN ******S*
Apr 10 13:34:28 192.168.2.99:38239 -> 192.168.10.5:657 SYN ******S*
Apr 10 13:34:28 192.168.2.99:51081 -> 192.168.10.5:329 SYN ******S*
Apr 10 13:34:28 192.168.2.99:52548 -> 192.168.10.5:1516 SYN ******S*
Apr 10 13:34:28 192.168.2.99:59773 -> 192.168.10.5:1472 SYN ******S*
Apr 10 13:34:28 192.168.2.99:40720 -> 192.168.10.5:314 SYN ******S*
Apr 10 13:34:28 192.168.2.99:38440 -> 192.168.10.5:388 SYN ******S*
Apr 10 13:34:28 192.168.2.99:54059 -> 192.168.10.5:586 SYN ******S*
Apr 10 13:34:28 192.168.2.99:54856 -> 192.168.10.5:613 SYN ******S*
…
Apr 10 13:34:38 192.168.2.99:35300 -> 192.168.10.5:21 SYN *2****S* Apr 10 13:34:40 192.168.2.99:35301 -> 192.168.10.5:21 NULL ********
Apr 10 13:34:38 192.168.2.99:35302 -> 192.168.10.5:21 NMAPID **U*P*SF Apr 10 13:34:38 192.168.2.99:35304 -> 192.168.10.5:1 SYN ******S*
Apr 10 13:34:38 192.168.2.99:35306 -> 192.168.10.5:1 XMAS **U*P**F Apr 10 13:34:40 192.168.2.99:35302 -> 192.168.10.5:21 NMAPID **U*P*SF Apr 10 13:34:44 192.168.2.99:35299 -> 192.168.10.5:21 SYN ******S*
Apr 10 13:34:46 192.168.2.99:35300 -> 192.168.10.5:21 SYN *2****S* Apr 10 13:34:48 192.168.2.99:35301 -> 192.168.10.5:21 NULL ********
Apr 10 13:34:46 192.168.2.99:35302 -> 192.168.10.5:21 NMAPID **U*P*SF Apr 10 13:34:46 192.168.2.99:35304 -> 192.168.10.5:1 SYN ******S*
Apr 10 13:34:46 192.168.2.99:35306 -> 192.168.10.5:1 XMAS **U*P**F Apr 10 13:34:48 192.168.2.99:35302 -> 192.168.10.5:21 NMAPID **U*P*SF Apr 10 13:34:52 192.168.2.99:35297 -> 192.168.10.5:21 SYN ******S*
Apr 10 13:34:55 192.168.2.99:35300 -> 192.168.10.5:21 SYN ******S*
Apr 10 13:34:56 192.168.2.99:35301 -> 192.168.10.5:21 NULL ********
Apr 10 13:34:55 192.168.2.99:35302 -> 192.168.10.5:21 NMAPID **U*P*SF Apr 10 13:34:55 192.168.2.99:35304 -> 192.168.10.5:1 SYN ******S*
Apr 10 13:34:55 192.168.2.99:35306 -> 192.168.10.5:1 XMAS **U*P**F Apr 10 13:34:56 192.168.2.99:35302 -> 192.168.10.5:21 NMAPID **U*P*SF Apr 10 13:35:00 192.168.2.99:35298 -> 192.168.10.5:21 SYN ******S*
вы увидите информацию о пакетах, с помощью которых Nmap пытался обнаружить открытые порты и тип операционной системы на сервере 192.168.10.5.
Выполнение Snort в среде chroot-jail
Потенциальные уязвимости Snort, как и любого другого программного обеспечения, могут использоваться для реализации атак на вашу систему. Поэтому для повышения безопасности системы рекомендуется выполнять Snort в окружении chroot-jail. Для этого необходимо выполнить следующие операции.
Шаг 1
Создайте каталоги для размещения Snort в окружении chroot-jail, назначьте владельцем второго из них пользователя snort:
[root@drwalbr /]# mkdir -p /chroot/snort/etc/snort [root@drwalbr /]# mkdir -p /chroot/snort/var/log/snort
[root@drwalbr /]# chown -R snort.snort /chroot/snort/var/log/snort
254 |
Часть 4. Программное обеспечение для ограничения доступа к серверу... |
ЗАМЕЧАНИЕ Для повышения безопасности вашей системы каталог /chroot/snort/ рекомендуется размещать на отдельном разделе диска.
Шаг 2
Переместите конфигурационные файлы Snort в соответствующие подкаталоги окружения chroot-jail:
[root@drwalbr /]# mv /etc/snort/* /chroot/snort/etc/snort [root@drwalbr /]# chmod 0644 /chroot/snort/etc/snort/*
Шаг 3
Для запуска и остановки Snort в окружении chroot-jail создайте файл /etc/init.d/snort, содержащий следующие строки:
#!/bin/bash
#This shell script takes care of starting and stopping the snort IDS daemon.
#chkconfig: 2345 40 60
#description: Snort is a lightweight network intrusion detection tool that \
# |
currently detects more than |
1100 host and network \ |
# |
vulnerabilities, portscans, |
backdoors, and more. |
#Source function library.
. /etc/init.d/functions
#Source networking configuration.
. /etc/sysconfig/network
#Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
# Specify your network interface here INTERFACE=eth0
RETVAL=0
prog="Snort"
start() {
echo -n $"Starting $prog: "
daemon /usr/bin/snort -A fast -u snort -g snort -b -s -z -d -D \ -i $INTERFACE -c /etc/snort/snort.conf -t /chroot/snort/
RETVAL=$? echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/snort return $RETVAL
}
stop() {
echo -n $"Shutting down $prog: " killproc snort
RETVAL=$? echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/snort return $RETVAL
}
# See how we were called. case "$1" in
start)
start
;;
stop)
stop
Глава 19. Snort – программное обеспечение для обнаружения попыток вторжения |
255 |
;;
status)
status snort
;;
restart) stop start
;;
condrestart)
[ -f /var/lock/subsys/snort ] && restart
;;
*)
echo $"Usage: $prog {start|stop|status|restart|condrestart}" exit 1
esac
exit $RETVAL
и установите права доступа к файлу:
[root@drwalbr /]# chmod 700 /etc/init.d/snort
Шаг 4 Запустите Snort:
[root@drwalbr /]# /etc/init.d/snort start
Запускается Snort: eth0: Promiscuous mode enabled. [ОК]
Шаг 5
Проверьте, запущен ли Snort, и определите соответствующий номер процесса:
[root@drwalbr /]# ps -ax | grep snort
6171 ? R 0:02 /usr/bin/snort -A fast -u snort -g snort -b -s -z -d
Шаг 6
Проверьте, запущен ли Snort в окружении chroot-jail:
[root@drwalbr /]# ls -la /proc/6171/root/
Если вы получите вывод вида (отображающий ссылку на корневой каталог среды chroot-jail):
lrwxrwxrwx |
1 |
root |
root |
0 Апр 23 21:01 /proc/6171/root - |
> /chroot/snort |
|
|
|
то Snort корректно работает в окружении chroot-jail.
Если вы получите вывод вида (отображающий корневой каталог системы, на которой он установлен):
итого 124
drwxr-xr-x |
19 |
root |
root |
1024 |
Апр 23 20:01 . |
|||
drwxr-xr-x |
19 |
root |
root |
1024 |
Апр 23 20:01 .. |
|||
-rw-r--r-- |
1 |
root |
root |
0 |
Апр 23 20:01 |
.autofsck |
||
drwxr-xr-x |
2 |
root |
root |
2048 |
Апр 22 12:13 |
bin |
||
drwxr-xr-x |
5 |
root |
root |
1024 |
Апр |
5 |
17:31 |
boot |
drwxr-xr-x |
5 |
root |
root |
1024 |
Апр 15 18:57 |
chroot |
||
drwxr-xr-x |
19 |
root |
root |
82944 |
Апр 23 20:01 |
dev |
||
drwxr-xr-x |
28 |
root |
root |
3072 |
Апр 23 20:01 |
etc |
||
drwxr-xr-x |
37 |
root |
root |
4096 |
Апр 23 19:02 |
home |
||
drwxr-xr-x |
2 |
root |
root |
1024 |
Июн 21 |
2001 |
initrd |
|
drwxr-xr-x |
7 |
root |
root |
3072 |
Апр |
5 |
14:16 |
lib |
drwx------ |
2 |
root |
root |
12288 |
Апр |
5 |
03:10 |
lost+found |
drwxr-xr-x |
5 |
root |
root |
1024 |
Апр |
4 |
23:20 |
mnt |
drwxr-xr-x |
2 |
root |
root |
1024 |
Авг 23 |
1999 |
opt |
|
dr-xr-xr-x |
45 |
root |
root |
0 |
Апр 24 |
2003 |
proc |
|
drwxr-x--- |
5 |
root |
root |
1024 |
Апр 22 12:05 |
root |
||
drwxr-xr-x |
2 |
root |
root |
3072 |
Апр |
4 |
23:23 |
sbin |
drwxrwxrwt |
4 |
root |
root |
2048 |
Апр 23 20:01 |
tmp |
||
drwxr-xr-x |
15 |
root |
root |
4096 |
Апр |
7 |
21:30 |
usr |
drwxr-xr-x |
16 |
root |
root |
1024 |
Апр 16 20:29 |
var |
то Snort работает в обычной среде и, в принципе, может быть использован для реализации атаки на систему вцелом.
256 |
Часть 4. Программное обеспечение для ограничения доступа к серверу... |
Глава 20
ucspi-tcp – программное обеспечение для запуска обычных программ в режиме сервера
В этой главе:
1. Ограничения и допущения
2.Пакеты
3.Компиляция, оптимизация и инсталляция ucspi-tcp
4.Использование ucspi-tcp
Глава 20. ucspi-tcp – программное обеспечение для запуска обычных программ в режиме сервера 257
Программное обеспечение ucspi-tcp (UNIX Client-Server Program Interface), разработанное Д. Берн-
штейном (D.R. Bernstein), содержит пакет программ. Эти программы используются при создании различных клиент-серверных приложений и позволяют запускать в режиме сервера различные программы, которые не могут быть запущены в режиме службы. Программы tcpserver и tcpclient, наиболее часто используемые из данного пакета, являются более быстродействующей и безопасной альтернативой для таких широко известных программ, как inet и xinetd.
При этом программа tcpserver позволяет ограничивать максимальное количество одновременных соединений, ограничивать доступ к запущенной службе в соответствии с заданными правилами, выполнять проверку легитимности IP-адреса через DNS и регистрировать соединения в файле регистрации.
Ограничения и допущения
Исходные коды находятся в каталоге /var/tmp.
Все операции выполняются пользователем с учетной записью root. Используется дистрибутив ASPLinux 7.3 (Vostok).
Перекомпиляция ядра не требуется.
Процедуры, описанные в этой главе, могут оказаться применимыми для других версий ядра и дистрибутивов Linux, но авторы это не проверяли.
Пакеты
Последующие рекомендации основаны на информации, полученной с домашней страницы проекта ucspi-tcp по состоянию на 11.05.2003. Регулярно посещайте домашнюю страницу проекта
http://cr.yp.to/ucspi-tcp/install.html и отслеживайте обновления.
Исходные коды ucspi содержатся в архиве ucspi-tcp-version.tar.gz (последняя доступная на момент написания главы стабильная версия ucspi-tcp-0.88.tar.gz).
Компиляция, оптимизация и инсталляция ucspi-tcp
Для установки ucspi-tcp необходимо выполнить следующие операции.
Шаг 1 Осуществите проверку подлинности имеющегося в вашем распоряжении архива с исходными кодами
с использованием процедур, описанных в шаге 1 радела «Компиляция, оптимизация и инсталляция
OpenSSL» главы 12.
Шаг 2
Распакуйте архив с исходными кодами ucspi-tcp в каталоге /var/tmp:
[root@drwalbr /]# cd /var/tmp/ [root@drwalbr tmp]# tar xzpf
и перейдите во вновь созданный каталог, содержащий исходные коды ucspi-tcp:
[root@drwalbr tmp]# cd ucspi-tcp-0.88/
Шаг 3
В файле /var/tmp/ucspi-tcp-0.88/conf-home замените строку:
/usr/local
на:
/usr
Шаг 4
В файле /var/tmp/ucspi-tcp-0.88/conf-cc замените строку: gcc -О2
на:
gcc -O2 -march=i686 -funroll-loops
Шаг 5
Откомпилируйте исходные коды, проинсталлируйте файлы ucspi-tcp, создайте и сохраните список инсталлированных файлов:
[root@drwalbr ucspi-tcp-0.88]# make
[root@drwalbr ucspi-tcp-0.88]# find /* > /root/ucspi1 [root@drwalbr ucspi-tcp-0.88]# make setup check [root@drwalbr ucspi-tcp-0.88]# chmod 0510 /usr/bin/tcpserver
258 |
Часть 4. Программное обеспечение для ограничения доступа к серверу... |
[root@drwalbr ucspi-tcp-0.88]# chmod 0510 /usr/bin/tcpclient [root@drwalbr ucspi-tcp-0.88]# find /* > /root/ucspi2 [root@drwalbr ucspi-tcp-0.88]# diff /root/ucspi1 /root/ucspi2 >
/root/ucspi.installed
[root@drwalbr ucspi-tcp-0.88]# mv /root/ucspi.installed
/very_reliable_place/ucspi.installed.YYYYMMDD
Шаг 6
Удалите архив и каталог с исходными кодами ucspi-tcp:
[root@drwalbr /]# cd /var/tmp/
[root@drwalbr tmp]# rm -rf ucspi-tcp-0.88/ [root@drwalbr tmp]# rm -f ucspi-tcp-0.88.tar.gz
Использование ucspi-tcp
Как уже отмечалось, программы из пакета ucspi-tcp могут быть использованы для запуска ряда служб. Подробные инструкции по их использованию приведены в документации на соответствующее программное обеспечение. В этой главе рассматриваются простейшие варианты использования программы tcpserver, носящие иллюстративно-ознакомительный характер.
Запуск службы с помощью программы tcpserver осуществляется с использованием команды:
[root@drwalbr /]# tcpserver opts host port /path/prog
где:
opts – набор опций;
host – имя системы, на которой требуется запустить службу; port – номер порта, на котором будет выполняться служба; prog – полный путь и имя исполняемого файла службы.
Опция -c используется для определения максимального количества одновременных соединений, обрабатываемых tcpserver. Значение по умолчанию – 40 . Т. е. не более 40 одновременных подключений могут обрабатываться tcpserver. Очевидно, что для высокопроизводительного и сильно загруженного сервера необходимо увеличить это значение.
Опции -u и -g используется для определения пользователя и соответствующей ему группы пользователей, от имени которого должна быть запущена соответствующая служба.
Опции –D, -H, -R и -I используются для повышения производительности системы. Для запуска vsFTPd FTP-сервера используется команда:
[root@drwalbr /]# tcpserver -c 4096 –DRHl localhost 0 21 /usr/sbin/vsftpd
В результате выполнения команды будет запущен FTP-сервер, ожидающий соединений на 21 порту всех сетевых интерфейсов локальной системы. При этом максимально возможное число устанавливаемых одновременно соединений не должно превышать 4096.
Для запуска ipop3d POP3-сервера используется команда:
[root@drwalbr /]# tcpserver -c 1024 –DRH1 localhost 195.2.72.152 110
/usr/sbin/ipop3d
В результате выполнения команды будет запущен POP3-сервер, ожидающий подключений на 110 порту сетевого интерфейса с IP-адресом 195.2.72.152. При этом максимально возможное число одновременно устанавливаемых соединений не должно превышать 1024.
Глава 21. xinetd – программное обеспечение для запуска обычных программ в режиме сервера |
259 |
Глава 21
xinetd – программное обеспечение для запуска обычных программ в режиме сервера
В этой главе:
1. Ограничения и допущения
2.Пакеты
3.Инсталляция с помощью rpm-пакетов
4.Компиляция, оптимизация и инсталляция xinetd
5.Конфигурирование xinetd
6.Конфигурационный файл /etc/xinetd.conf
7.Каталог /etc/xinetd.d
8.Конфигурационный файл /etc/xinetd.d/pop3s
9.Конфигурационный файл /etc/xinet.d.d/time
10. Конфигурационный файл /etc/xinetd.d/chargen
11. Конфигурационный файл /etc/xinetd.d/echo
12. Конфигурационный файл /etc/xinetd.d/daytime
13. Конфигурационный файл /etc/xinetd.d/imaps
14. Файл инициализации /etc/init.d/xinetd
260 |
Часть 4. Программное обеспечение для ограничения доступа к серверу... |
Программа хinetd, так же как и программа tcpserver из пакета ucspi-tcp, предназначена для запуска приложений, которые не могут выполняться в режиме демона.
Данная программа обладает следующими возможностями:
•обеспечивает механизмы управления доступом;
•предотвращает атаки отказа в обслуживании;
•обеспечивает возможность регистрации большого количества пользователей;
•обеспечивает повременной доступ службам;
•ограничивает число запускаемых серверов.
К сожалению, xinetd недостаточно корректно работает с рядом служб, например, ftp и ssh. Поэтому авторы рекомендуют использовать для запуска служб, которые не могут выполняться в режиме сервера, программы из пакета ucspi-tcp, обладающие большим быстродействием, надежностью и приемлемыми показателями безопасности.
Желающие протестировать xinetd могут воспользоваться рекомендациями настоящей главы.
Ограничения и допущения
Исходные коды находятся в каталоге /var/tmp.
Все операции выполняются пользователем с учетной записью root. Используется дистрибутив ASPLinux 7.3 (Vostok).
Перекомпиляция ядра не требуется.
Процедуры, описанные в этой главе, могут оказаться применимыми для других версий ядра и дистрибутивов Linux, но авторы это не проверяли.
Пакеты
Последующие рекомендации основаны на информации, полученной с домашней страницы проекта xinetd по состоянию на 02.05.2003. Регулярно посещайте домашнюю страницу проекта http://www.xinetd.org/ и отслеживайте обновления.
Исходные коды xinetd содержатся в архиве xinetd-version.tar.gz (последняя доступная на момент написания главы стабильная версия xinetd-2.3.11.tar.gz).
Инсталляция с помощью rpm-пакетов
Если вы предпочитаете использование системы со стандартным ядром и программным обеспечением, установленным из rpm-пакетов, для установки или обновления пакета необходимо выполнить следующие операции.
ЗАМЕЧАНИЕ Авторы настоятельно рекомендуют устанавливать программное обеспечение из исходных кодов.
Шаг 1
Проверьте, установлен ли пакет программы xinetd с помощью следующей команды:
[root@drwalbr /]# rpm –iq xinetd
Шаг 2
В случае его отсутствия перейдите в каталог, где находится пакет xinetd-2.3.5- 1.asp.i386.rpm. Если вы в соответствии с рекомендациями главы 2 скопировали все пакеты, входящие в дистрибутив, в каталог /home/distrib, то выполните команду:
[root@drwalbr /]# cd /home/distrib
и установите:
[root@drwalbr distrib]# rpm –ihv xinetd-2.3.5-1.asp.i386.rpm
или обновите пакет:
[root@drwalbr distrib]# rpm –Uhv xinetd-2.3.5-1.asp.i386.rpm
После установки пакета перейдите к настройке программы.
Компиляция, оптимизация и инсталляция xinetd
Для установки xinetd из исходных кодов необходимо выполнить следующие операции.