SELinux (Русский) - ArchWiki

# SELinux (Русский)

Эта страница нуждается в сопроводителе

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki

Информация в этой статье или разделе устарела

Причина: rc.d references. Needs update, see Systemd (Русский). (Обсудить)

Security-Enhanced Linux (SELinux) это функция Linux, которая обеспечивает множество политик безопасности, включая U.S. Обязательные средства управления доступом (MAC, Mandatory Access Controls) стиля министерства обороны, с помощью Linux Security Modules (LSM) в ядре Linux. Это не дистрибутив Linux, а скорее ряд модификаций, которые могут быть применены к Unix-подобным операционным системам, таким как Linux и BSD. Её архитектура стремится оптимизировать объем программного обеспечения, обвиненного в осуществлении политики безопасности, которое является близко выровненное Trusted Computer System Evaluation Criteria (TCSEC, называемый Оранжевой книгой) требование для минимизации достоверной вычислительной базы (TCB) (применимый к классам B3 и A1 оценки), но довольно не связано с наименьшим количеством требования полномочия (B2, B3, A1), как часто требуется. Зародышевые понятия базовый SELinux могут быть прослежены до нескольких более ранних проектов американским Агентством национальной безопасности (NSA). [1]

Для выполнения SELinux под дистрибутивом Linux требуется: включить SELinux в ядро, инструменты SELinux Userspace и библиотеки, и SELinux Policies (главным образом на основе Reference Policy). Некоторые общие программы Linux должны также исправляться/компилироваться с функциями SELinux.

## Обязательные требования

Поддерживаются только файловые системы ext2, ext3, ext4, JFS и XFS.

Примечание: This is probably not needed anymore:

Пользователи XFS должны использовать 512 байтов inodes (значение по умолчанию 256). Использование SELinux расширяло атрибуты для того, чтобы сохранить метки безопасности в файлах. XFS хранит это в inode, и если inode слишком маленький, должен использоваться дополнительный блок, который тратит впустую много пространства и подвергается потерям производительности.

    # mkfs.xfs -i size=512 /dev/sda1

## Установка необходимых пакетов

Должны быть установлены по крайней мере linux-selinuxAUR, selinux-pamAUR[ссылка недействительна: сохранено в aur-mirror], selinux-usr-policycoreutilsAUR[ссылка недействительна: сохранено в aur-mirror] и selinux-refpolicy-srcAUR. Рекомендуется установить все пакеты, требуемые SELinux.

При замене пакетов pam и coreutils будьте особо внимательны, поскольку они жизненно важны для системы. Приготовьте Live CD или Live USB на случай, если придётся переустановить систему.

Важно: Установливая, например, selinux-pamAUR[ссылка недействительна: сохранено в aur-mirror], pacman сообщит о конфликте и предложит удалить pam. Согласитесь, и pacman сам удалит и установит требуемые пакеты. При замене обращайте внимание на любые ошибки, если они будут

### Описание пакета

Все пакеты, принадлежащие к SELinux, находятся в группе selinux. В selinux-userspace располагаются пакеты пользователтского пространства. В selinux-policies - пакеты политик. Остальные пакеты находятся в selinux-extras.

#### SELinux aware system utils

linux-selinuxAUR
  Активирует поддержку SELinux ядром. Компиляция модулей подобно Virtualbox

selinux-coreutilsAUR[ссылка недействительна: сохранено в aur-mirror]
  Компиляция пакета coreutils с включенной поддержкой SELinux

selinux-flexAUR[ссылка недействительна: сохранено в aur-mirror]
  Версия flex, необходимая только для сборки checkpolicy. Текущий flex имеет ошибку, вызывающую отказ в выполнении команды checkmodule

selinux-pamAUR[ссылка недействительна: сохранено в aur-mirror]
  Пакет PAM с `pam_selinux.so`

selinux-systemdAUR[ссылка недействительна: сохранено в aur-mirror]
  An SELinux aware version of systemd. It replaces the systemd package

selinux-util-linuxAUR[ссылка недействительна: сохранено в aur-mirror]
  Версия util-linux, скомпилированная с включенной поддержкой SELinux

selinux-findutilsAUR[ссылка недействительна: сохранено в aur-mirror]
  Пропатченная версия findutils с активированной поддержкой SELinux, необходимая для поиска файлов в указанном возможном контексте безопасности

selinux-sudoAUR[ссылка недействительна: сохранено в aur-mirror]
  Версия sudo с активированной поддержкой SELinux для корректной устанавки контекста безопасности

selinux-procpsAUR[ссылка недействительна: сохранено в aur-mirror]
  Исправления пакета procps на основе некоторых патчей Fedora

selinux-psmiscAUR[ссылка недействительна: сохранено в aur-mirror]
  Версия psmisc с активированной поддержкой SELinux. Добавляет опцию `-Z` к `killall`

selinux-shadowAUR[ссылка недействительна: сохранено в aur-mirror]
  Версия shadow с активированной поддержкой SELinux. Содержит изменённый `/etc/pam.d/login` для корректной установки контекста безопасности после входа в систему

selinux-cronieAUR[ссылка недействительна: сохранено в aur-mirror]
  Vixie cron из дистрибутива Fedora с активированной поддержкой SELinux

selinux-logrotateAUR[ссылка недействительна: сохранено в aur-mirror]
  Версия logrotate с активированной поддержкой SELinux

selinux-opensshAUR[ссылка недействительна: сохранено в aur-mirror]
  Версия OpenSSH с активированной поддержкой SELinux, для установки контекста безопасности в течение многих сеансов пользователя

#### Пространство пользователя SELinux

selinux-usr-checkpolicyAUR[ссылка недействительна: сохранено в aur-mirror]
  Tools to build SELinux policy

selinux-usr-libselinuxAUR[ссылка недействительна: сохранено в aur-mirror]
  Library for security-aware applications. Python bindings needed for semanage and setools now included

selinux-usr-libsemanageAUR[ссылка недействительна: сохранено в aur-mirror]
  Library for policy management. Python bindings needed for semanage and setools now included

selinux-usr-libsepolAUR[ссылка недействительна: сохранено в aur-mirror]
  Library for binary policy manipulation

selinux-usr-policycoreutilsAUR[ссылка недействительна: сохранено в aur-mirror]
  SELinux core utils such as newrole, setfiles, etc.

selinux-usr-sepolgenAUR[ссылка недействительна: сохранено в aur-mirror]
  A Python library for parsing and modifying policy source

#### Политики SELinux

selinux-refpolicyAUR[ссылка недействительна: сохранено в aur-mirror]
  Precompiled modular-otherways-vanilla Reference policy with headers and documentation but without sources

selinux-refpolicy-srcAUR
  Reference policy sources

selinux-refpolicy-archAUR
  Precompiled modular Reference policy with headers and documentation but without sources. Development Arch Linux Refpolicy patch included, but for now [February 2011] it only fixes some issues with `/etc/rc.d/*` labeling.

#### Другие утилиты SELinux

selinux-setoolsAUR[ссылка недействительна: сохранено в aur-mirror]
  CLI and GUI tools to manage SELinux

audit
  User space utilities for storing and searching the audit records generated by the audit subsystem in the Linux kernel. SELinux (AVC) will log all denials using audit. Very useful in troubleshooting SELinux. Also audit2allow use log from this program.

Примечание: If using proprietary drivers, such as NVIDIA graphics drivers, you may need to rebuild them for custom kernels.

## Configuration

После установки всех необходимых пакетов их необходимо настроить.

### Changing boot loader configuration

Добавьте в конфигурационный файл GRUB `/boot/grub/menu.lst` следующие строки:

    # (1) Arch Linux
    title  Arch Linux (SELinux)
    root   (hd0,0)
    kernel vmlinuz-linux-selinux root=/dev/sda5 ro vga=775
    initrd initramfs-linux-selinux.img

### Mounting selinuxfs

Добавьте в `/etc/fstab`:

    none   /selinux   selinuxfs   noauto   0   0

Создайте папку /selinux:

    mkdir /selinux

### Main SELinux configuration file

Основной конфигурационный файл SELLinux (`/etc/selinux/config`) является частью пакета selinux-refpolicyAUR[ссылка недействительна: сохранено в aur-mirror]. Его содержимое по умолчанию:

    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #       enforcing - SELinux security policy is enforced.
    #       permissive - SELinux prints warnings
    #                       instead of enforcing.
    #       disabled - No SELinux policy is loaded.
    SELINUX=permissive
    # SELINUXTYPE= takes the name of SELinux policy to
    # be used. Current options are:
    #       refpolicy (vanilla reference policy)
    #       refpolicy-arch (reference policy with
    #       Arch Linux patch)
    SELINUXTYPE=refpolicy

Примечание: Опция `SELINUX=permissive` подходит только для конфигурации. Это не увеличивает безопасность и после настройки измените её на `SELINUX=enforcing`. Опция `SELINUXTYPE=refpolicy` устанавливает имя используемой политики. Измените его на имя вашей политики. Если вы решили скомпилировать политику из исходников, вы должны самостоятельно создать файл.

### Set up PAM

Correctly set-up PAM is important to get a proper security context after login. If you installed selinux-shadowAUR[ссылка недействительна: сохранено в aur-mirror], there should be the following lines in `/etc/pam.d/login`:

    # pam_selinux.so close should be the first session rule
    session         required        pam_selinux.so close
    # pam_selinux.so open should only be followed by sessions to be executed in the user context
    session         required        pam_selinux.so open

If not, add them to the file. Similarly for logging in via SSH in `/etc/pam.d/sshd`, which is part of selinux-opensshAUR[ссылка недействительна: сохранено в aur-mirror] package.

If you want to use SELinux with GUI, you should add the aforementioned lines to other files such as `/etc/pam.d/kde`, `/etc/pam.d/kde-np`, ... depending on your login manager.

Примечание: Running SELinux with GUI applications in Arch Linux is not much supported at the time being.

## Reference policy

There are currently two possible ways of installing reference policy: From a pre-compiled package (selinux-refpolicyAUR[ссылка недействительна: сохранено в aur-mirror]) or from a source package (selinux-refpolicy-srcAUR).

Примечание: It is possible to have both the source and the binary package installed. If you plan to build from source in that case, you should probably change the name of policy in `build.conf` to avoid overwriting of selinux-refpolicy package files.

### Installing a precompiled refpolicy

Install selinux-refpolicyAUR[ссылка недействительна: сохранено в aur-mirror]. This is a modular-otherways-vanilla refpolicy. This package includes policy headers (you can therefore compile your own modules), policy documentation and an install script which will load the policy for you and relabel your filesystem (which will likely take some time). It does not include the sources though.

This package also includes the main SELinux configuration file (`/etc/selinux/config`) defaulting to refpolicy and permissive SELinux enforcement for testing purposes.

You should verify that the policy was correctly loaded, that is if the file `/etc/selinux/refpolicy/policy/policy.24` has non-zero size. If so and if you have installed selinux-sysvinitAUR[ссылка недействительна: сохранено в aur-mirror] and other needed packages, you are ready to reboot and make sure that everything works.

Важно: On newer kernels (eg. 3.0) policy in file `/etc/selinux/refpolicy/policy/policy.24` has zero bytes size, because it is used new version of policy from file: `/etc/selinux/refpolicy/policy/policy.26`

In case the policy was not correctly loaded you can as root use the following command inside of the `/usr/share/selinux/refpolicy` directory to do so:

    /bin/ls *.pp | /bin/grep -Ev "base.pp|enableaudit.pp" | /usr/bin/xargs /usr/sbin/semodule -s refpolicy -b base.pp -i

To manually relabel your filesystem you can as root use:

    /sbin/restorecon -r /

### Installing refpolicy from a source package

Install selinux-refpolicy-srcAUR from AUR. Edit the file `/etc/selinux/refpolicy/src/policy/build.conf` to your liking.

Примечание: Build configuration file `build.conf` is overwritten on every selinux-refpolicy-src package upgrade, so backup your configuration.

To build, install and load policy from source do the following. (For other possibilities consult the README file located in `/etc/selinux/refpolicy/src/policy/`.)

    cd /etc/selinux/refpolicy/src/policy
    make bare
    make conf
    make load

Copy or link the compiled binary policy to `/etc/policy.bin` for sysvinit to find and install selinux-sysvinit:

    ln -s /etc/selinux/refpolicy/policy/policy.21 /etc/policy.bin

At this moment files do not have any context, so you should relabel the whole filesystem, which will take a while:

    make relabel

Create the main SELinux configuration file (`/etc/selinux/config`) according to the example in related section.

Now you are ready to reboot and make sure that everything works.

## Post-installation steps

Важно: Если selinux-sysvinit не установлен, то SELinux не сможет запуститься и `/selinux` не будет смонтирован.

Выполните `sestatus` чтобы убедиться, что SELinux работает. Должно получиться что-то вроде этого:

    SELinux status:                 enabled
    SELinuxfs mount:                /selinux
    Current mode:                   permissive
    Mode from config file:          permissive
    Policy version:                 26
    Policy from config file:        refpolicy

To maintain correct context, you can use restorecond:

    touch /etc/rc.d/restorecond
    chmod ugo+x /etc/rc.d/restorecond

Which should contain:

    #!/bin/sh
    restorecond

Примечание: Не забудьте добавить `restorecond` в список `DAEMONS` вашего `/etc/rc.conf`.

Чтобы переключиться на осуществление режима без перезагрузки, можете использовать:

    echo 1 > /selinux/enforce

Примечание: Если `SELINUX=enforcing` в `/etc/selinux/config` не работает, создайте `/etc/rc.d/selinux-enforce` содержащий предыдущую команду так же как с restorecond демоном.

## Useful tools

There are some tools/commands that can greatly help with SELinux.

restorecon
  Restores the context of a file/directory (or recursively with `-R`) based on any policy rules
rlpkg
  Relabels any files belonging to that Gentoo package to their proper security context (if they have one)
chcon
  Change the context on a specific file
audit2allow
  Reads in log messages from the AVC log file and tells you what rules would fix the error. Do not just add these rules without looking at them though, they cannot detect errors in other places (e.g. the application is running in the wrong context in the first place), or sometimes things will generate error messages but may maintain functionality so it would be better to add dontaudit to just ignore the access attempts.

## References

- Security Enhanced Linux
- Gentoo SELinux Handbook
- Fedora Project's SELinux Wiki
- NSA's Official SELinux Homepage
- Reference Policy Homepage
- SELinux Userspace Homepage
- SETools Homepage

## See also

- AppArmor (Similar to SELinux, much easier to configure, less features.)

Categories:

- Русский
- Security (Русский)
- Kernel (Русский)

Hidden category:

- Pages with broken package links