2.4.2 Безопасная настройка РЕД ОС 7.3 согласно Рекомендациям ФСТЭК России по безопасной настройке ОС Linux от 25.12.2022
Настройка авторизации в операционных системах Linux
Ограничение механизмов получения привилегий
Настройка прав доступа к объектам файловой системы
Настройка механизмов защиты ядра Linux
Уменьшение периметра атаки ядра Linux
Настройка средств защиты пользовательского пространства ядра Linux
Окружение
- Версия ОС: 7.3
- Конфигурация ОС: Рабочая станция, Сервер графический, Сервер минимальный
- Редакция ОС: Стандартная
- Архитектура: x86_64
Во всех случаях настройка системы с целью соблюдения Рекомендаций может быть выполнена администратором локально.
Для оценки текущего состояния опций в системе, описанных в разделах 2.4 - 2.6, имеется специально разработанный скрипт (check-fstek). Для получения полной информации потребуются права администратора.
Нумерация разделов Инструкции соответствует нумерации разделов Рекомендаций.
2.1. Настройка авторизации в операционных системах Linux
2.1.1. Не допускать использование учетных записей пользователей с пустыми паролями
Установщиком ОС anaconda предусмотрен запрет на создание пустых паролей пользователей. При создании нового пользователя командой useradd
учетная запись создается без пароля. Пока вновь созданному пользователю не будет назначен пароль, его учетная запись будет заблокирована, а вход в систему – невозможен. Для дополнительной защиты от входа в систему под беспарольной учетной записью используется исключение такой учетной записи из меню выбора пользователя для входа в окне авторизации при запуске системы.
После назначения пользователю пароля его учетная запись полностью разблокируется.
В случае если какие-либо учетные записи в файле /etc/shadow не имеют пароля, выполните следующую команду для блокировки учетной записи до тех пор, пока не будет определено, почему для нее не назначен пароль:
passwd -l
2.1.2. Обеспечить отключение входа суперпользователя в систему по протоколу SSH
По умолчанию вход по протоколу SSH суперпользователем root заблокирован. Данная настройка определена в конфигурационном файле /etc/ssh/sshd_config.d/01-permitrootlogin.conf, в котором используется параметр PermitRootLogin
со значением no
.
2.2. Ограничение механизмов получения привилегий
2.2.1. Обеспечить ограничение доступа к команде su
Шаблон настройки и обеспечения доступа к команде su
предустановлен в файле /etc/pam.d/su, однако по умолчанию строки данной настройки закомментированы. Для выполнения требования необходимо раскомментировать строку:
auth required pam_wheel.so use_uid
В файле присутствуют комментарии на английском языке к закомментированным строкам.
2.2.2. Ограничить список пользователей, которым разрешено использовать команду sudo, и разрешенных к выполнению через sudo команд
По умолчанию команда sudo доступна для пользователей, включенных в группу wheel, либо для пользователей, указанных в файле /etc/sudoers или /etc/sudoers.d/.
2.3. Настройка прав доступа к объектам файловой системы
2.3.1. Установить корректные права доступа к файлам настройки пользователей, а именно к файлам с перечнями пользовательских идентификаторов (/etc/passwd) и групп (/etc/group), либо хранилищам хешей паролей (в операционных системах GNU/Linux, Solaris, HP-UX: /etc/shadow, AIX: /etc/security/passwd)
По умолчанию в РЕД ОС для /etc/passwd и /etc/group выставлены права 644
. При этом права доступа к /etc/shadow выставлены в 000
, что обеспечивает более строгий контроль, чем 644
.
Значение 644
означает, что пользователи имеют право на чтение файла, но не могут его изменять или осуществлять запуск из командной строки. Атрибут 644
обычно используется для файлов, которые могут быть изменены только администратором системы или другими пользователями с повышенными правами. Значение 000
означает полный запрет на чтение, изменение и запуск файла из командной строки.
2.3.2. Установить корректные права доступа к файлам запущенных процессов
Чтобы установить корректные права доступа к файлам запущенных процессов, необходимо выполнить команды для всех исполняемых файлов, запущенных в настоящий момент, и соответствующих библиотек:
chmod go-w <путь_к_файлу>
2.3.3. Установить корректные права доступа к файлам, выполняющимся с помощью планировщика задач cron неавторизованными пользователями
Чтобы установить корректные права доступа к файлам, выполняющимся с помощью планировщика задач cron неавторизованными пользователями, необходимо выполнить команды для каждого файла, который вызывается из заданий cron:
chmod go-w <путь_к_файлу>
Если не установить корректные права доступа к файлам, выполняющимся с помощью планировщика задач cron неавторизованными пользователями, это может привести к выполнению произвольного кода от имени владельца задания cron (в том числе root), что приведет к полной компрометации операционной системы.
2.3.4. Установить корректные права доступа к файлам, выполняемым с помощью sudo
Изменение владельца для каждого исполняемого файла, который можно запускать с привилегиями суперпользователя root, но владельцем которого является обычный пользователь, выполняется командой:
chown root <путь_к_файлу>
Также необходимо выполнить команду для каждого исполняемого файла, который можно запускать с привилегиями суперпользователя root и к которому имеют доступ на запись все пользователи:
chmod go-w <путь_к_файлу>
2.3.5. Установить корректные права доступа к стартовым скриптам системы
Чтобы установить корректные права доступа к стартовым скриптам системы, необходимо к каждому файлу в директориях /etc/rc#.d, а также к файлам с расширением .service, присутствующим в системе, применить команды вида:
chmod o-w <имя_файла>
2.3.6. Установить корректные права доступа к системным файлам заданий (конфигурационным файлам) cron
Чтобы установить корректные права доступа к системным файлам заданий (конфигурационным файлам) cron, необходимо выполнить команды вида:
chmod go-wx <путь_к_файлу_или_директории>
К системным файлам-описаниям очередей cron относятся следующие файлы:
/etc/crontab
(файл);/etc/cron.d
(директория и файлы внутри нее);/etc/cron.hourly
(директория и файлы внутри нее);/etc/cron.daily
(директория и файлы внутри нее);/etc/cron.weekly
(директория и файлы внутри нее);/etc/cron.monthly
(директория и файлы внутри нее).
2.3.7. Установить корректные права доступа к пользовательским файлам заданий cron
Чтобы установить корректные права доступа к пользовательским файлам заданий cron, необходимо выполнить команды вида:
chmod go-w <путь_к_файлу_заданий>
2.3.8. Установить корректные права доступа к исполняемым файлам и библиотекам операционной системы
Чтобы установить корректные права доступа к исполняемым файлам и библиотекам операционной системы, необходимо провести анализ корректности прав доступа к утилитам и системным библиотекам, расположенным по стандартным путям (/bin, /usr/bin, /lib, /lib64 и другим путям), а также к модулям ядра (/lib/modules/<версия_текущего_ядра>/).
Местоположение большинства стандартных исполняемых файлов указано в переменной $PATH пользователя root.
2.3.9. Установить корректные права доступа к SUID/SGID-приложениям
Чтобы установить корректные права доступа к SUID/SGID-приложениям, необходимо провести аудит системы на предмет поиска всех SUID/SGID-приложений – права доступа к каждому из них не должны позволять остальным пользователям изменять его содержимое (в особенности, если это SUID-приложение и его владельцем является суперпользователь root). В противном случае следует выполнить команду вида:
chmod go-w <путь_к_приложению>
Команды поиска подобных файлов:
find / -perm /4000 find / -perm /2000
2.3.10. Установить корректные права доступа к содержимому домашних директорий пользователей (.bash_history, .history, .sh_history и т. п. - файлы истории командных оболочек, .bash_profile, .bashrc, .profile, .bash_logout и т. п. - файлы настройки оболочки, .rhosts - настройки R-подсистем)
Для выполнения требования необходимо установить на каждый из указанных файлов корректные права доступа с помощью команды вида:
chmod go-rwx <путь_к_файлу>
2.3.11. Установить корректные права доступа к домашним директориям пользователей
Чтобы установить корректные права доступа к домашним директориям пользователей, необходимо выполнить команду вида:
chmod 700 <домашняя_директория>
2.4. Настройка механизмов защиты ядра Linux
2.4.1. Ограничить доступ к dmesg для пользователей
Чтобы ограничить доступ к dmesg для пользователей, в файле /etc/sysctl.conf необходимо выполнить команду вида:
kernel.dmesg_restrict=1
По умолчанию установлено значение 1
, дополнительных действий не требуется.
2.4.2. Заменить ядерные адреса в /proc на 0
Чтобы заменить ядерные адреса в /proc на 0
, в файле /etc/sysctl.conf необходимо указать параметр вида:
kernel.kptr_restrict=2
Команда может повлиять на некоторые приложения.
Если установить значение 1
, будут отображены истинные значения для пользователей с capability CAP_SYSLOG. Если установить значение 2
, будут отображены «0» в любом случае.
Если используются утилиты отладки или профилирования, например Perf, то рекомендуется вернуть настройку в значение 1
.
2.4.3. Инициализировать память 0 при выделении
Чтобы инициализировать память 0 при выделении, необходимо добавить в файл /etc/grub.cfg следующую опцию:
init_on_alloc=1
Запуск опции влияет на производительность в худшую сторону от 1% до 7%.
2.4.4. Запретить слияние кэшей ядерного аллокатора
Чтобы запретить слияние кэшей ядерного аллокатора, необходимо добавить в файл /etc/grub.cfg следующую опцию:
slab_nomerge
При отключении увеличит фрагментацию памяти.
2.4.5. Инициализировать механизм IOMMU
Чтобы инициализировать механизм IOMMU, необходимо установить в файле /etc/grub.cfg следующие параметры при запуске:
iommu=force
iommu.strict=1
iommu.passthrough=0
Установка может повлиять на работу драйверов некоторых устройств.
2.4.6. Рандомизировать расположение ядерного стека
Чтобы рандомизировать расположение ядерного стека, необходимо в файле /etc/grub.cfg установить следующий параметр (при загрузке):
randomize_kstack_offset=1
Установка имеет минорное влияние на производительность (1% и менее).
2.4.7. Включить защиту от аппаратных уязвимостей CPU
Чтобы включить защиту от аппаратных уязвимостей CPU, необходимо в файле /etc/grub.cfg установить следующий параметр (при загрузке для x86-архитектур):
mitigations=auto,nosmt
Данный параметр отключает набор инструкций Intel в ядре, подверженных уязвимости spectre meltdown. Дополнительных действий не требуется.
2.4.8. Включить защиту подсистемы eBPF
Чтобы включить защиту подсистемы eBPF, необходимо в файле /etc/sysctl.conf установить следующий параметр:
sysctl -w net.core.bpf_jit_harden=2
При установке параметра будут наблюдаться ухудшения производительности в BPF JIT.
2.5. Уменьшение периметра атаки ядра Linux
2.5.1. Отключить устаревший интерфейс vsyscall
Чтобы отключить устаревший интерфейс vsyscall, необходимо в файле /etc/grub.cfg установить следующий параметр (при загрузке):
vsyscall=none
По умолчанию vsyscall
находится в режиме emulate
. При отключении возникнут проблемы с виртуальными машинами/docker на основе старых образов (например, Centos 6).
2.5.2. Ограничить доступ к событиям производительности
Чтобы ограничить доступ к событиям производительности, необходимо в файле /etc/sysctl.conf установить следующий параметр:
sysctl -w kernel.perf_event_paranoid=3
Дополнительных действий не требуется, так как значения рассматриваются как:
>=2 Disallow kernel profiling by users without CAP_PERFMON
Если используются утилиты отладки или профилирования, например Perf, то рекомендуется вернуть настройку в значение 1
.
2.5.3. Отключить монтирование виртуальной файловой системы debugfs
Чтобы отключить монтирование виртуальной файловой системы debugfs, необходимо в файле /etc/grub.cfg установить следующий параметр (рекомендуется off
при загрузке):
debugfs=no-mount
Отключение монтирования и файловой системы нарушит работу отладочных утилит, использующих ее.
2.5.4. Отключить системный вызов kexec_load
Чтобы отключить системный вызов kexec_load, необходимо в файле /etc/sysctl.conf установить следующий параметр:
sysctl -w kernel.kexec_load_disabled=1
При установленном значении «1» kdump работать не будет.
2.5.5. Ограничить использование user namespaces
Чтобы ограничить использование user namespaces, необходимо в файле /etc/sysctl.conf установить следующий параметр:
sysctl -w user.max_user_namespaces=0
При установленном значении «0» docker, браузеры и все, что связано с sandbox, работать не будет либо будет работать некорректно.
2.5.6. Запретить системный вызов bpf для непривилегированных пользователей
Чтобы запретить системный вызов bpf для непривилегированных пользователей, необходимо в файле /etc/sysctl.conf установить следующий параметр:
sysctl -w kernel.unprivileged_bpf_disabled=2
По умолчанию установлено значение 2
, дополнительных действий не требуется.
2.5.7. Запретить системный вызов userfaultfd для непривилегированных пользователей
Чтобы запретить системный вызов userfaultfd для непривилегированных пользователей, необходимо в файле /etc/sysctl.conf установить следующий параметр:
sysctl -w vm.unprivileged_userfaultfd=0
По умолчанию установлено значение 0
, дополнительных действий не требуется.
2.5.8. Запретить автоматическую загрузку модулей ядра, связанных с TTY Line Discipline
Чтобы запретить автоматическую загрузку модулей ядра, связанных с TTY Line Discipline, необходимо в файле /etc/sysctl.conf установить следующий параметр:
sysctl -w dev.tty.ldisc_autoload=0
Требуется оценить, используется ли автоматическая загрузка соответствующих модулей.
2.5.9. Отключить технологию TSX (Transactional Synchronization Extensions)
Чтобы отключить технологию TSX, необходимо в файле /etc/grub.cfg установить следующий параметр (при загрузке):
tsx=off
Параметр tsx=off
отключает набор инструкций Intel TSX. По умолчанию отключено на уровне ядра.
2.5.10. Настроить минимальный виртуальный адрес, который разрешено использовать для mmap
Чтобы настроить минимальный виртуальный адрес, который разрешено использовать для mmap, необходимо в файле /etc/sysctl.conf установить следующий параметр:
sysctl -w vm.mmap_min_addr = 4096
Системный вызов mmap позволяет выполнить отображение файла/устройства на память. Данное ограничение не позволит использовать нижнюю часть памяти. В РЕД ОС установлено ограничение в 64 КБ, что превышает запрашиваемое. Дополнительных действий не требуется.
2.5.11. Включить рандомизацию адресного пространства
Чтобы включить рандомизацию адресного пространства, необходимо в файле /etc/sysctl.conf установить следующий параметр:
sysctl -w kernel.randomize_va_space = 2
После установки параметра в значение «2» дополнительно включится рандомизация кучи. Установка данного параметра может нарушить работу некоторых старых приложений.
2.6. Настройка средств защиты пользовательского пространства ядра Linux
2.6.1. Запретить подключение к другим процессам с помощью ptrace
Чтобы запретить подключение к другим процессам с помощью ptrace, необходимо в файле /etc/sysctl.conf установить следующий параметр:
sysctl -w kernel.yama.ptrace_scope=3
Этот параметр отключит ptrace, что приведет к остановке работы всех утилит, связанных с ним (разнообразные анализаторы).
После установки параметра «3» нельзя переключить обратно.
2.6.2. Ограничить небезопасные варианты прохода по символическим ссылкам
Чтобы ограничить небезопасные варианты прохода по символическим ссылкам необходимо в файле /etc/sysctl.conf установить следующий параметр:
sysctl -w fs.protected_symlinks=1
По умолчанию установлено значение 1
, дополнительных действий не требуется.
2.6.3. Ограничить небезопасные варианты работы с жёсткими ссылками
Чтобы ограничить небезопасные варианты работы с жесткими ссылками необходимо в файле /etc/sysctl.conf установить следующий параметр:
sysctl -w fs.protected_hardlinks=1
По умолчанию установлено значение 1
, дополнительных действий не требуется.
2.6.4. Включить защиту от непреднамеренной записи в FIFO-объект
Для включения защиту от непреднамеренной записи в FIFO-объект, необходимо в файле /etc/sysctl.conf установить следующий параметр:
sysctl -w fs.protected_fifos=2
По умолчанию параметр установлен в значение 1
, при установке параметра 2
защита от непреднамеренной записи в FIFO-объект работает аналогично, действие распространяется на группу директорий.
2.6.5. Включить защиту от непреднамеренной записи в файл
Чтобы включить защиту от непреднамеренной записи в файл, необходимо в файле /etc/sysctl.conf установить следующий параметр:
sysctl -w fs.protected_regular=2
По умолчанию параметр установлен в значение 1
при установке параметра 2
защита от непреднамеренной записи в файл работает аналогично, действие распространяется на группу директорий.
2.6.6. Запретить создание core dump для исполняемых файлов с флагом suid
Чтобы запретить создание core dump для исполняемых файлов с флагом suid, необходимо в файле /etc/sysctl.conf установить следующий параметр:
sysctl -w fs.suid_dumpable=0
По умолчанию параметр установлен в значение 2
. При установке параметра в значение 0
отключается передача дампов systemd-coredump. Значение 0
можно использовать, если исследование дампов памяти не производится.
В качестве промежуточного значения можно выставить параметр в значение 1
, чтобы процессы с другими привилегиями не сбрасывались в дамп.
Дата последнего изменения: 11.04.2025
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.