Принцип работы
В «двух словах», SELinux расширяет возможности стандартной системы безопасности (на основе прав доступа к файлам). Она позволяет ограничить доступ процессу, который запускается от имени пользователя, у которого прав больше, чем нужно данному процессу. Чтобы понять наглядно принцип работы SELinux, рассмотрим контекст безопасности — сочетание сущности, роли, домена и категории (не обязательно).
Вот как выглядят права SELinux:
<сущность>:<роль>:<домен/тип>:<уровень:категория>
Например:
unconfined_u:object_r:user_home_t:s0
system_u:system_r:kernel_t:s0
<сущность> или тип пользователя — это субъект, совершающий действие. Чаще всего, процесс или программа.
<роль> — список разрешенных операций или сочетание доменов. Роли нельзя объединять.
<домен/тип> — набор минимальных действий, необходимый для выполнения операции. Термин «Домен» применяется к процессам, «Тип» — к файлам и папкам.
<уровень:категория> — в стандартных политиках SELinux не применяется. Используется для MLS/MCS (Model Multi-Level Security / Multi-Category Security), в которых используются уровни доступа для файлов определенных категорий. Например, s0-s0:c0.c1023 — максимально разрешенный уровень доступа.
Так как же это работает
Принцип довольно прост — необходимо, чтобы процесс и файл, к которому он обращается находились в одном домене/типе.
Чтобы понять было проще, разберем настройки на примерах.
Взаимодействие окружения Windows и окружения подсистемы Linux
Одной из проблем для виртуальных машин является необходимость хорошего взаимодействия между хостом и самой виртуальной машиной. Это нужно для быстрой переброски файлов, ссылок и прочего. И в этом разделе мы обсудим как раз эту тему.
Для начала поговорим о том, где находится файловая система нашей WSL. Ее можно найти по адресу . При этом не рекомендуется писать туда файлы, поскольку в Windows используется довольно капризная NTFS, а в Linux — ext3/ext4. Можно ненароком «поломать» что-нибудь. А вот читать можно спокойно.
Возможно, это проблема со временем уйдет в прошлое, когда в ядре Linux появится-таки NTFS-драйвер от Paragon, который не так давно стал открытым. Ожидается, что это произойдет в версии 5.15.
Если нужно получить доступ к диску Windows, то он будет смонтирован в в соответствии со своими буквами. То есть, системный диск (если у вас Windows на диске C) примонтируется как , условная флешка — как (кто еще помнит, что по умолчанию она получала именно букву F?), а диск с любимыми фильмами и музыкой — (или какая там у вас буква?).
При этом можно делать симлинки, а права автоматом ставятся на максимум. То есть права по дефолту будут обозначены как , а владельцем считается (и снова повторим, что с учетом этих особенностей нужно быть осторожным).
При этом виндовые папки будут видны в терминале, файлы — будут открываться, а программы — запускаться.
Пример:
— смотрим папку
— содержимое файла txt
— читаем данные.
— смотрим содержимое папки с установленными программами (как видим, доступ закрыт, хотя просмотреть можно)
winitpro.ru
Если запускать приложения Windows прямиком из Linux, это можно сделать командами:
- — «Проводник»
- — «Калькулятор»
- — штатный «Блокнот»
- — WordPad
- — Paint,
- — календарь
А вот погоду можно посмотреть иначе — .
Для удобства можно установить mc — Midnight Commander, который будет работать в оболочке Bash в Linux и в командной строке Windows.
Команда проста:
А вот так выглядит двухпанельный файловый менеджер, где с одной стороны Windows, с другой — Linux. Похоже, старая шутка про два диска обретает новый смысл.
winitpro.ru
Если же необходимо запускать Linux приложения напрямую из Windows, то для этого есть три волшебные команды — , и . По умолчанию они идут от рута, потому лучше использовать и снизить привилегии.
Для приложений с X-сервером нужно еще передавать переменную окружения . А папку, в которой работает то или иное приложение, надо выбирать уже внутри WSL через . Например, .
Как мы говорили ранее, в первой версии WSL может просматривать перечень процессов Linux в «Диспетчер задач» Windows. А вот в самой подсистеме видны только Linux-процессы.
Зато команды в Linux и в Windows дают одинаковые данные, а веб-сервер, запущенный в Linux, окажется доступным и в Windows. Наоборот — то же самое.
Особенности и ограничения WSL и WSL 2
Не секрет, что NT-системы и Linux-системы отличаются во многом. И потому первая версия WSL, созданная Microsoft, была, по сути, попыткой реализации всех интерфейсов ядра Linux в рамках NT. Если проще — все интерфейсы, которые существуют в обеих системах, должны были реализовываться один к одному (да-да, ошибки, баги и прочее — тоже).
Если же в Linux интерфейс был, а в NT его не было, то его и не надо было реализовывать напрямую. А если надо — то с помощью «костылей». Само собой, такой подход сделал первую WSL медленной, хотя и реализовывал многие особенности, например, те же Linux-процессы в «Диспетчере задач».
Также WSL приходилось иметь дело с файловой системой NTFS, которая под Linux пока что работает не очень. Из-за этого падала скорость работы в целом. Однако преимущества такого подхода тоже очевидны — полная открытость и контроль. Ядро NT «знает» о ядре Linux и может отслеживать процессы.
Но маркетинг победил, когда выпустили WSL 2. Это уже полноценная виртуальная машина, которая «вшита» в Windows. Настоящий гибрид. При этом Linux в этом случае был «черным ящиком» для NT, поскольку внутренняя логика никак не отслеживалась. Это позволило ускорить работу, но при этом уменьшило контроль со стороны пользователя.
Иначе говоря, если какой-то вирус попадет в WSL 2, то он может обойти защиту и хост-системы. Очевидно, что удаленно взломать такую гибридную систему можно также попытаться через WSL 2, где все по дефолту установлено с максимальными правами.
Предпосылки
Эта статья предполагает две вещи:
- Вы знаете основы SELinux. Если вы не узнаете основы SELinux, сейчас прекрасное время, чтобы сделать это.
-
Вы используете SELinux в режиме enforcing. Режим enforcing является нормальным и ожидаемым способом запуска Fedora. Если вы отключили SELinux, вам необходимо включить его. Отредактируйте файл /etc/sysconfig/selinux для установки SELINUX=permissive. Используя режим permissive гарантирует, что любые радикальные проблемы все еще могут быть исправлены автоматически с помощью следующих команд. Затем выполните следующие действия:
sudo fixfiles -F onboot reboot
Процесс загрузки может занять больше времени, чем обычно, так как SELinux перемаркирует все файлы, созданные в то время, когда он был отключен. Это может занять некоторое время для очень больших файловых систем, так что будьте терпеливы.
Не удивляйтесь, если вы начинаете видеть ошибки после того, как перемаркируете файлы, если вы уже работаете в режиме disabled некоторое время. Работа в режиме disabled, это как клеить обои через утечку. При удалении обоев, вы, вероятно, найти повреждение водой. Точно так же, если вы уже работаете без включенным SELinux, вы, вероятно, создали больше проблем, которые в настоящее время должны быть решены.
После того как машина перезагрузится, вы можете переключиться на режим enforcing:
sudo setenforce 1
PATH Configured At System-Wide Level
When I see the value of the PATH variable on my system, here’s what I get:
There’s something that doesn’t make sense to me…
…in the .bashrc file in the home directory on my user I only see:
So, where do the following directories come from considering that they are not in my user’s .bashrc file?
They must be defined somewhere at system level and not just at user level.
In Linux, system-wide configuration files are located under the /etc directory. For example in /etc/bashrc.
Let’s find out where this initial value for the PATH comes from using a recursive grep as root under the /etc directory.
The only result is in the configuration file for the SSH deamon. According to a comment in this file, the daemon is compiled with the PATH set to the value I’m seeing on my system.
That’s where the value of the PATH comes from!
Как исправить apt get команда не найдена?
Поскольку вторая причина предполагает меньше действий, нам нужно сначала проверить ее. Обычно исполняемые файлы apt находятся в каталоге /usr/bin. Сначала посмотрим есть ли такой файл в той папке:
Если файл есть, то вы увидите что-то похожее как на снимке выше. Также обратите внимания на права. Для пользователя, группы и остальных должен быть выставлен флаг «x» означающий исполнение. Если же его нет, то apt придется переустановить. Если права отличаются от приведенных выше, а именно «-rwxr-xr-x», то их тоже нужно исправить, добавим для всех категорий флаг исполняемости:
Если предыдущие варианты не сработали проверим содержимое переменной среды PATH:
Вы должны увидеть в ней ссылку на /usr/bin. Если такой строчки нет, то проблема была здесь, а строчку нужно добавить в конец:
Например:
Если вы вносили изменения в файл /etc/profile, и переменная PATH сломалась из-за этого, то нужно внести исправления и в этот файл.
Для Ubuntu Xenial:
Для Ubuntu Yakkety:
Теперь осталось установить загруженный пакет:
Готово, после этого ошибка apt get command not found должна исчезнуть и вы сможете нормально работать со своими пакетами.
Изменение переключателей SELinux
Несмотря на то, что прочитать файлы модулей политики невозможно, есть простой способ их настройки. Она осуществляется при помощи булевых переключателей SELinux (boolean).
Чтобы разобраться, как они работают, запустим команду semanage с опцией boolean:
Если у вас будет ошибка
-bash: semanage: команда не найдена
То нужно установить policycoreutils-python
yum install policycoreutils-python
Теперь запускаем semanage с опцией boolean
semanage boolean -l | less
Будет выведен список различных переключателей, которые можно включить или выключить, краткое описание их функций и текущее состояние:
ftp_home_dir (off , off) Allow ftp to home dir smartmon_3ware (off , off) Allow smartmon to 3ware mpd_enable_homedirs (off , off) Allow mpd to enable homedirs xdm_sysadm_login (off , off) Allow xdm to sysadm login xen_use_nfs (off , off) Allow xen to use nfs mozilla_read_content (off , off) Allow mozilla to read content ssh_chroot_rw_homedirs (off , off) Allow ssh to chroot rw homedirs mount_anyfile (on , on) Allow mount to anyfile ... ...
Первый пункт в этом списке позволяет демону FTP осуществлять доступ к домашним директориям пользователей. В данный момент переключатель выключен (off), то есть доступ запрещен.
Для изменения значений используется команда setsebool. В качестве примера давайте разрешим анонимный доступ FTP на запись. Проверим состояние переключателя командой getsebool:
getsebool ftpd_anon_write
Она покажет, что в данный момент переключатель выключен:
ftpd_anon_write --> off
Изменим значение переключателя и включим его:
setsebool ftpd_anon_write on
Снова проверим состояние переключателя, оно должно поменяться:
getsebool ftpd_anon_write ftpd_anon_write --> on
Изменение переключателей является временным, при перезагрузке они вернутся к старым значениям. Чтобы закрепить изменения, нужно запустить команду setsebool с опцией -P.
setsebool -P ftpd_anon_write on
Теперь после перезагрузки изменения не потеряются
9 ответов
Лучший ответ
В разрешении отказано
Для запуска сценария файл должен иметь установленный бит разрешения на выполнение .
Чтобы полностью понять Linux, вы можете изучить документация по команде . chmod, сокращение от режима изменения , команда, которая используется для изменения настроек разрешений для файла.
Чтобы прочитать документацию chmod для вашей локальной системы, запустите или из командной строки. После прочтения и понимания вы сможете понять результат работы …
… который будет перечислять разрешения READ, WRITE и EXECUTE для владельца файла, владельца группы и всех остальных, кто не является владельцем файла или членом группы, к которой принадлежит файл (эта последняя группа разрешений иногда упоминается как «мир» или «другое»)
Вот краткое описание того, как устранить ошибку Permission Denied в вашем случае.
Владелец имеет права чтения и записи rw, но — указывает на то, что разрешение на исполняемый файл отсутствует.
Команда исправляет это. (Группа и другие имеют разрешение только на чтение для файла, они не могут писать в него или выполнять его)
Foo.sh теперь является исполняемым для Linux.
Использование sudo приводит к тому, что команда не найдена
Когда вы запускаете команду с помощью sudo , вы фактически запускаете ее как суперпользователь или root.
Причина того, что пользователь root не находит вашу команду, вероятно, состоит в том, что переменная среды для root не включает каталог, в котором находится . Следовательно, команда не найдена.
Переменная среды PATH содержит список каталогов, в которых выполняется поиск команд. Каждый пользователь устанавливает свою собственную переменную PATH в соответствии со своими потребностями. Чтобы узнать, что он настроен для запуска
Вот пример вывода вышеупомянутой команды сначала от имени обычного пользователя, а затем от имени пользователя root с помощью sudo
Обратите внимание, что, хотя и похоже, в этом случае каталоги, содержащиеся в PATH для непривилегированного пользователя (rkielty) и суперпользователя, не совпадают. Каталог, в котором находится , отсутствует в переменной PATH пользователя root, поэтому ошибка команда не найдена
Каталог, в котором находится , отсутствует в переменной PATH пользователя root, поэтому ошибка команда не найдена .
173
Rob Kielty
7 Дек 2013 в 01:57
Кажется, команда не найдена
Чтобы проверить, установлен ли пакет sudo в вашей системе, введите и нажмите Enter. Если вы установили , система отобразит короткое справочное сообщение, в противном случае вы увидите что-то вроде
Чтобы установить sudo, выполните одну из следующих команд, используя учетную запись root:
# Если ваша система основана на подходящем диспетчере пакетов
# Если ваша система основана на менеджере пакетов yum
-2
Khaled Eid
15 Сен 2020 в 21:50
Хорошо, это мое решение: в ~ / .bash_aliases просто добавьте следующее:
Вуаля! Теперь вы можете выполнять свои собственные сценарии с помощью sudo или устанавливать как ROOT, не выполняя каждый раз экспорт PATH = $ PATH: / home / your_user / bin.
Обратите внимание, что мне нужно указывать явно при добавлении моего PATH, поскольку HOME для суперпользователя — / root
1
Fernando D Jaime
1 Июн 2016 в 03:56
Попробуйте вместо , если у вас возникли проблемы с указанными выше руководствами. Это сработало для меня, когда другие решения не работали.
3
Peter David Carter
13 Июл 2017 в 15:09
Кажется, что linux скажет «команда не найдена», даже если вы явно укажете путь к файлу.
Это несколько вводящая в заблуждение ошибка, но, вероятно, технически правильная. Файл не является командой до тех пор, пока не будет исполнен, и поэтому не может быть найден.
3
Jeff MacDonald
28 Июл 2015 в 13:56
Вы также можете создать мягкую ссылку на свой сценарий в одном из каталогов (например, ) в PATH суперпользователя. Затем он будет доступен для sudo.
Взгляните на этот ответ, чтобы понять, в какой каталог поместить программную ссылку.
6
Rob Kielty
18 Май 2017 в 00:16
- Убедитесь, что у вас есть разрешение на выполнение сценария. т.е.
- Убедитесь, что первая строка этого сценария — или что-то в этом роде.
- Для sudo вы находитесь в неправильном каталоге. уточняйте у
7
Ed Heal
21 Окт 2012 в 09:08
Проверьте secure_path в sudo
Если переопределяется, используйте и отредактируйте
26
codemonkee
25 Сен 2013 в 03:11
Другие решения, которые я видел здесь, основаны на некоторых определениях системы, но на самом деле возможно, чтобы использовал текущий (с командой ) и / или остальная часть среды (с параметром ), просто вызвав его правильно:
Фактически, из него можно сделать псевдоним:
(Также возможно назвать сам псевдоним , заменив исходный .)
116
Tom
1 Апр 2015 в 20:53
SELinux kernel error messages
I get a register_security error message when booting
During boot-up, the following message pops up:
CODE Message during boot-up
There is already a security framework initialized, register_security failed. Failure registering capabilities with the kernel selinux_register_security: Registering secondary module capability Capability LSM initialized
This is nothing to worry about (and perfectly normal).
This means that the Capability LSM module couldn’t register as the primary module, since SELinux is the primary module. The third message means that it registers with SELinux as a secondary module.
I get a ‘Permission … in class … not defined’ message during booting
During boot-up, the following message is shown:
CODE Message about ‘Permission … in class … not defined’
SELinux: 2048 avtab hash slots, 16926 rules. SELinux: 2048 avtab hash slots, 16926 rules. SELinux: 6 users, 6 roles, 1083 types, 34 bools SELinux: 77 classes, 16926 rules SELinux: Permission read_policy in class security not defined in policy. SELinux: Permission audit_access in class file not defined in policy. SELinux: Permission audit_access in class dir not defined in policy. SELinux: Permission execmod in class dir not defined in policy. ... SELinux: the above unknown classes and permissions will be denied SELinux: Completing initialization.
The semanage fcontext command
The policy provides file context information for application file—including data, log, and runtime files—default and common alternate locations. These context definitions are the mappings that the command uses to verify or change file context.
The command can be used to list file context definitions, and add more. The option shows all of the contexts in the loaded policy. You can then filter for a keyword:
This output includes the regular expression pattern for the target filenames, the type of file, and the file context to assign to the matching filename.
The related man page, in this case , includes a list of managed files and a description of each file context available for the domain. There are also sample commands to specify and apply alternate labeling.
For example, if you wanted to store the host keys in a separate subdirectory, you could run the following two commands:
In this example, the regular expression will match the directory as well as any subdirectories and files found in the directory.
Just like the booleans, you can view any locally-customized file contexts by adding the option:
For more options when modifying SELinux file contexts, see the man page.
You can automate the command with the Ansible module. The command will still need to be run with a separate command module. See for examples. The system role includes both tasks.
Как разрешить ошибку «bash: wget: command not found»
Для того, чтобы решить ошибку «bash: wget: command not found», вам необходимо установить утилиту wget на сервере.
В Debian и Ubuntu:
root@ubuntu:~# apt-get install wget
Пример журнала установки:
root@ubuntu:~# apt-get install wget Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: wget 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 298 kB of archives. After this operation, 901 kB of additional disk space will be used. Get:1 http://ap-south-1.ec2.archive.ubuntu.com/ubuntu xenial-updates/main amd64 wget amd64 1.17.1-1ubuntu1.2 Fetched 298 kB in 0s (401 kB/s) Selecting previously unselected package wget. (Reading database ... 51222 files and directories currently installed.) Preparing to unpack .../wget_1.17.1-1ubuntu1.2_amd64.deb ... Unpacking wget (1.17.1-1ubuntu1.2) ... Processing triggers for install-info (6.1.0.dfsg.1-5) ... Processing triggers for man-db (2.7.5-1) ... Setting up wget (1.17.1-1ubuntu1.2) ...
На RHEL и Centos.
# yum install wget
Пример журнала установки:
# yum install wget Loaded plugins: amazon-id, rhui-lb, search-disabled-repos Resolving Dependencies --> Running transaction check ---> Package wget.x86_64 0:1.14-13.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ======================================================================================================================================================================== Package Arch Version Repository Size ======================================================================================================================================================================== Installing: wget x86_64 1.14-13.el7 rhui-REGION-rhel-server-releases 546 k Transaction Summary ======================================================================================================================================================================== Install 1 Package Total download size: 546 k Installed size: 2.0 M Is this ok [y/d/N]: y Downloading packages: wget-1.14-13.el7.x86_64.rpm | 546 kB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : wget-1.14-13.el7.x86_64 1/1 Verifying : wget-1.14-13.el7.x86_64 1/1 Installed: wget.x86_64 0:1.14-13.el7 Complete! #
Как использовать wget для загрузки файлов через Интернет.
Синтаксис:
wget http://url/file or wget ftp://url/file
Примеры журнала загрузки:
# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm --2017-05-06 11:21:34-- http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm Resolving packages.sw.be (packages.sw.be)... failed: Name or service not known. wget: unable to resolve host address ‘packages.sw.be’ # wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-9.noarch.rpm --2017-05-06 11:21:34-- http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-9.noarch.rpm Resolving dl.fedoraproject.org (dl.fedoraproject.org)... 209.132.181.24, 209.132.181.25, 209.132.181.23 Connecting to dl.fedoraproject.org (dl.fedoraproject.org)|209.132.181.24|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 14704 (14K) [application/x-rpm] Saving to: ‘epel-release-7-9.noarch.rpm’ 100% 14,704 57.8KB/s in 0.2s 2017-05-06 11:21:34 (57.8 KB/s) - ‘epel-release-7-9.noarch.rpm’ saved [14704/14704]
В приведенном выше примере мы загрузили файл «rpmforge-релиз-0.5.2-2.el6.rf.x86_64.rpm» с адреса URL «packages.sw.be/rpmforge-release/rpmforge-release-0.5.2- 2.el6.rf.x86_64.rpm»с использованием протокола HTTP.
Определение проблемы
Обычно вы можете определить ошибки SELinux через сообщение AVC. Одним из параметров сообщения AVC является командой, которая генерируется сообщение. Например, вы можете увидеть comm=”/usr/sbin/httpd” в сообщении об ошибке SELinux, которая генерируется веб – сервером Apache.
Проблема также скажет вам контекст источника (scontext) действуя части вашей системы, и контекст цели (tcontext) вещи, котор она попыталась подействовать дальше. Часто, но не всегда, источник является бинарным и целевым файлом. Чтобы понять ошибки лучше, вы можете использовать SELinux Troubleshooter. Вы можете установить это с программным обеспечением инструмента в Fedora Workstation, или использовать sudo с dnf в терминале:
sudo dnf install setroubleshoot
Для запуска программы используйте Обзор в Fedora Workstation, чтобы найти SELinux Troubleshooter, или запустить из терминала:
sealert
Вы можете найти последние оповещения в браузере, который появляется:
На этом экране, например, вы можете получить список всех предупреждений, присутствующие в системе, чтобы устранить их систематически.
Решение проблемы
При выборе неполадок вы увидите несколько вариантов вашей ошибки.
В этом случае пользователь создал файл index.html в своем домашнем каталоге, и использовал команду mv, чтобы переместить его в каталог /var/www/html/ который будет обслуживаться веб – сервера Apache. Указав в веб – браузере http://localhost/index.html, эта ошибка произошла.
Обратите внимание, как каждый выбор дает вам определенный набор команд, которые можно выполнить для решения проблемы. В этом случае имеется логический параметр, который позволяет разрешить действие в будущем, даже если SELinux применяет политику
Тем не менее, только потому, что существует логическое значение, не означает, что вы должны включить его, не понимая его. В этом случае, если вы включите логическое значение, веб – сервер Apache сможет прочитать любой пользовательский контент, чьи права позволяют доступ к файлам. Таким образом, в этом случае, если мы могли бы вместо этого спросить, «Почему этот файл имеет контекст?» В этом случае это происходит потому, что пользователь переместил файл. Это означает, что файл перенесли его старые связи в новом месте, вместо того, чтобы получать новый контекст по умолчанию, который позволяет веб-серверу прочитать содержимое в /var/www/html.
В этом случае лучше идея заключается в том, чтобы просто восстановить правильный контекст файла:
sudo restorecon -rv /var/www/html/index.html Relabeled /var/www/html/index.html from unconfined_u:object_r:user_home_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0
Настройка SELinux
Настройка задается контекстом безопасности, который назначается на файлы. Повторюсь, домен процесса должен быть таким же, как и тип файла.
В системе должен быть установлен пакет policycoreutils-python:
yum install policycoreutils-python
Просмотр текущих настроек контекста безопасности
Для файлов:
ls -Z
* команда покажет все файлы в текущей директории и выведет для каждого контекст безопасности.
Для процессов:
ps -aeZ
* можно использовать grep для выборки определенного процесса или файла.
Вывод каталогов/файлов и применяемых к ним по умолчанию контекстов безопасности:
semanage fcontext -l
Смена контекста безопасности
Задаем метки по умолчанию, которые должны применяться ко всем файлам в каталоге:
semanage fcontext —add —type NetworkManager_etc_rw_t ‘/etc/NetworkManager/NetworkManager(/.*)?’
* в данном примере мы задали правило, что всем файлам в директории /etc/NetworkManager/NetworkManager будут назначаться SELinux права (тип) NetworkManager_etc_rw_t. Однако нужно понимать, что это не приведет к смене прав для файлов, которые уже находятся в каталоге.
Сбрасываем права на заданные по умолчанию:
restorecon /etc/NetworkManager/NetworkManager
* все права сменятся на те, которые мы указали командой semanage fcontext.
Редактируем права на файл:
chcon -v —type=cron_spool_t /var/spool/cron
* команда задаст права на /var/spool/cron. Также можно использовать рекурсивный запрос, чтобы применить метки ко всех файлам в каталоге. Это делается с добавлением опции -R.
Использование команды chcon нежелательно, так как в случае применения правил по умолчанию, установленные права будут сбрасываться, что приведет к неочевидным проблемам. По возможности, стоит применять команды semanage fcontext и restorecon.
Готовые политики
Разработчики некоторых программных решений предоставляют готовые наборы настроек SELinux для своих программ.
Список установленных редактируемых политик можно посмотреть следующей командой:
getsebool -a
* команда выведет название политик и их статус: включена — on, отключена — off.
Чтобы изменить состояние готовой политики, вводим команду:
setsebool -P <имя политики> <on или off>
Например:
setsebool -P virt_use_samba on
Политики SELinux
В основе структуры безопасности SELinux лежат политики. Политика — это набор правил, определяющих ограничения и права доступа для всего, что есть в системе. Под “всем” в данном случае понимаются пользователи, роли, процессы и файлы. Политика определяет связь этих категорий друг с другом.
Для понимания политик необходимо понимание базовых терминов. Политика SELinux определяет доступ пользователей к ролям, доступ ролей к доменам и доступ доменов к типам. Разберём значение этих терминов.
Пользователи
В SELinux есть набор предварительно заданных пользователей. Каждая стандартная учётная запись пользователя Linux соответствует одному или нескольким пользователям SELinux.
В Linux пользователи запускают процессы. Это может быть пользователь ivan, открывший документ в редакторе vi (учётная запись ivan запускает процесс vi) или служебная учётная запись, запустившая демон httpd. В SELinux процесс (демон или запущенная программа) называется субъектом.
Роли
Роль определяет, какие пользователи могут осуществлять доступ к заданному процессу. Роли не тождественны группам, они больше похожи на фильтры: пользователь может принадлежать к роли в любое время, если роль это позволяет. Определение роли в политике безопасности SELinux задаёт пользователей, имеющих доступ к этой роли. Роли используются потому, что один из элементов SELinux реализует ролевую модель управления доступом (RBAC — Role Based Access Control).
Субъекты и объекты
Субъект — это процесс, который может потенциально влиять на объект.
Объектом в SELinux называется все, над чем можно выполнять какие-либо действия. Это может быть файл, директория, порт, tcp-сокет, курсор, X-сервер. Действия, которые субъект может выполнить над объектом, являются разрешениями субъекта.
Домены
Домен — это контекст, в котором может работать субъект SELinux (процесс). Этот контекст представляет собой как бы оболочку вокруг субъекта, которая сообщает процессу, что он может и не может делать. Например, домен определяет, какие файлы, директории, ссылки, устройства или порты доступны для субъекта.
Типы
Тип — это контекст для файла, который устанавливает предназначение файла. Например, контекст файла может указывать, что это веб-страница, или что файл находится в директории /etc, или что владелец этого файла — конкретный пользователь. В терминах SELinux контекст файла называется его типом.
Политика SELinux определяет доступ пользователей к ролям, доступ ролей к доменам и доступ доменов к типам. Сначала пользователь должен быть авторизован для получения роли, затем роль должна быть авторизована для доступа к доменам. Домен, в свою очередь, может осуществлять доступ только к определенным типам файлов.
Механизм, при котором процесс, запущенный в определенном домене, может осуществлять только определенные действия над определенными типами объектов, называется принудительным присвоением типов (Type Enforcement — TE).