Проверка и безопасное применение настроек Debian и Ubuntu по требованиям ФСТЭК России.
Статус: выпуск 1.0.10. Полное соответствие требованиям ФСТЭК не заявляется.
- Проверяет (CHECK) настройки системы по требованиям документов ФСТЭК; система при этом не меняется.
- Исправляет (APPLY) то, что можно изменить автоматически и безопасно: сначала показывает план (
--dry-run), при ошибке возвращает прежнее состояние. Остальное выводит блоком «требуется решение администратора» с готовой подсказкой. - Отчитывается — таблица в терминале, JSON для автоматизации, журнал применения.
Один файл securelinux-policy.sh, без установки и зависимостей кроме Bash и Python 3 из состава ОС.
Быстрый старт · Что проверяется · Прогресс · Ограничения · Применение изменений · Поддерживаемые системы · Безопасность · Обновление · Состав публикации · Документация
wget https://github.com/rasav65/SecureLinux-Policy/archive/refs/heads/main.tar.gz
tar -xzf main.tar.gz
cd SecureLinux-Policy-main1. Целостность скрипта
sha256sum -c securelinux-policy.sh.sha2562. Проверка, без изменений
sudo /bin/bash -p ./securelinux-policy.sh --check3. Только нарушения
sudo /bin/bash -p ./securelinux-policy.sh --check --failed4. Что будет изменено
sudo /bin/bash -p ./securelinux-policy.sh --apply --dry-run5. Применить
sudo /bin/bash -p ./securelinux-policy.sh --apply6. Нарушения после применения и причины, по которым они оставлены
sudo /bin/bash -p ./securelinux-policy.sh --report⚠ Перед
--applyна рабочем сервере выполните--checkи--apply --dry-runи сделайте снимок (snapshot) или резервную копию системы: встроенного отката всех изменений нет.
Запуск только через /bin/bash -p: так сохраняется нужный режим Bash и не требуется права исполнения файла. Подключение через source не поддерживается.
| Ключ | Назначение |
|---|---|
--check |
проверить все требования |
--check --failed |
показать только нарушения |
--check --format json |
отчёт JSON |
--check --format raw |
построчный формат TSV для автоматизации |
--report |
краткий отчёт: нарушения и причины, по которым они оставлены без изменений |
--apply --dry-run |
рассчитать изменения без применения |
--apply |
применить поддерживаемые изменения |
--apply --skip ID[,ID…] |
применить, кроме перечисленных пунктов; ID — из колонки id или control списка --list |
--apply --containers N |
хост Kubernetes или Docker: user.max_user_namespaces=N вместо 0 (см. ниже) |
--list |
список пунктов: id, источник, имя control, есть ли автоисправление (apply/check) |
--build-info |
сведения о сборке |
--provenance [ID] |
источник требования для всех проверок или одной |
--version |
версия |
--help |
справка |
| Область | Пункты требований ФСТЭК | Проверок | Автоисправление |
|---|---|---|---|
| Учётные записи, su и sudo | fstec-linux-2022 2.1.1, 2.2.1, 2.2.2 |
3 | 2 |
| Вход по SSH | fstec-linux-2022 2.1.2; fstec-configuration-2026 8.4, 9.1 |
5 | 4 |
| Права доступа к файлам и каталогам | fstec-linux-2022 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.3.5, 2.3.6, 2.3.7, 2.3.8, 2.3.9, 2.3.10, 2.3.11 |
19 | 18 |
| Параметры ядра (sysctl) | fstec-linux-2022 2.4.1, 2.4.2, 2.4.8, 2.5.2, 2.5.4, 2.5.5, 2.5.6, 2.5.7, 2.5.8, 2.5.10, 2.5.11, 2.6.1, 2.6.2, 2.6.3, 2.6.4, 2.6.5, 2.6.6 |
17 | 17 |
| Параметры загрузки ядра | fstec-linux-2022 2.4.3, 2.4.4, 2.4.5, 2.4.6, 2.4.7, 2.5.1, 2.5.3, 2.5.9 |
10 | 10 |
| Сетевые службы | fstec-configuration-2026 11.2 |
3 | 3 |
| Парольная политика | fstec-linux-2022 2.3.11; fstec-configuration-2026 1.1, 1.2 |
16 | 15 |
| Регистрация событий (auditd) | fstec-logging-2025 appendix2-linux:1, appendix2-linux:2, appendix2-linux:3, appendix2-linux:4, main:5 |
13 | 12 |
Проверок больше, чем пунктов: пункт с несколькими параметрами проверяется по каждому. «Автоисправление» — проверки, по которым --apply может изменить систему; часть из них в отдельных случаях выводится блоком «требуется решение администратора».
Полный перечень пунктов с формулировками источников — в карте покрытия.
| Документ ФСТЭК | Строк | Закрыто контролями | Закрыто диспозицией | Открыто |
|---|---|---|---|---|
Безопасная настройка ОС Linux (fstec-linux-2022) |
40 | 40 | 0 | 0 |
Типовые ошибки конфигурации (fstec-configuration-2026) |
49 | 5 | 44 | 0 |
Регистрация событий безопасности (fstec-logging-2025) |
14 | 9 | 5 | 0 |
Защита сетевого периметра (fstec-perimeter-2026) |
35 | 0 | 35 | 0 |
Управление уязвимостями (fstec-vulnerability-management-2023) |
52 | 0 | 52 | 0 |
Анализ уязвимостей (fstec-vulnerability-analysis-2025) |
61 | 0 | 61 | 0 |
Оценка критичности уязвимостей (fstec-vulnerability-criticality-2025) |
28 | 0 | 28 | 0 |
Тестирование обновлений безопасности (fstec-security-update-testing-2022) |
70 | 0 | 70 | 0 |
| Итого | 349 | 54 | 295 | 0 |
Закрыто 349 из 349 строк индекса (100%). Контролей 86, из них с автоматическим исправлением (APPLY) — 81 (94%).
Строка индекса закрывается контролем (проверка CHECK) или диспозицией — обоснованным решением, что автоматическая проверка хоста к строке не применяется (процессные требования, сетевое оборудование, решения администратора). Проценты показывают охват индекса и не означают полного соответствия требованиям ФСТЭК.
- Закрытая строка индекса — не всегда проверка. Строку источника выполняет либо проверка хоста, либо обоснованное решение, что проверять на хосте нечего: процессные требования организации, сетевое оборудование, Windows, а также СУБД и Samba, которых нет в чистой установке. Скрипт проверяет систему только по строкам, закрытым контролями.
- Автоисправление — не всегда исправление. Часть пунктов по условию выводится блоком «требуется решение администратора» (например, вход по паролю по SSH без ключа у администраторов,
fs.suid_dumpableпод управлением Apport). Параметры загрузкиmitigations,tsx,debugfsавтоматически не включаются никогда: они влияют на производительность и отладку. - Только проверка, без автоисправления: состав правил sudo и права файлов запущенных процессов (решает администратор), свободное место под журнал auditd (разметка диска), пароль старше 90 дней (меняет владелец учётной записи). Запрет входа root по SSH (
fstec-linux-20222.1.2) выполняет автоисправлениеfstec-configuration-20269.1. - Вне проекта, хотя применимо к Debian и Ubuntu: межсетевой экран (
fstec-configuration-20267.3) и правило auditd о записи во всю файловую систему (fstec-configuration-202610.5): по замеру журнал за три месяца вырастает до 26–49 GiB. - Смена пароля от root. Проверки, которые сравнивают новый пароль со старым, при
sudo passwd <пользователь>не работают: root не вводит старый пароль. Сложность, длина и история паролей при этом проверяются. - Вывод на русском языке в кодировке UTF-8: для кириллицы нужен терминал с UTF-8.
--apply изменяет только то, для чего есть проверенный механизм, и для каждого пункта сообщает исход:
| Исход | Значение |
|---|---|
would |
будет изменено (только при --dry-run) |
done |
изменено |
boot |
изменено, вступит в силу после перезагрузки |
ok |
уже соответствует, изменений нет |
skip |
не изменено: пункт исключён ключом --skip |
block |
не изменено: нужно решение администратора; под таблицей — причина и подсказка |
abort |
не изменено: условие применения не выполнено (причина — в отчёте) |
fail |
изменение не удалось; прежнее состояние восстановлено, а если восстановить не удалось — в отчёте FAILED_COMPENSATION |
Решение администратора требуется, когда автоматическое изменение может нарушить работу системы, например:
- параметры загрузки ядра
mitigations,tsx,debugfs— влияют на производительность и отладку; - запрет входа по паролю по SSH, если ни у одного администратора (группы
sudo,admin) нет ключа SSH или есть пользователь, который входит по паролю и не имеет ключа; - на Ubuntu Desktop —
user.max_user_namespaces=0(кроме запуска с--containers N) иkernel.yama.ptrace_scope=3; - ограничение
suгруппойwheel, если в группахsudoиadminнет пользователей, кроме root; - порт Telnet, FTP или SNMP открыт процессом вне известных служб (например,
inetd).
Под таблицей --apply показываются и пункты без автоисправления: после применения они проверяются, результат FAIL, ERROR или NOT_FOUND выводится строкой check с причиной. Итоговая строка — TOTAL=<все пункты> APPLY=<с автоисправлением> (<исходы>) CHECK_ONLY=<без автоисправления> (<результаты проверки>) RC=<0|NONZERO>; код выхода --apply определяют только пункты с автоисправлением.
Параметры загрузки ядра вступают в силу после перезагрузки. Отчёт — /var/log/securelinux-policy/report.json, журналы — apply.log и debug.log там же. Одновременный второй запуск отклоняется.
Перед каждым изменением --apply сохраняет прежнее состояние только того, что меняет: копии файлов (files/, перечень — files.tsv), права и владельцев (modes.tsv), значения параметров ядра (runtime.tsv), состояние служб (services.tsv) и выполненные внешние команды (commands.tsv) — в /var/log/securelinux-policy/backup/<время>/. Путь печатается строкой BACKUP=. Отдельной команды отката (--restore) нет: нужные файлы возвращаются из копии вручную, а систему целиком — снимком или резервной копией.
| Результат | Значение |
|---|---|
PASS |
требование выполнено |
FAIL |
требование не выполнено |
ERROR |
проверка не смогла дать оценку; причина — код область:причина |
NOT_FOUND |
объект проверки не найден |
NOT_APPLICABLE |
проверять нечего: проверяемая совокупность пуста |
Неполная проверка никогда не превращается в PASS. Коды выхода: --check — 0, если оценка получена (даже при FAIL), 1, если есть ERROR или NOT_FOUND; --apply — 0, если все пункты done или ok, иначе 1; неверные ключи — 2.
Архитектура x86_64.
| Система | Проверенные варианты установки |
|---|---|
| Debian 12, 13 | сервер |
| Ubuntu 22.04 | полная |
| Ubuntu 24.04 | полная, минимальная |
| Ubuntu 26.04 | полная, минимальная |
| Ubuntu 24.04 Desktop | совместимость без гарантий, что ожидать |
Каждый механизм применения проверяется на виртуальных машинах этих систем: проверка, применение, перезагрузка, повторная проверка и повторное применение. На Desktop-системе возможны пакеты и настройки, которые проект не учитывает: перед --apply скрипт выводит предупреждение. Подробности — в совместимости.
Kubernetes и Docker используют user namespaces, а fstec-linux-2022 2.5.5 требует user.max_user_namespaces=0. Для хостов, где планируется Kubernetes или Docker, — ключ --containers N (N — целое от 1 до 2147483647, например 10000; требование компании):
--apply --containers Nставитuser.max_user_namespaces=N(файл продукта в/etc/sysctl.dи работающая система), в том числе на Ubuntu Desktop; остальные пункты — как без ключа;--checkключа не принимает и сравнивает 2.5.5 с требованием ФСТЭК (= 0): после--apply --containers Nпункт 2.5.5 —failсо значением N; это и есть видимое отступление от ФСТЭК;- без ключа — прежнее поведение: на сервере
--applyставит 0, на Ubuntu Desktop 2.5.5 — блок «требуется решение администратора», значение не меняется.
user.max_user_namespaces=0(fstec-linux-20222.5.5) иkernel.yama.ptrace_scope=3(2.6.1) на Desktop не применяются автоматически — блок «требуется решение администратора» (2.5.5 с ключом--containers N— ставится N). Послеuser.max_user_namespaces=0на Ubuntu 24.04 Desktop перестаёт нормально работать окружение рабочего стола; источник сам оговаривает: настройка не влияет на работу, только если система не использует user namespaces.ptrace_scope=3до перезагрузки не снижается. На рабочей станции перед--applyобязателен снимок или резервная копия.- Связка ключей GNOME. Если пароль сменён не самим пользователем, а от root (
sudo passwd <пользователь>), пароль связки ключей не меняется: вход может перестать её открывать, и приложения (например, Chrome) будут запрашивать прежний пароль. - Стек PAM рабочего стола содержит модули, которых нет на сервере (например,
pam_gnome_keyring), поэтому часть парольных настроек может выводиться блоком «требуется решение администратора».
- Bash и системные утилиты поддерживаемой ОС.
/usr/bin/python3— используется частью проверок и применением.- Запуск через
sudo— для доступа ко всем проверяемым объектам.
--checkтолько читает систему. Изменяет систему только--apply, и только поддерживаемые пункты.- Скрипт сам по сети не обращается.
--applyпри необходимости ставит пакетыauditd,libpam-pwquality,cracklib-runtime,wamericanчерезapt-getиз репозиториев, настроенных в системе. - Отчёт и журналы
--applyхранятся только локально, в/var/log/securelinux-policy/; в них могут быть имена учётных записей и пути к файлам. Копияbackup/<время>/может содержать прежний/etc/shadowс хэшами паролей: каталог доступен только root, удаляйте устаревшие копии сами. - Перед
--applyна рабочем сервере нужен снимок или резервная копия: встроенного отката всех изменений нет.
Скачайте архив заново (раздел Скачать), проверьте целостность и выполните --check. Отчёт --apply предыдущей версии --report не использует, если состав пунктов изменился: выполните --apply новой версии.
| Файл или каталог | Содержимое |
|---|---|
securelinux-policy.sh |
скрипт проверки и применения |
securelinux-policy.sh.sha256 |
контрольная сумма скрипта |
docs/ |
карта покрытия, совместимость, слои политики |
sources/ |
тексты документов ФСТЭК, по которым построены проверки |
Инженерная часть проекта (описания требований, механизмы, генератор скрипта, тесты) в публикацию не входит.
| Тема | Документ |
|---|---|
| Покрытие требований ФСТЭК | Карта покрытия |
| Источники и слои политики | Слои политики |
| Поддерживаемые среды | Совместимость |
| Тексты документов ФСТЭК | sources/ |
Замечания — через issue по шаблону (см. как сообщить о проблеме): ОС, команда запуска, код выхода, вывод --version и --build-info, фрагмент отчёта. Не публикуйте пароли, ключи и содержимое /etc/shadow.
Об уязвимостях сообщайте закрыто — см. политику безопасности.
Проект распространяется на условиях MIT License.
Машинный статус проекта
TOTAL_INDEX_ROWS=349
CONTROLLED_CLOSED_WITH_CONTRACT=54
DISPOSED_CLOSED_ROWS=295
OPEN_INDEX_ROWS=0
CLOSURE_RATIO=349/349
CANONICAL_CONTROLS=86
CLOSURE_CONTRACT_ROWS=54
ADAPTER_KINDS=29
CHECK_TARGET_FAMILY=linux-x86_64-supported-v1
SUPPORTED_ENVIRONMENTS=7
FIELD_COMPATIBILITY_ENVIRONMENTS=1
CHECK_STATUS=RELEASE
CHECK=IMPLEMENTED_READ_ONLY
APPLY=IMPLEMENTED
APPLY_KINDS=adduser-conf-option-v1,auditd-conf-option-v1,auditd-package-service-v1,auditd-rules-v1,config-line-with-runtime-v1,cron-command-paths-write-protection-v1,file-mode-owner-v1,home-directories-mode-v1,home-sensitive-files-mode-v1,kernel-cmdline-grub-v1,local-account-empty-password-lock-v1,local-account-password-aging-v1,login-defs-option-v1,network-service-mask-v1,optional-file-root-files-mode-v1,pam-pwhistory-profile-v1,pam-pwquality-option-v1,pam-wheel-su-v1,sshd-config-option-v1,standard-system-paths-mode-v1,startup-files-write-protection-v1,sudo-root-command-files-protection-v1,suid-sgid-applications-mode-v1,user-cron-files-mode-v1
APPLY_CONTROL_COUNT=81
APPLY_IMPLEMENTATION_COUNT=24
RESTORE=NOT_PLANNED
ROLLBACK_MODEL=EXTERNAL_SNAPSHOT
FULL_FSTEC_COMPLIANCE_CLAIM=false
CHECK охватывает только требования, представленные текущими canonical controls. Этот статус не является заявлением о полном соответствии требованиям ФСТЭК.