Безопасность¶
Что такое SELinux?¶
SELinux -- это мандатная система контроля доступа, ограничивающая доступ ряду сервисов к файлам и каталогам.
Более подробная информация может быть получена здесь.
Как мне временно отключить SELinux?¶
Мы настоятельно не рекомендуем этого делать, однако если это необходимо, то для временного однократного отключения SELinux, передадим ядру Linux специальный параметра ядра:
SELINUX=0
Как мне навсегда отключить SELinux?¶
Для постоянного отключения SELinux, откроем его главный файл файл конфигурации /etc/selinux/config
в текстовом редакторе:
sudoedit /etc/selinux/config
Изменить значение директивы SELINUX
на одно из допустимых значений:
enforcing
— включён и блокирует всё, что явно не разрешено;
permissive
— включён, но ничего не блокирует, а лишь записывает события в системный журнал;
disabled
— полностью отключён.
Изменения вступят в силу при следующей загрузке системы.
Как узнать текущий статус SELinux?¶
Получим текущий статус SELinux при помощи одной из следующих команд: getenforce
или sestatus
.
Как разрешить заблокированные действия SELinux?¶
По умолчанию SELinux будет блокировать доступ к любым файлам, каталогам, сокетам, которые не разрешены в политиках для конкретного процесса. Это вызывает множество проблем, поэтому пользователи зачастую предпочитают отключать SELinux, что в корне неверно. Вместо этого следует разобраться в причине блокировки и создать разрешающее правило.
Очистим журнал аудита для того, чтобы избавиться от предыдущих ошибок и случайно не позволить лишние действия, накопившиеся с момента его прошлой ротации:
sudo bash -c "cat /dev/null > /var/log/audit/audit.log"
Запустим приложение, модуль ядра и т.д., который вызывает срабатывание SELinux и блокировку доступа к ресурсу (файлу, каталогу, сокету). Как только это произойдёт, воспользуемся утилитой audit2allow для анализа журнала аудита, облегчающей создание новых разрешающих правил для SELinux:
sudo bash -c "cat /var/log/audit/audit.log | audit2allow -M foo-bar"
В результате работы данной утилиты будет создан новый модуль foo-bar.te
, в котором разрешаются действия, записи о запрещении которых были внесены в журнал auditd ранее.
Перед применением этого файла и созданием политики SELinux обязательно загрузим его в текстовый редактор и проверим корректность, т.к. в нем может содержаться больше разрешающих правил, чем требуется, а также присутствуют подсказки о том, как правильно настроить SELinux.
В сгенерированном файле модуля foo-bar.te
после комментария This avc can be allowed using one of the these booleans присутствует список переменных двоичного типа, установка которых поможет разрешить заблокированное действие. Справочную информацию можно получить из документации SELinux:
getsebool -a
Описание переменных SELinux, относящихся к работе веб-сервера, можно найти здесь.
Как настроить SELinux так, чтобы веб-сервер мог создавать файлы и каталоги?¶
Если при работе веб-сервера в журналах появляются сообщения вида:
Warning: chmod(): Permission denied in /var/www/html/foo-bar/foo.php on line XXX
Warning: Directory /var/www/html/foo-bar/foo not writable, please chmod to 755 in /var/www/html/foo-bar/foo.php on line XXX
Они означают, что процесс веб-сервера (или интерпретатора языка программирования) не может получить доступ на запись. Если права доступа (chmod и chown) при этом установлены верно, значит доступ блокирует SELinux.
Установим правильный контекст безопасности для всех каталогов внутри document_root/foo-bar
:
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/foo-bar(/.*)?"
Сбросим контекст безопасности для всех файлов внутри document_root рекурсивно:
sudo restorecon -Rv /var/www/html
Для отмены произведённых изменений контекста выполним:
sudo semanage fcontext -d "/var/www/html/foo-bar(/.*)?"
Получим список контекстов для httpd:
sudo semanage fcontext -l | grep httpd
Если предудущая команда выводит очень много информации, осуществим фильтрацию вывода:
sudo semanage fcontext -l | grep /var/www/html
Получим список файлов и каталогов с установленным контекстом SELinux:
ls -laZ /var/www/html/foo-bar
Более полную информацию о контекстах безопасности и работе с ними можно найти здесь.
Откроем текстовый редактор и создадим новый модуль httpd_wr.te
:
module httpd_wr 1.0;
require {
type httpd_t;
type httpd_sys_rw_content_t;
class file { create write setattr rename unlink };
class dir { create write setattr add_name remove_name rmdir };
}
allow httpd_t httpd_sys_rw_content_t:file { create write setattr rename unlink };
allow httpd_t httpd_sys_rw_content_t:dir { create write setattr add_name remove_name rmdir };
Проверим, скомпилируем и установим его:
sudo checkmodule -M -m httpd_wr.te -o httpd_wr.mod
sudo semodule_package -o httpd_wr.pp -m httpd_wr.mod
sudo semodule -i httpd_wr.pp
Больше полезной информации о модулях:
Как настроить SELinux так, чтобы веб-сервер мог осуществлять исходящие сетевые соединения?¶
Первый вариант (самый правильный):¶
Откроем текствый редактор и создадим новый модуль httpd_network.te
:
module httpd_connect 1.0;
require {
type httpd_t;
type ephemeral_port_t;
class tcp_socket name_connect;
}
allow httpd_t ephemeral_port_t:tcp_socket name_connect;
Проверим, скомпилируем и установим его:
sudo checkmodule -M -m httpd_network.te -o httpd_network.mod
sudo semodule_package -o httpd_network.pp -m httpd_network.mod
sudo semodule -i httpd_network.pp
Получим названия диапазонов портов:
sudo semanage port -l
Добавим порт в диапазон:
semanage port -a -t ephemeral_port_t -p tcp 80-88
Удалим порт из диапазона:
semanage port -d -t ephemeral_port_t -p tcp 80-88
Здесь ephemeral_port_t -- название диапазона, tcp -- используемый протокол, а 80-88 -- диапазон разрешаемых портов.
Второй вариант (быстрый, но менее безопасный)¶
Разрешим любые исходящие соединения для веб-сервера:
sudo setsebool -P httpd_can_network_connect on
OpenVPN не может получить доступ к сертификатам из-за SELinux. Что делать?¶
Это нормально ибо запущенные сервисы не могут получать доступ к каталогам пользователя, однако для OpenVPN сделано исключение в виде каталога ~/.cert
.
По умолчанию он не существует, поэтому его нужно создать и задать для него контекст безопасности SELinux:
mkdir ~/.cert
restorecon -Rv ~/.cert
Теперь в нём можно размещать сертификаты и приватные ключи.
Можно ли отключить KPTI?¶
KPTI -- это новый механизм ядра, направленный на защиту системы от уязвимости Meltdown в процессорах Intel. Настоятельно не рекомендуется его отключать, хотя это и возможно. Для этого необходимо и достаточно передать параметр ядра:
nopti
Параметр pti=off
также поддерживается в полной мере.
Можно ли отключить защиту от Spectre v1?¶
Программные заплатки могут быть отключены при помощи параметра ядра:
nospectre_v1
Можно ли отключить защиту от Spectre v2?¶
Да, при помощи параметра ядра:
nospectre_v2
Можно ли отключить защиту от Spectre v4?¶
Да, при помощи параметра ядра:
nospec_store_bypass_disable
Можно ли отключить защиту от L1TF?¶
Да, при помощи параметра ядра:
l1tf=off
Можно ли отключить защиту от MDS?¶
Да, при помощи параметра ядра:
mds=off
Можно ли отключить защиту от iTLB?¶
Да, при помощи параметра ядра:
nx_huge_pages=off
Можно ли отключить защиту от TSX?¶
Да, при помощи параметра ядра:
tsx=on
Для полной деактивации должен использоваться совместно с TAA.
Можно ли отключить защиту от TAA?¶
Да, при помощи параметра ядра:
tsx_async_abort=off
Можно ли отключить все виды защит от уязвимостей в процессорах?¶
Да. Начиная с версии ядра Linux 5.1.2, появился особый параметр ядра, отключающий все виды программных защит:
mitigations=off
Можно ли отключить защиту от уязвимостей в Intel GPU?¶
Да. Начиная с версии ядра Linux 5.12, появился особый параметр ядра, отключающий все виды программных защит интегрированных видеокарт Intel:
i915.mitigations=off
Как узнать защищено ли ядро от известных уязвимостей в процессорах?¶
Ранее для этого применялись сторонние утилиты, но в современных версиях ядра для этого есть штатный механизм, который можно использовать:
grep . /sys/devices/system/cpu/vulnerabilities/*
При загрузке получаю ошибку SELinux. Как исправить?¶
Такое бывает если по какой-то причине сбился контекст безопасности SELinux. Исправить это можно двумя различными способами.
Способ первый:
sudo touch /.autorelabel
sudo systemctl reboot
Внимание! Следующая загрузка системы займёт много времени из-за переустановки контекста для всех файлов и каталогов. Ни в коем случае не следует её прерывать. По окончании система автоматически перезагрузится ещё один раз.
Способ второй:
sudo restorecon -Rv /
sudo systemctl reboot
После перезагрузки все ошибки, связанные с SELinux, должны исчезнуть.
Как можно надёжно зашифровать файлы на USB устройстве?¶
См. здесь.
Можно ли зашифровать домашний раздел уже установленной системы?¶
См. здесь.
Как сменить пароль зашифрованного LUKS раздела?¶
Сменить пароль достаточно просто. Достаточно выполнить следующую команду:
sudo cryptsetup luksChangeKey /dev/sda1 -S 0
Здесь /dev/sda1 -- зашифрованный раздел диска, а 0 -- порядковый номер LUKS слота для пароля.
Для успешной смены пароля раздел не должен быть смонтирован, поэтому если это корневой или домашний, то придётся выполнять загрузку с LiveUSB.
Как получить информацию о зашифрованном LUKS устройстве?¶
Если требуется получить подробную информацию о зашифрованном LUKS разделе (алгоритм шифрование, тип хеша и количество итераций и т.д.), можно воспользоваться утилитой cryptsetup:
sudo cryptsetup luksDump /dev/sda1
Здесь /dev/sda1 -- зашифрованный раздел диска.
Насколько сильно шифрование LUKS снижает производительность дисковой подсистемы?¶
На современных процессорах с аппаратной поддержкой набора инструкций AES-NI снижение производительности практически незаметно даже на самых производительных NVMe SSD накопителях.
Для того, чтобы оценить скорость работы на реальном оборудовании, в cryptsetup присутствует встроенный бенчмарк для тестирования разных алгоритмов шифрования и типа сцепления блоков шифротекста:
cryptsetup benchmark
Как узнать поддерживает ли процессор моего ПК набор инструкций AES-NI?¶
Если в выводе /proc/cpuinfo
присутствует строка aes, значит поддерживает:
grep -Eq 'aes' /proc/cpuinfo && echo Yes || echo No
Что такое Firewalld?¶
Firewalld -- это современный динамически управляемый брандмауэр с поддержкой зон для интерфейсов.
Как можно настраивать Firewalld?¶
Для настройки применяется либо графическая утилита firewall-config, либо консольная firewall-cmd.
Документацию можно найти в Wiki.
Как усилить настройки безопасности Firewalld?¶
По умолчанию в Fedora Workstation применяется зона брандмауэра FedoraWorkstation, для которой разрешены входящие соединения на порты из диапазона 1025-65535, как по TCP, так и UDP.
Если необходимо запретить все входящие подключения, кроме явно разрешённых, переключим зону на public:
sudo firewall-cmd --set-default-zone=public
Как замаскировать сервис средствами Firewalld?¶
См. здесь.
Как запретить подключения с конкретных IP-адресов?¶
Достаточно добавить их в специально созданную зону drop файрвола:
sudo firewall-cmd --permanent --zone=drop --add-source=1.2.3.4
Здесь вместо 1.2.3.4 нужно указать необходимый IP-адрес или подсеть (1.2.3.0/24).
Как работать с подписями GnuPG?¶
См. здесь.
Как зашифровать и расшифровать файлы с определённой маской в текущем каталоге?¶
Шифрование всех файлов с маской .7z. (многотомные архивы 7-Zip):
find . -maxdepth 1 -type f -name "*.7z.*" -exec gpg2 --out "{}.asc" --recipient "example@example.org" --encrypt "{}" \;
Расшифровка:
find . -maxdepth 1 -type f -name "*.asc" -exec gpg2 --out "$(basename {})" --decrypt "{}" \;
Чем отличается пользователь-администратор от обычного?¶
Администратор (в терминологии программы установки Anaconda) имеет доступ к sudo.
Как запустить команду с правами суперпользователя?¶
Для запуска чего-либо с правами суперпользователя необходимо использовать sudo:
sudo foo-bar
Здесь вместо foo-bar следует указать команду, путь к исполняемому файлу, скрипту и т.д.
Какие пароли запрашивают sudo и su?¶
Утилита sudo запрашивает текущий пароль пользователя, а su -- рутовый.
Как мне сменить пароль суперпользователя?¶
Для смены или установки пароля суперпользователя при наличии доступа к sudo, можно выполнить:
sudo passwd root
Как мне получить доступ к sudo?¶
Если при установке Fedora, при создании пользователя, не был установлен флажок в чекбокс Создать администратора, то необходимо самостоятельно добавить пользовательский аккаунт в группу wheel:
su -c "usermod -a -G wheel $(whoami)"
Что лучше: sudo или su?¶
Sudo ибо позволяет гибко настраивать права доступа, включая список разрешённых команд, а также ведёт полный журнал её использования.
Почему я не могу запустить файловый менеджер с правами суперпользователя?¶
Это сделано из соображений безопасности. Более подробная информация доступна здесь.
Как мне отредактировать конфиг, доступный только суперпользователю?¶
Необходимо использовать sudoedit:
sudoedit /путь/к/файлу/конфигурации.conf
Sudoedit безопаснее прямого запуска текстового редактора с правами суперпользователя?¶
Да, намного ибо sudoedit копирует нужный файл во временный каталог и загружает в выбранном по умолчанию текстовом редакторе с обычными правами, а по завершении редактирования копирует на прежнее место.
Как включить и безопасно настроить сервер SSH?¶
Сначала установим и активируем sshd:
sudo dnf install openssh-server
sudo systemctl enable --now sshd.service
Создадим собственный файл конфигурации, в который будем вносить изменения:
sudo touch /etc/ssh/sshd_config.d/00-foobar.conf
sudo chmod 0600 /etc/ssh/sshd_config.d/00-foobar.conf
Имя файла начинается с 00, т.к., согласно документации OpenSSH, приоритет среди всех файлов конфигурации имеет та директива, которая была указана раньше.
Отредактируем созданный файл для внесения своих изменений:
sudoedit /etc/ssh/sshd_config.d/00-foobar.conf
Отключим вход суперпользователем:
PermitRootLogin no
Запретим вход по паролям (будет доступна лишь аутентификация по ключам):
PasswordAuthentication no
PermitEmptyPasswords no
Сохраним изменения и перезапустим sshd:
sudo systemctl restart sshd.service
Допустимо ли использовать парольную аутентификацию для SSH?¶
В настоящее время мы настоятельно не рекомендуем эксплуатировать SSH серверы с включённой парольной аутентификацией (настройки по умолчанию), т.к. он станет постоянной целью для атак заражённых устройств, которые будут пытаться подобрать пароль по словарям, а также полным перебором, создавая тем самым лишнюю нагрузку на SSH сервер.
Автоматическая блокировка средствами fail2ban также не особо поможет, т.к. современные ботнеты умеют координировать свои атаки посредством мастер-сервера и знают стандартные настройки данных утилит.
Следует ли сменить порт SSH на нестандартный?¶
Это никак не поможет скрыть сервер от крупных бот-сетей, сканирующих весь допустимый диапазон портов, и лишь создаст дополнительные неудобства для самих пользователей.
Безопасна ли аутентификация по ключам в SSH?¶
Да. В настоящее время это самый безопасный метод аутентификации. Если во время рукопожатия SSH клиент не предоставил серверу разрешённый ключ, последний немедленно закроет соединение.
Как сгенерировать ключи для SSH?¶
Для создания ключевой пары из открытого и закрытого ключей, необходимо воспользоваться утилитой ssh-keygen:
ssh-keygen -t rsa -C "user@example.org"
Здесь в качестве параметра -t указывается тип ключа: RSA, DSA, ecdsa или ed25519. Рекомендуется использовать либо RSA, либо ed25519.
Для RSA можно добавить параметр -b и указать длину в битах, например -b 4096.
Как безопасно передать публичный ключ SSH на удалённый сервер?¶
Для простой, быстрой и безопасной передачи можно использовать утилиту ssh-copy-id:
ssh-copy-id user@example.org
Здесь user@example.org -- данные для подключения к серверу, т.е. имя пользователя на удалённом сервере и хост.
Как пробросить порт с удалённой машины на локальную через SSH?¶
Для примера пробросим с удалённого сервера на локальную машину порт MySQL/MariaDB:
ssh user@example.org -L 3306:127.0.0.1:3306 -N -f
Здесь user@example.org -- данные для подключения к серверу, т.е. имя пользователя на удалённом сервере и хост, а 3306 -- порт. Параметры -N -f
заставляют SSH клиент сразу вернуть управление, уйти в фоновый режим и продолжать поддерживать соединение до своего завершения.
Как настроить виртуальный SOCKS туннель через SSH?¶
ssh user@example.org -D 127.0.0.1:8080 -N -f
Здесь user@example.org -- данные для подключения к серверу, т.е. имя пользователя на удалённом сервере и хост, а 8080 -- локальный порт, на котором будет запущен SSH клиент в режиме эмуляции SOCKS5 сервера. Параметры -N -f
заставляют SSH клиент сразу вернуть управление, уйти в фоновый режим и продолжать поддерживать соединение до своего завершения.
После запуска необходимо настроить браузер и другие приложения на работу через данный SOCKS5 прокси.
Можно ли разрешить доступ посредством SSH только к файлам, без возможности выполнения команд?¶
Да. Для этого создадим специальную группу (например sftp):
sudo groupadd sftp
Создадим собственный файл конфигурации, в который будем вносить изменения:
sudo touch /etc/ssh/sshd_config.d/01-sftp.conf
sudo chmod 0600 /etc/ssh/sshd_config.d/01-sftp.conf
Откроем конфиг /etc/ssh/sshd_config.d/01-sftp.conf
в текстовом редакторе:
sudoedit /etc/ssh/sshd_config.d/01-sftp.conf
Добавим следующие строки:
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory %h
AllowTCPForwarding no
ForceCommand internal-sftp
Сохраним изменения и перезапустим sshd:
sudo systemctl restart sshd.service
Как безвозвратно уничтожить файл?¶
Для уничтожения данных можно использовать штатную утилиту shred из пакета GNU Coreutils:
shred -u -v /путь/к/файлу.txt
Восстановить такой файл будет практически невозможно ибо сектора диска, на которых он располагался, будут многократно перезаписаны случайной последовательностью, а затем заполнены нулями.
Можно лишь уничтожить содержимое всего диска?¶
Да, для этого можно использовать уже упомянутую выше утилиту shred:
sudo shred -v /dev/sdX
Здесь /dev/sdX — устройство, которое будет очищено. На больших HDD процесс займёт много времени.
Как уничтожить файл на SSD?¶
Для безвозвратного удаления файла на SSD накопителе достаточно просто удалить его штатным средством системы и дождаться выполнения процедуры TRIM, которая физически забьёт ячейки, которые им использовались, нулями.
Если не используется TRIM реального времени, принудительно запустить этот процесс на всех твердотельных накопителях можно так:
sudo systemctl start fstrim.service
Как полностью очистить SATA SSD без возможности восстановления?¶
Все модели SATA SSD поддерживают специальную ATA-команду Secure Erase, при получении которой контроллер обязан полностью очистить все ячейки диска и вернуть все параметры к настройкам по умолчанию.
Установим утилиту hdparm:
sudo dnf install hdparm
Далее /dev/sdb -- это устройство SSD накопителя, который мы планируем очистить. Очищать устройство, на котором установлена система, можно только после загрузки с Fedora LiveUSB.
Убедимся, что UEFI BIOS не блокирует функцию самоуничтожения диска:
sudo hdparm -I /dev/sdb
Если в выводе присутствует frozen, значит диск блокируется и сначала нужно её снять.
В большинстве реализаций UEFI BIOS сбросить блокировку с SATA накопителей можно лишь посредством "горячего" подключения устройства. Необходимо включить компьютер, не подсоединяя SATA-кабель к накопителю, а затем уже после загрузки системы подключить его.
Если всё сделано верно, в выводе обнаружим not frozen и сможем продолжить процесс.
Установим специальный пароль блокировки накопителя, т.к. без передачи верного пароля команда ATA Secure Erase будет проигнорирована:
sudo hdparm --user-master u --security-set-pass FooBar /dev/sdb
Ни в коем случае не следует устанавливать новое значение пароля в виде пустой строки, либо NULL, т.к. на многих материнских платах это приведёт к невозможности загрузки с этого устройства, а равно как и его смены.
Запустим процесс очистки:
sudo hdparm --user-master u --security-erase FooBar /dev/sdb
Через некоторое время (зависит от объёма и производительности контроллера устройства) диск будет полностью очищен, а все настройки, включая пароль блокировки, сброшены.
В случае если произошёл сбой очистки, сбросим установленный пароль вручную:
sudo hdparm --user-master u --security-disable FooBar /dev/sdb
Как рассчитываются права доступа для новых файлов и каталогов?¶
Права доступа (chmod) в GNU/Linux рассчитываются в по формуле $default-chmod - $current-umask
. $default-chmod
для файлов равен 0666
, а для каталогов -- 0777
.
В Fedora umask по умолчанию для пользоватьских учётных записей равен 0002
(ведущий нуль в chmod означает использование восьмеричной системы счисления).
Таким образом, chmod для новых файлов 0666 - 0002 = 0664
(-rw-rw--r--
), а для каталогов -- 0777 - 0002 = 0775
(drwxrwxr-x
).
Можно ли включить поддержку российской криптографии в Fedora?¶
См. здесь.
Как включить рандомизацию MAC адресов при подключении к Wi-Fi точкам в Fedora?¶
Network Manager поддерживает два сценария рандомизации MAC адресов:
генерирование уникального псевдослучайного MAC адреса для каждого соединения при загрузке системы (параметр
stable
). Это избавит от проблем с переподключением к публичным хот-спотам и небходимости повторно проходить аутентификацию в captive-порталах;генерирование уникального псевдослучайного MAC адреса для каждого соединения при каждом переподключении (параметр
random
). Наиболее безопасно, но может вызывать описанные выше проблемы.
Профиль stable. Файл 00-macrandomize-stable.conf
:
[device]
wifi.scan-rand-mac-address=yes
[connection]
wifi.cloned-mac-address=stable
ethernet.cloned-mac-address=stable
connection.stable-id=${CONNECTION}/${BOOT}
Профиль random. Файл 00-macrandomize-random.conf
:
[device]
wifi.scan-rand-mac-address=yes
[connection]
wifi.cloned-mac-address=random
ethernet.cloned-mac-address=random
Для применения одной из конфигураций создадим в каталоге /etc/NetworkManager/conf.d
файл с выбранным профилем, после чего перезапустим Network Manager:
sudo systemctl restart NetworkManager
Для отключения рандомизации и возвращения настроек по умолчанию достаточно просто удалить созданный файл и перезапустить Network Manager.
Как добавить собственный удостоверяющий центр в список доверенных?¶
Для добавления нового удостоверяющего центра необходимо скопировать файл его сертификата в формате PEM или DER в каталог /etc/pki/ca-trust/source/anchors
, после чего выполнить:
sudo update-ca-trust
Следует помнить, что данное действие не будет распространяться на браузер Mozilla Firefox, имеющий собственную базу доверенных корневых УЦ.
Как внести удостоверяющий центр в список запрещённых?¶
Для добавления удостоверяющего центра в список заблокированных необходимо скопировать файл его сертификата в формате PEM или DER в каталог /etc/pki/ca-trust/source/blacklist
, после чего выполнить:
sudo update-ca-trust
Следует помнить, что данное действие не будет распространяться на браузер Mozilla Firefox, имеющий собственную базу доверенных корневых УЦ.
Как убрать пароль шифрования закрытого RSA ключа средствами OpenSSL?¶
Воспользуемся утилитой openssl для расшифровки:
openssl rsa -in foo-bar.key -out foo-bar-nopass.key
Здесь foo-bar.key -- имя файла с закрытым RSA ключом, который необходимо расшифровать. После ввода верного пароля, результат появится в файле foo-bar-nopass.key.
Как установить или изменить пароль шифрования закрытого RSA ключа средствами OpenSSL?¶
Воспользуемся утилитой openssl для установки или изменения пароля:
openssl rsa -aes256 -in foo-bar-nopass.key -out foo-bar.key
Здесь -aes256 -- используемый алгоритм шифрования (AES-256), foo-bar-nokey.key -- имя файла с закрытым RSA ключом, пароль которого нужно задать или изменить. Результат будет сохранён в файле foo-bar.key.
Как посредством sudo запустить сразу несколько команд?¶
Команда sudo предназначена для запуска исключительно одной команды от имени другого пользователя, поэтому если необходимо запустить сразу несколько команд, либо осуществлять перенаправление вывода, придётся использовать другой вариант:
sudo bash -c "first | seconds && third"
В данном примере все три приложения будут запущены с правами суперпользователя, причём стандартный вывод first перенаправляется в стандартный ввод second через канал (pipe) и при успешном завершении запустится процесс third.
Как запускать WireShark без предоставления ему прав суперпользователя?¶
WireShark поддерживает запуска как с правами суперпользователя, так и без них. Добавим свой аккаунт в группу wireshark:
sudo usermod -a -G wireshark $(whoami)
Изменения вступят в силу при следующем входе в систему.
Как сгенерировать криптостойкий пароль без использования стороннего ПО?¶
Для того, чтобы сгенерировать криптостойкий пароль не обязательно устанавливать и применять специальные утилиты.
Воспользуемся штатными средствами, входящими в базовый пакет GNU Coreutils:
cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 20 | head -n 4
Данный пример сгенерирует 4 криптостойких пароля по 20 символов каждый.
Как получить список вошедших в систему пользователей?¶
Список вошедших в систему пользователей можно получить посредством утилиты who:
who
Как получить список вошедших в систему пользователей и информацию об их деятельности?¶
Список вошедших в систему пользователей и базовую информацию об их действиях можно получить посредством утилиты w:
w
Как получить информацию обо всех входах в систему?¶
Информацию о любых попытках входа в систему можно получить посредством утилиты last:
last
Как получить доступ к COM портам без наличия прав суперпользователя?¶
Для того, чтобы получить доступ к COM порту (RS-232) без наличия прав суперпользователя, необходимо добавить свой аккаунт в группу dialout:
sudo usermod -a -G dialout $(whoami)
Изменения вступят в силу при следующем входе в систему.
Можно ли сохранить пароль GnuPG ключа в связке ключей KWallet?¶
Да. Установим пакет kwalletcli:
sudo dnf install kwalletcli
Откроем файл ~/.gnupg/gpg-agent.conf
в текстовом редакторе и добавим строку:
pinentry-program /usr/bin/pinentry-kwallet
Выполним выход из системы. При следующем вводе пароля расшифровки закрытого ключа, KWallet предложит сохранить его в связке ключей.
Безопасно ли использовать менеджеры связки ключей GnuPG с графическим интерфейсом?¶
Да.
Можно ли одновременно использовать Kleopatra и KGpg?¶
Нет, не следует использовать одновременно разные графические менеджеры, т.к. настройки, вносимые ими в файл конфигурации GnuPG, будут конфликтовать и приводить к непредсказуемым последствиям.
Пользователям KDE мы рекомендуем Kleopatra, как наиболее современную и функциональную оболочку.
Какой токен для безопасного хранения GnuPG ключей вы можете порекомендовать?¶
Мы рекомендуем использовать токены Nitrokey Pro 2, т.к. они имеют как открытое железо, так и софт (спецификации, прошивки, а также программное обеспечение опубликовано под свободными лицензиями).
Как работать с токеном или смарт-картой из консоли?¶
Для работы с аппаратным токеном будем использовать утилиту GnuPG2.
Вставим устройство в USB порт компьютера или ноутбука, либо смарт-карту в считыватель, затем выведем его статус:
gpg2 --card-status
Установим PIN-код:
gpg2 --change-pin
Перейдём в режим работы с токеном:
gpg2 --card-edit
Переключимся в режим администратора:
admin
Сгенерируем новую связку ключей GnuPG на токене:
generate
GnuPG2 запросит стандартные данные: имя и адрес электронной почты владельца ключевой пары, срок действия, а также указать стойкость шифра. Следует помнить, что размер памяти токена сильно ограничен, поэтому если генерировать исключительно 4096 битные ключи, место быстро закончится (например Nitrokey Pro 2 вмещает лишь 3 ключевых пары со стойкостью шифра 4096 бит).
Также будет предложено сохранить копию секретного ключа на диск. Для максимальной безопасности лучше отказаться от этого.
Проверим сгенерировались ли ключи:
list
Если всё сделано верно, то новая ключевая пара появится в списке немедленно.
Как использовать токен для аутентификации SSH?¶
Сначала нам необходимо добавить в нашу ключевую пару особый ключ для аутентификации. По умолчанию он не создаётся.
Выведем список доступных ключевых пар:
gpg2 --list-secret-keys
Откроем наш основной ключ в режиме редактирования:
gpg2 --edit-key XXXXXXXXX
Здесь XXXXXXXXX -- ID нашего ключа.
Добавим новый подключ:
addkey
В списке атрибутов оставим только Authentication и обязательно отключим Encrypt и Sign.
Выберем созданный подключ и переместим его на токен:
key 2
keytocard
Экспортируем публичный ключ SSH из созданного подключа для аутентификации:
gpg2 --export-ssh-key XXXXXXXXX --output ~/.ssh/id_rsa.pub
Здесь XXXXXXXXX -- ID нашего ключа.
Активируем поддержку SSH агента в GnuPG агенте, добавив в конец файла ~/.gnupg/gpg-agent.conf
следующую строку:
enable-ssh-support
Настроим автоматический запуск GnuPG агента вместе с системой, создав скрипт ~/bin/gpg-agent.sh
:
#!/usr/bin/sh
export GPG_TTY="$(tty)"
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
gpgconf --launch gpg-agent
Выдадим ему права на выполнение:
chmod +x ~/bin/gpg-agent.sh
Добавим этот скрипт а автозагрузку используемой DE, либо в ~/.bashrc
и выполним новый вход в систему.
Можно ли переместить на токен уже имеющуюся ключевую пару GnuPG?¶
Да. Выведем список доступных ключевых пар:
gpg2 --list-secret-keys
Откроем наш основной ключ в режиме редактирования:
gpg2 --edit-key XXXXXXXXX
Здесь XXXXXXXXX -- ID нашего ключа.
Выберем каждый подключ и переместим его на токен:
key 1
keytocard
Повторим для всех оставшихся подключей.
Отключим токен от компьютера или ноутбука, затем выполним удаление локального секретного ключа:
gpg2 --delete-secret-key XXXXXXXXX
Здесь XXXXXXXXX -- ID нашего ключа.
Как просканировать хост на наличие работающих сервисов?¶
Стандартное сканирование самых популярных портов:
nmap -A -T4 -Pn 127.0.0.1
Стандартное сканирование портов в указанном диапазоне (параметр -p 1-100
):
nmap -A -T4 -Pn -p 1-100 127.0.0.1
Стандартное сканирование всего диапазона портов (параметр -p-
):
nmap -A -T4 -Pn -p- 127.0.0.1
Стандартное сканирование всего диапазона портов, включая UDP (параметр -sU
):
sudo nmap -sU -A -T4 -Pn -p- 127.0.0.1
Сканирование UDP требует прав суперпользователя.
Как добавить ключевой файл для разблокировки зашифрованного LUKS раздела?¶
Создадим каталог для хранения ключей /etc/keys
(может быть любым):
sudo mkdir -p /etc/keys
Сгенерируем ключевой файл foo-bar.key
размером 4 КБ на основе системного генератора псевдослучайных чисел:
sudo dd if=/dev/urandom of=/etc/keys/foo-bar.key bs=1024 count=4
Установим корректные права доступа:
sudo chown root:root /etc/keys/foo-bar.key
sudo chmod 0400 /etc/keys/foo-bar.key
Добавим ключ в свободный слот LUKS заголовка зашифрованного раздела:
sudo cryptsetup luksAddKey /dev/sda2 /etc/keys/foo-bar.key
Утилита cryptsetup запросит ввод мастер-пароля.
Здесь /dev/sda2 -- устройство зашифрованного LUKS тома, для которого требуется добавить ключевой файл.
Как удалить ключевой файл разблокировки зашифрованного LUKS раздела?¶
Если разблокировка по ключевому файлу более не требуется, его можно удалить.
Удалим слот с ключом foo-bar.key
из LUKS заголовка зашифрованного раздела:
sudo cryptsetup luksRemoveKey /dev/sda2 /etc/keys/foo-bar.key
Надёжно уничтожим ключевой файл:
sudo shred -u -v /etc/keys/foo-bar.key
Здесь /dev/sda2 -- устройство зашифрованного LUKS тома, у которого требуется удалить слот с ключевым файлом.
Как настроить автоматическую расшифровку LUKS разделов при загрузке?¶
Откроем файл /etc/crypttab
в редакторе по умолчанию:
sudoedit /etc/crypttab
Добавим в конец файла строку вида:
foo-bar UUID=XXXXXX /etc/keys/foo-bar.key luks
Здесь foo-bar -- внутреннее имя, которое будет использоваться dev-mapper, XXXXXX -- UUID диска, /etc/keys/foo-bar.key -- полный путь к ключевому файлу. При шифровании SSD накопителя вместо параметра luks следует использовать discard.
Откроем файл /etc/fstab
:
sudoedit /etc/fstab
Добавим в конец строку вида:
/dev/mapper/foo-bar /media/data ext4 defaults 1 2
Здесь foo-bar -- внутреннее имя, указанное ранее в crypttab, /media/data -- точка монтирования, а ext4 -- используемая файловая система.
Если всё сделано верно, то при следующей загрузке раздел будет смонтирован автоматически без запроса пароля.
Я забыл пароль суперпользователя. Как мне его сбросить?¶
При наличии доступа к sudo, пароль суперпользователя можно изменить в штатном режиме.
Если текущий пользователь не может использовать sudo, но есть физический доступ к устройству, см. здесь.
Можно ли отключить автоматическое монтирование устройств LUKS при загрузке?¶
Да. Для этого добавим параметр noauto
для соответствующей записи в файле /etc/crypttab
:
foo-bar UUID=XXXXXX /etc/keys/foo-bar.key noauto
Здесь foo-bar -- внутреннее имя, которое будет использоваться dev-mapper, XXXXXX -- UUID диска, /etc/keys/foo-bar.key -- полный путь к ключевому файлу. Параметр noauto должен применяться только совместно с ключом.
Данное зашифрованное устройство будет смонтировано и автоматически расшифровано при первой попытке доступа к нему.
Как работать с TrueCrypt контейнерами в Fedora?¶
Из-за несвободной лицензии TrueCrypt и все его форки (в т.ч. VeraCrypt) не могут быть добавлены в репозитории Fedora, однако в настоящее время утилита cryptsetup полностью поддерживает работу с созданными ими контейнерами.
Cryptsetup поддерживает монтирование как TrueCrypt, так и VeraCrypt томов (файлы и устройства), а также умеет их администрировать (управлять ключами, паролями). Ограничение лишь одно -- нельзя создавать новые зашифрованные данными механизмами контейнеры.
Как смонтировать TrueCrypt контейнер в Fedora?¶
Откроем файл контейнера средствами cryptsetup:
sudo cryptsetup --type tcrypt open /path/to/container.tc foo-bar
Смонтируем файловую систему:
sudo mkdir /media/data
sudo mount -t auto /dev/mapper/foo-bar /media/data
По окончании работы произведём размонтирование:
sudo umount /media/data
sudo rmdir /media/data
Закроем файл контейнера:
sudo cryptsetup --type tcrypt close /dev/mapper/foo-bar
Здесь /path/to/container.tc полный путь к файлу контейнера на диске (либо зашифрованному устройству), а foo-bar -- внутреннее имя для dev-mapper.
Как смонтировать VeraCrypt контейнер в Fedora?¶
Откроем файл контейнера средствами cryptsetup:
sudo cryptsetup --veracrypt --type tcrypt open /path/to/container.hc foo-bar
Смонтируем файловую систему:
sudo mkdir /media/data
sudo mount -t auto /dev/mapper/foo-bar /media/data
По окончании работы произведём размонтирование:
sudo umount /media/data
sudo rmdir /media/data
Закроем файл контейнера:
sudo cryptsetup --veracrypt --type tcrypt close /dev/mapper/foo-bar
Здесь /path/to/container.hc полный путь к файлу контейнера на диске (либо зашифрованному устройству), а foo-bar -- внутреннее имя для dev-mapper.
Как настроить автоматическое монтирование VeraCrypt томов при загрузке?¶
Откроем файл /etc/crypttab
в редакторе по умолчанию:
sudoedit /etc/crypttab
Добавим в конец файла строку вида:
foo-bar UUID=XXXXXX /etc/keys/foo-bar.key tcrypt-veracrypt
Здесь foo-bar -- внутреннее имя, которое будет использоваться dev-mapper, XXXXXX -- UUID диска, либо полный путь к файлу контейнера, /etc/keys/foo-bar.key -- полный путь к ключевому файлу, либо файлу с паролем (разрыв строки в конце файла не ставится).
Откроем файл /etc/fstab
:
sudoedit /etc/fstab
Добавим в конец строку вида:
/dev/mapper/foo-bar /media/data auto defaults,x-systemd.automount 0 0
Здесь foo-bar -- внутреннее имя, указанное ранее в crypttab, а /media/data -- точка монтирования.
Если всё сделано верно, то при следующей загрузке зашифрованный VeraCrypt том будет смонтирован автоматически.
Как работать с BitLocker контейнерами в Fedora?¶
Начиная с версии 2.3.0 утилита cryptsetup поддерживает работу с зашифрованными BitLocker томами.
Допускается монтирование, базовые операции с ними, но не создание новых.
Как смонтировать BitLocker контейнер в Fedora?¶
Откроем устройство, зашифрованное BitLocker, средствами cryptsetup:
sudo cryptsetup --type bitlk open /dev/sdX1 foo-bar
Смонтируем файловую систему:
sudo mkdir /media/data
sudo mount -t auto /dev/mapper/foo-bar /media/data
По окончании работы произведём размонтирование:
sudo umount /media/data
sudo rmdir /media/data
Закроем файл контейнера:
sudo cryptsetup --type bitlk close /dev/mapper/foo-bar
Здесь /dev/sdX1 -- зашифрованное BitLocker устройство, а foo-bar -- внутреннее имя для dev-mapper.
Как настроить автоматическое монтирование BitLocker томов при загрузке?¶
Откроем файл /etc/crypttab
в редакторе по умолчанию:
sudoedit /etc/crypttab
Добавим в конец файла строку вида:
foo-bar UUID=XXXXXX /etc/keys/foo-bar.key bitlk
Здесь foo-bar -- внутреннее имя, которое будет использоваться dev-mapper, XXXXXX -- UUID диска, /etc/keys/foo-bar.key -- полный путь к ключевому файлу, либо файлу с паролем (разрыв строки в конце файла не ставится).
Откроем файл /etc/fstab
:
sudoedit /etc/fstab
Добавим в конец строку вида:
/dev/mapper/foo-bar /media/data auto defaults,x-systemd.automount 0 0
Здесь foo-bar -- внутреннее имя, указанное ранее в crypttab, а /media/data -- точка монтирования.
Если всё сделано верно, то при следующей загрузке зашифрованный BitLocker том будет смонтирован автоматически.
Где хранятся установленные пользователем контексты SELinux?¶
Заданные пользователем нестандартные контексты, а также переопределения хранятся внутри каталога /etc/selinux/targeted/contexts/files
в следующих файлах:
file_contexts.local
-- текстовый формат;
file_contexts.local.bin
-- скомпилированный бинарный формат.
Не следует их править в текстовых, либо шестнадцатиричных редакторах, т.к. это может привести к сбою в политиках SELinux и сбросу настроек по умолчанию. Вместо этого необходимо использовать инструмент semanage.
Как получить список установленных пользователем контекстов SELinux?¶
Выведем полный список нестандартных контекстов, а также переопределений политик SELinux:
sudo semanage fcontext --list -C
Как удалить пользовательские контексты SELinux?¶
Удалим конкретный нестандартный контекст, либо переопределение политик SELinux:
sudo semanage fcontext -d "/foo/bar(/.*)?"
Удалим все нестандартный контексты, а также переопределения политик SELinux:
sudo semanage fcontext -D
Для полного вступления изменений в силу рекомендуется сбросить контекст SELinux.
Как создать зашифрованный контейнер на диске?¶
При помощи утилиты dd создадим пустой файл для хранения криптоконтейнера размером в 1 ГБ:
sudo dd if=/dev/zero bs=1M count=1024 of=/media/data/foo-bar.dat
Минимальный размер создаваемого образа должен быть не меньше 32 МБ, т.к. противном случае возникнет ошибка Requested offset is beyond real size of device.
Здесь /media/data/foo-bar.dat -- полный путь к файлу на диске.
Создадим зашифрованный LUKS контейнер:
sudo cryptsetup --verify-passphrase luksFormat /media/data/foo-bar.dat -c aes-xts-plain64 -s 256 -h sha512
Подтвердим процесс создания посредством набора на клавиатуре YES в верхнем регистре, затем укажем пароль, который будет использоваться для шифрования.
Загрузим контейнер и расшифруем содержимое:
sudo cryptsetup luksOpen /media/data/foo-bar.dat foo-bar
Создадим файловую систему ext4:
sudo mkfs -t ext4 -m 1 -L foo-bar /dev/mapper/foo-bar
Завершим сеанс работы с контейнером:
sudo cryptsetup luksClose /dev/mapper/foo-bar
Как смонтировать зашифрованный файловый контейнер?¶
Загрузим криптоконтейнер и расшифруем содержимое:
sudo cryptsetup luksOpen /media/data/foo-bar.dat foo-bar
Создадим каталог для точки монтирования:
sudo mkdir /media/foo-bar
Смонтируем файловую систему:
sudo mount -t auto /dev/mapper/foo-bar /media/foo-bar
По окончании работы произведём размонтирование:
sudo umount /media/foo-bar
Удалим каталог точки монтирования:
sudo rmdir /media/foo-bar
Завершим сеанс работы с контейнером:
sudo cryptsetup luksClose /dev/mapper/foo-bar
Как быстро уничтожить содержимое LUKS контейнера?¶
Быстро и безопасно уничтожим ключи шифрования заголовка LUKS-контейнера:
sudo cryptsetup luksErase /dev/sdX1
Здесь /dev/sdX1 -- зашифрованный раздел диска, данные с которого требуется уничтожить. Он не должен быть смонтирован. Ввод пароля не требуется.
После выполнения данного действия все ключевые слоты LUKS-контейнера будут заполнены нулями и доступ к данным, хранящимся на данном разделе, станет невозможен даже при знании верного пароля или наличии ключа.
Внимание! Это действие не затирает содержимое физически, поэтому после его использования рекомендуется осуществить эту процедуру самостоятельно.
Можно ли использовать TPM для разблокировки LUKS контейнера?¶
См. здесь.
Как настроить работу Samba с SELinux?¶
См. здесь.
Как защитить SSH от возможных MITM-атак?¶
Для защиты от MITM-атак в протоколе SSH применяется проверка отпечатков публичного ключа сервера в момент установки рукопожатия с эталоном, сохранённым на клиенте.
Во время первого подключения пользователю предлагается проверить отпечаток сервера и либо разрешить, либо отклонить соединение.
После одобрения, они вместе с IP-адресом сохраняются в файле ~/.ssh/known_hosts
и при следующих подключениях проверяется их действительность. В случае изменения, например из-за проведения злоумышленником атаки "человек посередине", соединение не устанавливается, а пользователю выводится соответствующее сообщение об ошибке.
К сожалению, ручная проверка отпечатка мало кем производится, поэтому был придуман новый, более надёжный способ -- размещение публичных ключей в виде особых SSHFP записей DNS.
При использовании данного метода, при подключении будет проверяться соответствие ключей, полученных от сервера, записям из SSHFP для конкретного домена. При этом конечно же необходимо использовать надёжные DNS-резолверы с поддержкой шифрования DNS-over-TLS, а также рекомендуется подписать DNS-зону DNSSEC.
С помощью утилиты ssh-keygen, на сервере сгенерируем DNS-записи для домена example.org:
ssh-keygen -r example.org
Добавим их в настройки DNS через панель управления регистратора домена или хостера и подождём несколько часов до полной синхронизации между серверами.
Проверим корректность SSHFP-записей:
dig +nocmd +noquestion +nostats +noheader SSHFP example.org
Если всё верно, активируем работу функции на каждом SSH-клиенте, добавив в файл ~/.ssh/config
следующие строки:
Host example
HostName example.org
Port 22
User user
VerifyHostKeyDNS yes
Подключимся к серверу по доменному имени (в случае использования прямого IP-адреса, будет выполняться классическая проверка по файлу known_hosts):
ssh example
Как определить версию LUKS конкретного криптоконтейнера?¶
Версия LUKS всегда указана в разделе Version информации о шифровании.
Как создать резервную копию заголовка LUKS?¶
Загрузим систему с LiveUSB и создадим резервную копию заголовка тома /dev/sda2 на внешнем накопителе данных:
sudo cryptsetup luksHeaderBackup /dev/sda2 --header-backup-file /media/foo-bar/luks-header.img
Как восстановить резервную копию заголовка LUKS?¶
Загрузим систему с LiveUSB и восстановим резервную копию заголовка тома /dev/sda2 с внешнего накопителя данных:
sudo cryptsetup luksHeaderRestore /dev/sda2 --header-backup-file /media/foo-bar/luks-header.img
Как осуществить апгрейд версии LUKS?¶
Загрузим систему с LiveUSB и создадим резервную копию заголовка на внешнем накопителе данных.
Выведем текущую версию и убедимся, что она равна 1:
sudo cryptsetup luksDump /dev/sda2 | grep 'Version'
Произведём апгрейд LUKS до версии 2:
sudo cryptsetup convert /dev/sda2 --type luks2
Как усилить защиту ключа LUKS?¶
Загрузим систему с LiveUSB и создадим резервную копию заголовка на внешнем накопителе данных.
Выведем текущую версию LUKS и убедимся, что значение не ниже 2 (если это не так, сначала осуществим преобразование):
sudo cryptsetup luksDump /dev/sda2 | grep 'Version'
Выведем текущий PBKDF:
sudo cryptsetup luksDump /dev/sda2 | grep 'PBKDF'
Осуществим преобразование в Argon2:
sudo cryptsetup luksConvertKey /dev/sda2 --pbkdf argon2id
Как усилить надёжность шифрования LUKS?¶
Загрузим систему с LiveUSB и создадим полную посекторную копию раздела на внешнем накопителе данных.
Выведем информацию о шифровании выбранного тома:
sudo cryptsetup luksDump /dev/sda2 | egrep 'Version|Cipher|MK bits'
Перешифруем весь том в формате LUKS2 с использованием алгоритма AES-256-XTS-PLAIN64:
sudo cryptsetup-reencrypt /dev/sda2 --type luks2 --pbkdf argon2id --cipher aes-xts-plain64 --key-size 512 --hash sha512
Как активировать TRIM для открытых вручную LUKS-контейнеров?¶
Зашифрованные LUKS-контейнеры, открытые вручную при помощи cryptsetup open
, по умолчанию не будут поддерживать процедуру TRIM, поэтому рассмотрим несколько способов исправить это.
Способ 1. Передадим параметр ядра Linux rd.luks.options=discard
.
Теперь все контейнеры, открытые утилитой, будут поддерживать TRIM. Однако действие не распространяется на указанные в файле /etc/crypttab
, т.к. он имеет более высокий приоритет.
Способ 2. Воспользуемся параметром командной строки --allow-discards
.
LUKS версии 2 поддерживает возможность принудительно задать использование процедуры TRIM внутри контейнера при любых операциях монтирования. В LUKS1 это не реализовано и поэтому работать не будет.
Для LUKS1 (вводится при каждом открытии тома):
sudo cryptsetup --allow-discards open /path/to/container foo-bar
Для LUKS2 (вводится только один раз):
sudo cryptsetup --allow-discards --persistent open /path/to/container foo-bar
Убедимся, что в информации о шифровании, в разделе Flags, появился allow-discards.
Как выполнить TRIM для открытых вручную LUKS-контейнеров?¶
Функция автоматической очистки неиспользуемые данных TRIM выполняется либо в реальном времени, либо по таймеру, но только для автоматически смонтированных и указанных в файле /etc/crypttab
разделов.
Для зашифрованных LUKS-контейнеров, открытых вручную при помощи cryptsetup open
, её необходимо сначала активировать, а затем периодически запускать утилиту fstrim
:
sudo fstrim -v /media/foo-bar
Здесь /media/foo-bar -- это точка монтирования.
Как запретить приложению доступ к сети?¶
Иногда возникает необходимость ограничить какому-либо приложению доступ к сети Интернет.
Установим ограничение пространствами имён ядра (более подробную информацию о них можно получить в man namespaces
) при помощи утилиты unshare:
unshare -r -n foo-bar
Здесь вместо foo-bar укажем приложение, которое требуется запустить.
Как настроить хранение SSH ключей в TPM?¶
См. здесь.