1

На компьютере с Fedora 18 у меня есть следующий контекст SELinux как обычный пользователь, созданный во время установки:

$ sestatus
SELinux status:                 enabled
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed

а также

$ id -Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

Я хочу запустить программу с ограниченной ролью selinux user_r , вместо моего текущего unconfined_r , поэтому я создаю нового пользователя с ограниченным пользователем SELinux user_r:

# useradd -MN -Z user_u johndoe
# echo 'fubar' | passwd johndoe --stdin

Теперь я открываю новый tty и захожу как johndoe используя agetty . Он жалуется, что /home/johndoe не существует, но, по сути, он регистрирует меня. Контекст SELinux:

$ id -Z
user_u:user_r:user_t:s0

user_u:user_r:user_t идеально подходит и то, что я хочу. Но я хотел бы добиться этого в сценарии, который уже запущен как unconfined_u а не как новый логин. Я пытался с sudo:

Если я использую sudo -u , я получаю:

$ sudo -u johndoe id -Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

Это означает, что пользователь SELinux не меняется.

Я также попробовал:

$ sudo -r user_r -u johndoe id -Z
sudo: unconfined_u:user_r:user_t:s0-s0:c0.c1023 is not a valid context
sudo: unable to execute /bin/id: Invalid argument

Так что там тоже не повезло.

Так как я могу перейти от unconfined_r роли в user_r используя sudo или su (или что - нибудь еще)?

2 ответа2

2

Вы пробовали решение policycoreutils-sandbox? Это именно то, что вы хотите. Например, если вы хотите запустить Firefox в среде с ограниченным доступом SELinux (к сожалению, но по уважительной причине "песочница" поддерживается только в дистрибутивах Red Hat):

/usr/bin/sandbox -X -t sandbox_web_t firefox

SELinux отличается от других MAC-систем на основе LSM своей гибкостью и возможностью настройки.

Это позволяет вам делать то, что вы хотите, даже если это не имеет смысла. Одним из предварительных условий является то, что вы знаете, по крайней мере, основные принципы и концепции.

Есть несколько вещей, о которых нужно позаботиться здесь:

  • Идентификатор безопасности SELinux для undefined_u должен быть связан с идентификатором безопасности SELinux user_r, если вы хотите, чтобы комбинация «undefined_u:user_r» в контексте безопасности была действительной.

Это можно сделать с помощью:

semanage user -m -L s0 -r s0-s0:c0.c1023 -R "unconfined_r system_r user_r" -P user unconfined_u
  • Для идентификатора безопасности роли SELinux без ограничений необходимо разрешить изменение вручную (в данном случае через sudo) на идентификатор безопасности роли SELinux user_r.

Это можно сделать, создав простой модуль политики:

cat > myuser.te <<EOF
module myuser 1.0;
require { role unconfined_r, user_r; }
allow unconfined_r user_r;
EOF

checkmodule -M -m myuser.te -o myuser.mod
semodule_package -o myuser.pp -m myuser.mod
sudo semodule -i myuser.pp
  • Sudo нужно сообщить, какой идентификатор безопасности типа SELinux он должен использовать вместе с указанным идентификатором безопасности роли SELinux user_r

    sudo -r user_r -t user_t id -Z

Я полагаю, что я затронул все соображения, но я мог не заметить некоторых, и в моем примере могут быть опечатки. Обратитесь к страницам руководства для команд, которые я упомянул.

0

При использовании MLS ваша команда

sudo -u johndoe id -Z

означает, что вы передаете свою роль и тип sudo. Вы должны использовать команду

sudo -r user_r -u johndoe id -Z

Кроме того, если вы попытаетесь войти в систему с консоли или ssh, вы также можете увидеть правильные роли и типы.

РЕДАКТИРОВАТЬ: Я хочу дать некоторые заметки тоже. Вы не можете изменить свой контекст (id -Z), если нет допустимого перехода. Вы получите ошибку как

sudo: ... is not a valid context

Для того, чтобы быть пользователем root, сначала вы должны быть в файле sudoers и в файле staff_u selinux. Для sudo мне нравится добавлять только myuser ALL=/bin/su для использования sudo su - . После того, как я сделал sudo su - , стал root, я newrole -r sysadm_r чтобы получить права системного администратора. Это не удивительно, потому что sudo не может изменить роль . Так же, как и перед выходом из системы, я выполняю newrole -r staff_r чтобы вернуть мою собственную роль. После этого я выхожу, иначе оболочка зависает (допустимая ошибка контекста).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .