Перейти к содержанию

[Не]технические заметки

Скрипт преобразования flac в MP3

Пришлось разбирать свою "аудиотеку", где часть файлов была сохранена в формате flac. Так как я не слух все-равно не понимаю разницу между этим форматом и MP3 от 48 кГц, то решил сэкономить дисковое пространство, переконвертировав файлы.

Заметка о fstab

fstab (file systems table) - один из конфигурационных файлов в UNIX-подобных системах, который содержит информацию о различных файловых системах и устройствах хранения информации компьютера; описывает, как диск (раздел) будет использоваться или как будет интегрирован в систему.

Настройка параметров безопасности SSH

Здесь перечисляются и кратко описываются параметры безопасности сервиса OpenSSH. Это может быть не критичным, но подразумевается, что настройка выполняется в только что установленной операционной системе. Набор рассматриваемых параметров характерен для OpenSSH 9.3p2 с OpenSSL 1.1.1t.

Монтирование ресурса сетевого хранилища HNS-B72765

Если есть старое устройство со встроенным Linux и, соответственно, устаревшими версиями сетевых сервисов, как например NAS HNS-B72765, можно использовать следующую команду для монтирования сетевого ресурса (нужно просто указать версию протокола).

Настройка защищенного SSH в Debian

Здесь кратко описана настройка сервера ssh, а также генерация и передача ключа пользователя на сервер. Для этого примера настройка выполнялась в Debian 12.

Генерация ключа пользователя

О безопасности различных типов ключей написано немало, но часто рекомендуется использовать тип ED25519.

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

При генерации ключа будет создано два файла: один из них будет содержать секретную (закрытую/приватную) часть ключа, а другой - открытую (публичную) часть. Файл закрытой части ключа необходимо держать в надежном хранилище и исключать его распространения, а файл открытой части можно передавать на серверы, где вам необходимо проходить аутентификацию.

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

Выполним генерацию ключевой пары:

ssh-keygen -t ed25519 -C "COMMENT" -f "FILENAME"

Далее, чтобы сервер мог проверить подлинность клиента, нужно файл открытой части ключа передать на этот сервер.

Передача ключа на сервер

Есть несколько способов передачи файла с открытой частью ключа на сервер:

  • с использованием физического носителя;
  • с использованием утилиты ssh-copy-id;
  • с использованием буфера обмена;
  • путем копирования файла на сервер.

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

Конфигурация сервера ssh

Конфигурация сервера выполняется путем редактирования файла конфигурации /etc/ssh/sshd_config. В этом файле содержатся все необходимые параметры для работы.

Чтобы проверить корректность параметров конфигурации можно выполнить:

sshd -T

Если ошибок нет, можно применить настройки, перезапустив сервер:

systemctl restart sshd

Для просмотра статуса сервера выполните:

systemctl status sshd

Ниже приводится пример базового файла конфигурации:

AddressFamily inet
AllowAgentForwarding no
AllowStreamLocalForwarding no
AllowTcpForwarding no
# AllowUsers administrator@...
AuthenticationMethods publickey
AuthorizedKeysFile /etc/ssh/authorized-keys/%u
Banner none
DebianBanner no
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com
ClientAliveCountMax 1
ClientAliveInterval 300
DisableForwarding yes
KbdInteractiveAuthentication no
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group14-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha256
HostKeyAlgorithms -ecdsa-sha2-nistp256
# ListenAddress ...
LoginGraceTime 20
LogLevel VERBOSE
MACs hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,umac-128-etm@openssh.com
MaxAuthTries 3
PermitEmptyPasswords no
PermitRootLogin no
PubkeyAuthentication yes
SyslogFacility AUTHPRIV
# Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
X11Forwarding no
X11UseLocalhost no
Compression no
MaxSessions 2
# Port ...
TCPKeepAlive no
UseDNS no
UsePAM yes
# Match User USERNAME
#  ChrootDirectory /home/...
#  AuthenticationMethods publickey password
#  PasswordAuthentication yes

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

На сервере должна быть создана директория /etc/ssh/authorized-keys/, в которую необходимо помещать файлы с открытыми частами ключей пользователей. Имя каждого такого файла должно быть эквивалентным имени пользователя.

Крайне важным является соблюдение установки прав доступа к файлам закрытой и открытой частей ключа.

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

Согласно указанной выше конфигурации, файлы открытых частей ключей всех пользователей размещаются в директории /etc/ssh/authorized-keys. Установите для этой директорию права 755 (владелец по-умолчанию "root" имеет полные права, группа и остальные - только чтение и выполнение):

chmod 755 /etc/ssh/authorized-keys

На файлы открытых частей ключей пользователей установите права владения и чтения только для соответствующих пользователей:

chown USERNAME:USERNAME /etc/ssh/authorized-keys/USERNAME
chmod 400 /etc/ssh/authorized-keys/USERNAME

Проверка безопасности

Для проверки настройки безопасности вашей конфигурации рекомендуется использование сканеров безопасности. Одним из таких сканеров являются ssh-audit и lynis, они входят в стандартный репозиторий Debian.

Рекомендуется периодически обновлять сканер и выполнять проверки конфигурации для профилактики появления в системе небезопасных параметров.

Массивы в shell

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

Сервер для разработки веб-приложений

О статье

Здесь описывается пример установки виртуального сервера в среде виртуализации KVM/QEMU, предназначенного для разработки веб-приложений на базе PHP, с использованием MySQL. Требования, предъявляемые к серверу: - отдельные виртуальные диски для размещения кода и баз данных; - доступ разработчиков по ssh и sftp в пользовательские пространства (chroot).

Ограничение среды пользователей SSH

Если ваш сервер SSH сконфигурирован по-умолчанию (или без указанных ниже опций), скорее всего любой пользователь, который может подключиться к нему, будет иметь доступ на чтение множества файлов, в том числе системных. Да, это всего лишь доступ на чтение, но далеко не всегда необходимо, чтобы пользователи могли просматривать, например, файл конфигурации того же SSH, список всех пользователей системы и многие другие файлы.

Использование триггеров в MySQL

Бывает удобно при вводе или редактировании таблицы автоматически формировать некоторые поля. Например, при вводе полей "фамилия", "имя" и "отчество", было бы удобно автоматически формировать поля "полное ФИО" и "сокращенное ФИО".

В первом поле фамилия, имя и отчество должны указываться полностью, разделяемые пробелом. Во втором поле должна быть указана фамилия и через пробел инициалы.

Чтобы это сделать, нужно добавить триггер для операций INSERT и UPDATE, срабатывающий перед событием (BEFORE) со следующим содержимым:

BEGIN
SET NEW.f_name = CONCAT_WS(' ', TRIM(NEW.name), TRIM(NEW.m_name), TRIM(NEW.l_name));
SET NEW.s_name = CONCAT(TRIM(NEW.l_name), ' ', TRIM(LEFT(NEW.name, 1)), '. ', TRIM(LEFT(NEW.m_name, 1)), '.');
END

Примеры использования netstat

Команда netstat, входящая в стандартный набор сетевых инструментов в Unix-системах, отображает информацию о сетевых подключениях, статистику интерфейсов, таблицы маршрутизации, и т.п.