
- •4.1. Создание, изменение и удаление учётных записей
- •4.1.1. Введение
- •4.1.2. Добавление пользователя
- •4.1.3. Изменение параметров пользовательской учётной записи
- •4.1.4. Удаление учётной записи
- •6.1. Определение существующих установок tcp/ip
- •Комментарий
- •6.1.1. Ifconfig(8) — настройки сетевых интерфейсов
- •6.1.2. Netstat(1)
- •6.1.2.1. Таблица маршрутизации
- •6.1.2.2. Статистика
- •6.1.2.3. Работающие интернет сервисы и открытые сокеты
- •6.1.2.3.1. Открытие tcp соединения (тройное рукопожатие)
- •6.1.2.3.2. Закрытие tcp соединения
- •6.1.3. Route(8)
- •6.1.4. /Etc/resolv.Conf(5)
- •6.2.2.1. Изменение настроек физического уровня
- •6.2.2.2. Изменение настроек канального уровня
- •6.2.2.2.1. Изменение mac-адреса:
- •6.2.2.2.2. Смена флагов канального уровня
- •6.2.2.3. Изменение настроек сетевого уровня
- •6.2.2.3.2. Ip, маска подсети, широковещательный адрес
- •6.2.2.3.4. Другие протоколы сетевого уровня
- •6.2.3. Route(8) — настройка таблицы маршрутизации
- •6.2.4. Resolv.Conf(5) — настройка клиента dns
- •6.2.5. Hosts(5) — локальная база имён
- •6.2.6. Как сохранить установленные сетевые параметры
- •6.2.6.1. FreeBsd
- •6.3. Определение какие tcp или udp порты открыты в системе
- •Комментарий
- •6.3.1. Fstat(1)
- •6.3.2. Sockstat(1)
- •6.3.3. Lsof(1)
- •6.3.4. Nmap(1)
- •6.4. Проверка доступности tcp/ip сервиса
- •Комментарий
- •6.4.1. Ping(8)
- •6.4.2. Traceroute(1)
- •6.4.3. Hping(8)
- •6.4.4. Telnet(1), nc(1)
6.3. Определение какие tcp или udp порты открыты в системе
Описание. Кандидат BSDA должен уметь использовать программы входящие в состав BSD, а так же сторонние программы, для определения того, какие порты в системе открыты, и какие порты видны через брандмауэр.
Практика. netstat(1), services(5), fstat(1); sockstat(1) и сторонное продукты nmap и lsof.
Комментарий
Как было показано выше (см. Раздел 6.1.2.3, «Работающие интернет сервисы и открытые сокеты»), команда netstat(1) пригодна для того, чтобы определить открытые tcp/udp соединения и их состояние. Другим средством для определения состояния файлов и сокетов являются команды fstat(1) и sockstat(1). Первая позволяет понять какие файловые дескрипторы какими пользователями открыты, вторая перечисляет открытые сокеты.
Жизнедеятельность всех программ выполняемых в пространстве пользователя может быть отслежена при помощи обращения к устройствам /dev/mem и /dev/kmem, предоставляющим информацию непосредственно из ядра системы. Файловой системы /proc в системах BSD нет. (Если она нужна для совместимости с какими-то программами, её можно специально смонтировать, при условии, что в ядре имеется поддержка PROCFS.) Программы fstat(1) и sockstat(1) берут информацию из упомянутых устройств.
В некоторых случаях названия протоколов употребляются символьные (вроде ssh, imap), в других случаях явно номера портов (22, 143). Соответствие символьных названий протоколов и их номеров указано в файле /etc/services.
6.3.1. Fstat(1)
Команда fstat(1) выводит информацию обо всех открытых файловых дескрипторах. С её помощью можно получить информацию обо всех запущенных программах, так как каждая из них имеет по нескольку открытых файловых дескрипторов или сокетов, даже если в данный момент она не выполняет никакой работы. Пример, приведённый ниже, сильно урезан, так как всего в выводе команды fstat(1) было более семисот строк.
$ fstat > fstat-output
$ cat fstat-output
USER CMD PID FD MOUNT INUM MODE SZ|DV R/W
emin fstat 84130 root / 2 drwxr-xr-x 512 r
emin fstat 84130 wd /usr 5958657 drwxr-xr-x 2048 r
emin fstat 84130 text /usr 447995 -r-xr-sr-x 14716 r
emin fstat 84130 0 /dev 68 crw--w---- ttyp0 rw
emin fstat 84130 1 /usr 5958902 -rw-r--r-- 0 w
emin fstat 84130 2 /dev 68 crw--w---- ttyp0 rw
emin fstat 84130 3 /dev 20 crw-r----- mem r
emin fstat 84130 4 /dev 21 crw-r----- kmem r
emin fstat 84130 5 / 8381 -rw-r--r-- 40960 r
......
root getty 633 root / 2 drwxr-xr-x 512 r
root getty 633 wd / 2 drwxr-xr-x 512 r
root getty 633 text /usr 565434 -r-xr-xr-x 21016 r
root getty 633 0 /dev 39 crw------- ttyv7 rw
root getty 633 1 /dev 39 crw------- ttyv7 rw
root getty 633 2 /dev 39 crw------- ttyv7 rw
......
root getty 626 root / 2 drwxr-xr-x 512 r
root getty 626 wd / 2 drwxr-xr-x 512 r
root getty 626 text /usr 565434 -r-xr-xr-x 21016 r
root getty 626 0 /dev 32 crw------- ttyv0 rw
root getty 626 1 /dev 32 crw------- ttyv0 rw
root getty 626 2 /dev 32 crw------- ttyv0 rw
......
root devd 242 root / 2 drwxr-xr-x 512 r
root devd 242 wd / 2 drwxr-xr-x 512 r
root devd 242 text / 112 -r-xr-xr-x 281208 r
root devd 242 0 /dev 8 crw-rw-rw- null rw
root devd 242 1 /dev 8 crw-rw-rw- null rw
root devd 242 2 /dev 8 crw-rw-rw- null rw
root devd 242 3 /dev 5 crw------- devctl r
root devd 242 4* local stream c1089000
root adjkerntz 179 root / 2 drwxr-xr-x 512 r
root adjkerntz 179 wd / 2 drwxr-xr-x 512 r
root adjkerntz 179 text / 117 -r-xr-xr-x 6912 r
root adjkerntz 179 0 - - bad -
root adjkerntz 179 1 - - bad -
root adjkerntz 179 2 - - bad -
root init 1 root / 2 drwxr-xr-x 512 r
root init 1 wd / 2 drwxr-xr-x 512 r
root init 1 text / 47 -r-x------ 485892 r
|
Прежде всего, конечно, отметилась сама программа fstat(1). Видно, что от имени пользователя emin выполняется команда fstat с PID 84130. В поле FD перечислены файловые дескрипторы этой команды. Обратите внимание: дескрипторы 0, 1, и 2 отвечают за STDIN, STDOUT и STDERR. Поскольку в нашем случае вывод был направлен в файл, перый дескриптор в поле MOUNT указывает на /usr (на испытуемой машине там находятся пользовательские каталоги). Если бы мы направили вывод на консоль, то в этом месте был бы /dev: $ fstat USER CMD PID FD MOUNT INUM MODE SZ|DV R/W emin fstat 748 root / 2 drwxr-xr-x 512 r emin fstat 748 wd /usr 75413572 drwxr-xr-x 1536 r emin fstat 748 text /usr 34739458 -r-xr-sr-x 14716 r emin fstat 748 0 /dev 114 crw--w---- ttyp0 rw emin fstat 748 1 /dev 114 crw--w---- ttyp0 rw emin fstat 748 2 /dev 114 crw--w---- ttyp0 rw emin fstat 748 3 /dev 10 crw-r----- mem r emin fstat 748 4 /dev 11 crw-r----- kmem r emin fstat 748 5 / 25101 -rw-r--r-- 73728 r ......
а если в pipe, то вывод будет выглядеть так: $ fstat | less USER CMD PID FD MOUNT INUM MODE SZ|DV R/W emin less 731 root / 2 drwxr-xr-x 512 r emin less 731 wd /usr 75413572 drwxr-xr-x 1536 r emin less 731 text /usr 34739548 -r-xr-xr-x 97736 r emin less 731 0* pipe c1ca4780 <-> c1ca482c 0 rw emin less 731 1 /dev 114 crw--w---- ttyp0 rw emin less 731 2 /dev 114 crw--w---- ttyp0 rw emin fstat 730 root / 2 drwxr-xr-x 512 r emin fstat 730 wd /usr 75413572 drwxr-xr-x 1536 r emin fstat 730 text /usr 34739458 -r-xr-sr-x 14716 r emin fstat 730 0 /dev 114 crw--w---- ttyp0 rw emin fstat 730 1* pipe c1ca482c <-> c1ca4780 0 rw emin fstat 730 2 /dev 114 crw--w---- ttyp0 rw emin fstat 730 3 /dev 10 crw-r----- mem r emin fstat 730 4 /dev 11 crw-r----- kmem r emin fstat 730 5 / 25101 -rw-r--r-- 73728 r ......
Видно, что fstat(1) открыл pipe с номерами сокетов c1ca4780 и c1ca482c файловом дескрипторе 1 (STDOUT), а less сделал то же, но в обратном порядке и в файловом дескрипторе 0 (STDIN), через них идёт обмен данными. Вернёмся к примеру. Второй файловый дескриптор направлен, как видно, на консоль ttyp0 (Это поток STDERR). Дескрипторы 3 и 4 общаются с устройствами /dev/mem и /dev/kmem именно из них fstat(1) и берёт всю представленную здесь информацию. В операционных системах BSD нет виртуальной файловой системы /proc. Вся информация предостваляется ядром через упомянутые устройства. Хотя впринципе, если это надо для совместимости с какими-то программами, можно эмулировать наличие файловой системы /proc. Перед перечнем файловых дескрипторов с номерами, мы видим три строки (самые первые) с отметками в поле файлового дескриптора root, wd, text. Их значение: root корневой inod wd рабочий каталог (current working directory) text текст исполнимого файла (собственно код) tr kernel trace file mmap memory-mapped file Зная точку монтирования и номер inod можно найти к чему относятся приведённые значения wd, text и др.: $ fstat USER CMD PID FD MOUNT INUM MODE SZ|DV R/W ...... emin fstat 748 wd /usr 75413572 drwxr-xr-x 1536 r emin fstat 748 text /usr 34739458 -r-xr-sr-x 14716 r ...... $ find -x /usr \( -inum 75413572 -o -inum 34739458 \) -ls 2>/dev/null 34739458 32 -r-xr-sr-x 1 root kmem 14716 30 авг 2005 /usr/bin/fstat 75413572 4 drwxr-xr-x 21 emin emin 1536 20 мар 21:13 /usr/home/emin
Синтаксис программы find(1) обсуждается в Раздел 7.6, «Поиск файла по заданным атрибутам». Команда lsof(1), обсуждающаяся ниже, печатает в выводе не только номера inod, но и имена файлов, которые она берёт из кеша ядра. |
|
Здесь, для примера, приведены записи о 8-ми экземплярах команды getty(8), которые открыты на терминалах ttyv0—ttyv7 и ждут логина пользователя. (Мы прошли на машину по ssh(1), поэтому ни один из терминалов неиспользован). |
|
В конце приведены сведения о процессе init(8) — родительском процессе для всех прочих процессов. |