Sitelet https://github.com/rasav65/SecureLinux-Policy
Skip to content

About

Linux security compliance checker and controlled hardening tool for Ubuntu and Debian.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

SecureLinux-Policy

Проверка и безопасное применение настроек 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-main

Быстрый старт

1. Целостность скрипта

sha256sum -c securelinux-policy.sh.sha256

2. Проверка, без изменений

sudo /bin/bash -p ./securelinux-policy.sh --check

3. Только нарушения

sudo /bin/bash -p ./securelinux-policy.sh --check --failed

4. Что будет изменено

sudo /bin/bash -p ./securelinux-policy.sh --apply --dry-run

5. Применить

sudo /bin/bash -p ./securelinux-policy.sh --apply

6. Нарушения после применения и причины, по которым они оставлены

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-2022 2.1.2) выполняет автоисправление fstec-configuration-2026 9.1.
  • Вне проекта, хотя применимо к Debian и Ubuntu: межсетевой экран (fstec-configuration-2026 7.3) и правило auditd о записи во всю файловую систему (fstec-configuration-2026 10.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

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 — блок «требуется решение администратора», значение не меняется.

Ubuntu 24.04 Desktop — что ожидать

  • user.max_user_namespaces=0 (fstec-linux-2022 2.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. Этот статус не является заявлением о полном соответствии требованиям ФСТЭК.

About

Linux security compliance checker and controlled hardening tool for Ubuntu and Debian.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages