1. Настройка сети в Kali Linux
1.1 На рабочем столе с помощью NetworkManager
В стандартной инсталляции рабочего стола у вас уже есть установленный NetworkManager, и вы можете управлять им, настраивать его через центр управления GNOME, а также с помощью меню в правом верхнем углу, как показано на рисунке.Настройки сети по умолчанию используют DHCP для получения IP-адреса, DNS-сервера и шлюза. Однако, вы можете использовать значок шестеренки в правом нижнем углу, чтобы изменить конфигурацию разными способами, например:
- Установить MAC-адрес (это может быть полезно для MAC-спуфинга, когда вы хотите скрыть свой реальный MAC-адрес или имитировать другой, чтобы обойти MAC-фильтрацию в сетях).
- Переключиться на статические настройки IP-адреса.
- Включить или отключить IPv6.
- Добавить дополнительные маршруты.
NetworkManager также обрабатывает соединения с помощью мобильного широкополосного канала (Wireless Wide Area Network WWAN),2 а также модемов, использующих протокол передачи от точки к точке через Ethernet (Point-to-Point Protocol over Ethernet (PPPoE)). И последнее, но не менее важное: он обеспечивает интеграцию со многими типами виртуальных частных сетей (Virtual Private Networks (VPN)) с помощью выделенных модулей: SSH, OpenVPN, Cisco’s VPNC, PPTP, Strongswan.3 Убедитесь, что у вас установлены соответствующие пакеты
network-manager-*
(например, network-manager-openvpn
для OpenVPN); большинство из них не установлены по умолчанию. Обратите внимание, что для настройки через графический интерфейс пользователя вам нужны пакеты с суффиксом -gnome
(например, network-manager-openvpn-gnome
).1.2 Через командную строку с помощью Ifupdown
В качестве альтернативы, в тех случаях, когда вы предпочитаете не использовать (или у вас просто нет доступа) графический интерфейс, вы можете настроить сеть с помощью уже установленного пакета ifupdown, который включает в себя инструментыifup
и ifdown
. Эти инструменты считывают определения из файла конфигурации /etc/network/interfaces
и лежат в основе сценария инициализации /etc/init.d/networking
, который настраивает сеть во время загрузки.Каждое сетевое устройство, управляемое
ifupdown
, может быть деконфигурировано в любое время с4 помощью ifdown [сетевое устройство]
. Затем вы можете изменить /etc/network/interfaces
и вернуть сеть (с новой конфигурацией) с помощью ifup [сетевое устройство]
.Давайте поближе познакомимся с тем, что мы можем вложить в файл конфигурации
ifupdown
. Существуют две основные директивы: auto [сетевое устройство]
, которая говорит ifupdown автоматически настроить сетевой интерфейс, как только он становится доступным, и iface [сетевой интерфейс] [тип inet/inet6]
для настройки данного интерфейса. Например, простая конфигурация DHCP выглядит следующим образом:Обратите внимание, что специальные конфигурации для устройства loopback (
lo
) всегда должны присутствовать в этом файле. Для конфигурации фиксированного IP-адреса вам необходимо предоставить более подробную информацию, такую как IP-адрес, маска подсети (netmask
) и IP-адрес шлюза (gateway
):Для беспроводного интерфейса у вас должен быть пакет
wpasupplicant
(включенный в Kali по умолчанию), который предоставляет множество wpa-*
опций, которые в свою очередь могут быть использованы в /etc/network/interfaces
. Для получения примеров и дополнительных разъяснений ознакомьтесь с /usr/share/doc/wpasupplicant/README.Debian.gz
. Самыми часто используемыми опциями являются wpa-ssid (которая определяет имя беспроводной сети для присоединения) и wpa-psk (которая определяет5 предварительно разделенный ключ или парольную фразу для защиты сети).Важно помнить, что изменение MAC-адреса через
ifupdown
также возможно, но требует ручного добавления директив типа hwaddress ether XX:XX:XX:XX:XX:XX
в конфигурацию интерфейса.1.3 Через командную строку с помощью systemd-networkd
Несмотря на то, чтоifupdown
является давно используемым инструментом в Debian, и то, что он до сих пор является стандартом для серверов или других минимальных установок, существует более новый инструмент, который заслуживает нашего внимания: systemd-networkd
. Его интеграция с systemd инициализирующей системой делает его очень привлекательным. Он не является целевым для дистрибутивов на основе Debian6 (в отличие от ifupdown
) и был разработан как очень маленький, эффективный и относительно простой в настройке, в том случае если вы хорошо понимаете синтаксис файлов systemd. Для вас это будет особенно привлекательным выбором, если вы считаете,7 что NetworkManager
является чересчур раздутым и сложно настраиваемым, или если вы работаете в контейнеризованных и виртуальных средах.Вы настраиваете
systemd-networkd
путем помещения сетевых файлов (.network
files) в директорию /etc/systemd/network/
. В качестве альтернативы вы можете использовать /lib/systemd/network/
для пакетированных файлов или /run/systemd/network/
для файлов, сгенерированных во время выполнения программы. Формат этих файлов документируется в systemd.network(5)
8 (вы можете прочитать его, выполнив man systemd.network
). Раздел [Match]
указывает сетевые интерфейсы, к которым применяется конфигурация. Вы можете указать интерфейс различными способами, например, по адресу управления доступом к среде (Media Access Control (MAC)) или по типу устройства. Раздел [Network]
определяет конфигурацию9 сети.Конфигурация на базе DHCP в
/etc/systemd/network/80-dhcp.network
Статическая конфигурация в
/etc/systemd/network/50-static.network
Обратите внимание, что systemd-networkd отключен по умолчанию, поэтому, если вы хотите его использовать, его необходимо включить:
sudo systemctl enable systemd-networkd && sudo systemctl start systemd-networkd
. Это также зависит от systemd-resolved
для правильной интеграции DNS разрешения, что в свою очередь требует от вас замены /etc/resolv.conf
символической ссылкой на /run/systemd/resolve/resolv.conf
, которая управляется systemd-resolved
.Хотя
systemd-networkd
страдает от определенных ограничений, вроде недостатка интегрированной поддержки беспроводных сетей, вы все равно можете полагаться на ранее существовавшую внешнюю конфигурацию wpa_supplicant
для поддержки беспроводной10 сети. Например, вы можете запустить wpa_supplicant как отдельный сервис и затем управлять интерфейсом через systemd-networkd. Однако, он особенно полезен в контейнерах и виртуальных машинах и был первоначально разработан для сред, в которых конфигурация сети контейнера зависела от конфигурации сети хоста. В этом сценарии systemd-networkd
упрощает управление обеими сторонами последовательно, поддерживая всевозможные виртуальные сетевые устройства, которые могут потребоваться в этом типе сценариев (смотри systemd.netdev(5)
).2. Управление Unix пользователями и Unix
База данных пользователей и групп Unix состоит из текстовых файлов/etc/passwd
(список пользователей), /etc/shadow
(зашифрованные пароли пользователей), /etc/group
(список групп) и /etc/gshadow
(зашифрованные пароли групп). Их форматы документируются12 в passwd(5), shadow(5), group(5), и gshadow(5) соответственно (доступны через man страницы). Хотя эти файлы могут быть отредактированы вручную с помощью таких инструментов, как vipw и vigr, для выполнения наиболее распространенных операций существуют инструменты более высокого уровня, которые предпочтительнее для предотвращения ошибок.Безопасность и целостность файлов пользователей/групп
Файлы/etc/passwd
, /etc/shadow
, /etc/group
и /etc/gshadow
содержат конфиденциальную информацию. /etc/shadow
содержит хеши паролей и должен иметь очень ограниченные права доступа (обычно rw-------
для root
). Любое несанкционированное изменение этих файлов может привести к компрометации системы. Всегда используйте предоставленные утилиты (adduser, deluser, usermod, passwd и т.д.) для внесения изменений, поскольку они обеспечивают корректное обновление всех необходимых полей и соблюдение разрешений.2.1 Создание пользовательского аккаунта
Несмотря на то, что Kali чаще всего запускается, проводя аутентификации в качестве пользователя root, вам часто может понадобиться создавать непривилегированные учетные записи пользователей по разным причинам, особенно если вы используете Kali в качестве основной операционной13 системы. Это соответствует принципу наименьших привилегий, который гласит, что пользователи и процессы должны иметь только те минимальные права, которые необходимы для выполнения их задач. Использование root-аккаунта для повседневных задач значительно увеличивает поверхность атаки. Самый простой способ добавить пользователя – это использовать командуadduser
, которая требует определенный аргумент: имя пользователя (username
) для нового пользователя, которого вы бы хотели создать.Команда
adduser
задает несколько вопросов перед созданием14 учетной записи (полное имя, номер комнаты, телефон и т.д.), но ее использование довольно простое. Его конфигурационный файл /etc/adduser.conf
содержит множество интересных настроек. Вы можете, например, определить диапазон идентификаторов пользователей (User Identifiers (UID)), который может быть использован для того, чтобы обозначить используют ли пользователи общую группу или нет, определить оболочку по умолчанию и многое другое.Создание аккаунта запускает популяцию домашних директорий пользователей с содержимым шаблона
/etc/skel/
. Это предоставляет пользователю набор стандартных директорий и файлов конфигурации15 (например, .bashrc, .profile). Вы можете настроить /etc/skel/ для автоматического развертывания пользовательских настроек или скриптов для новых пользователей.В некоторых случаях будет очень полезно добавлять пользователя в группу (отличную от основной группы по умолчанию), чтобы предоставить дополнительные разрешения. Например, пользователь, включенный в группу sudo, имеет полные административные права через команду sudo. Подобного результата можно достичь с помощью использования следующей команды: adduser [пользователь] [группа]. Пример: sudo adduser kaliuserl sudo добавит пользователя kaliuserl в группу sudo.
Использование getent для обращения к базе данных пользователя:
Команда getent (get entries) проверяет системные базы данных (включая базы данных пользователей и групп) используя соответствующие функции библиотек, которые в свою очередь вызывают модули системы идентификации имен (Name Service Switch (NSS)), настроенные в файле /etc/nsswitch.conf. Данная команда использует один или два аргумента: имя базы данных, которую необходимо проверить, и возможный ключ поиска. Таким образом, команда getent passwd kaliuserl выдаст информацию из пользовательской базы данных о пользователе kaliuserl.16
2.2 Изменение существующей учетной записи или пароля
Следующие команды разрешают изменения информации, хранящейся в конкретных областях пользовательской базы данных. Всегда используйте эти команды вместо прямого редактирования файлов /etc/passwd или /etc/shadow, чтобы избежать повреждения файлов и потенциальных уязвимостей.- passwd — позволяет обычным пользователям изменять свой пароль, который в свою очередь, обновляет хеш пароля в файле /etc/shadow. Администратор (root) может использовать passwd [пользователь] для изменения пароля любого пользователя. Всегда используйте надежные пароли, включающие комбинацию заглавных и строчных букв, цифр и специальных символов.
- chfn — (CHange Full Name), зарезервированное для суперпользователя (root), изменяет GECOS, или область ”общая информация” о пользователе.
- chsh — (CHange SHell) изменяет оболочку входа пользователя. Однако доступные варианты для обычных пользователей будут ограничены теми, которые перечислены в /etc/shells (список разрешенных оболочек для входа). Администратор, с другой стороны, не связан этим ограничением и может установить оболочку в любую выбранную программу. Это может быть использовано для настройки ограниченных оболочек (restricted shells) для определенных пользователей или для установки программы, которая будет запускаться при входе в систему.
- chage — (CHange AGE) позволяет администратору изменять настройки срока действия пароля, указывая имя пользователя в качестве аргумента или отображая текущие настройки с помощью параметра -l [пользователь]. Например, sudo chage -M 90 kaliuserl установит максимальный срок действия пароля в 90 дней. Кроме того, вы также можете принудительно завершить использование пароля с помощью команды passwd -e [пользователь], которая заставляет пользователя менять свой пароль при следующем входе в систему. Регулярная смена паролей и установка политик истечения срока действия являются хорошими практиками безопасности.
2.3 Блокирование аккаунта
Вам может потребоваться отключить учетную запись (заблокировать пользователя) в качестве дисциплинарной меры, в целях расследования или просто в случае длительного или окончательного отсутствия пользователя. Заблокированная учетная запись означает, что пользователь не может войти в систему или получить доступ к машине. Учетная запись остается неповрежденной на машине, и никакие файлы или данные не удаляются; она просто недоступна. Это достигается с помощью командыpasswd -l
[пользователь] (lock). Повторное включение учетной записи выполняется аналогичным образом с опцией -u (unlock). Это более безопасный подход, чем полное удаление учетной записи, если есть вероятность, что доступ может потребоваться в будущем.2.4 Управление Unix группами
Командыaddgroup
и delgroup
добавляют или удаляют группу, соответственно. Команда groupmod изменяет информацию о группе (ее GID или идентификатор, а также имя). Команда gpasswd [группа] изменяет пароль для группы (редко используется), а команда gpasswd -r
[группа] удаляет его.Работа с несколькими группами:
Каждый пользователь может быть членом многих групп. Основная группа пользователей по умолчанию создается во время начальной настройки пользователя. По умолчанию каждый файл, созданный пользователем, принадлежит пользователю, а также основной группе пользователя. Это не всегда желательно; например, когда пользователь должен работать в директории, разделяемой группой, отличной от их основной группы. В этом случае пользователю необходимо изменить группы, используя одну из следующих команд: newgrp, которая запускает17 новую оболочку с измененной основной группой, или sg, которая просто выполняет команду, используя предоставленную альтернативную группу. Эти команды также позволяют присоединиться к группе, к которой они в настоящее время не принадлежат. Если группа защищена паролем, им необходимо будет предоставить соответствующий пароль перед выполнением18 команды (что также редко используется).
В качестве альтернативы, пользователь или администратор может установить
setgid bit
на директорию, что позволяет файлам, созданным в директории, автоматически принадлежать верной группе этой директории. Это может быть как удобством, так и потенциальной уязвимостью, если разрешения не настроены должным образом. Например, если директория имеет setgid и права записи для группы, любой член этой группы может создавать файлы, которые будут принадлежать этой группе, что может привести к нежелательному расширению привилегий или манипуляции файлами.Для получения большей информации, смотри заметку «директория setgid и sticky bit».
- setgid (SGID) на директории: Когда setgid установлен на директории, все новые файлы и поддиректории, созданные внутри этой директории, будут наследовать группу владельца родительской директории, а не основную группу пользователя, создавшего файл. Это очень полезно для совместной работы над проектами, когда несколько пользователей должны работать с файлами, принадлежащими одной и той же группе.
- sticky bit на директории: Если sticky bit установлен на директории (например, на /tmp), то файлы в этой директории могут быть удалены или переименованы только их владельцем (или root), независимо от того, какие права доступа к записи есть у других пользователей. Это предотвращает удаление или изменение чужих файлов в общедоступных директориях.
Аудит и Мониторинг
Для поддержания безопасности системы крайне важно регулярно проверять логи (/var/log/auth.log
, /var/log/syslog
) на предмет подозрительных действий, таких как неудачные попытки входа в систему, изменения пользователей/групп или использование sudo. Используйте инструменты аудита (например, auditd) для более детального отслеживания изменений в важных системных файлах, включая те, что связаны с учетными записями пользователей и групп.Это интересно: