Transição do SELinux de unconfined_r para user_r

1

Em uma máquina Fedora 18, eu tenho o seguinte contexto SELinux como um usuário comum criado durante a instalação:

$ 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

e

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

Eu quero rodar um programa com a função selinux confinada user_r , ao invés do meu atual unconfined_r , então eu crio um novo usuário com o usuário confinado do SELinux user_r :

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

Agora, abro um novo tty e faço o login como johndoe usando agetty . Ele reclama que /home/johndoe não existe, mas essencialmente, me registra. Contexto SELinux:

$ id -Z
user_u:user_r:user_t:s0

user_u:user_r:user_t é perfeito e o que eu quero. Mas eu gostaria de conseguir isso em um script rodando como unconfined_u e não como um novo login. Eu tentei com sudo :

Se eu usar sudo -u , obtenho:

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

O que significa que o usuário do SELinux não muda.

Eu também tentei:

$ 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

Então, também não há sorte.

Então, como posso fazer a transição da função unconfined_r para user_r , usando sudo ou su (ou qualquer outra coisa)?

    
por ArjunShankar 12.12.2013 / 15:35

2 respostas

2

Já experimentou a solução policycoreutils-sandbox? Isso é exatamente o que você quer. Por exemplo, se você deseja executar o Firefox em um ambiente restrito do SELinux (infelizmente, mas por uma boa razão, o "sandbox" é suportado apenas nas distribuições Red Hat):

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

O SELinux é separado de outros sistemas MAC baseados em LSM por sua flexibilidade e personalização.

Isso permite que você faça o que quiser, mesmo que isso não faça sentido. Um pré-requisito é que você esteja ciente, pelo menos, dos princípios e conceitos básicos.

Há algumas coisas que precisam ser resolvidas aqui:

  • o identificador de segurança de identidade do SELinux unconfined_u deve ser associado ao identificador de segurança de função user_r SELinux se você deseja que a combinação "unconfined_u: user_r" em um contexto de segurança seja válido.

Isso pode ser feito com:

semanage user -m -L s0 -r s0-s0:c0.c1023 -R "unconfined_r system_r user_r" -P user unconfined_u
  • O identificador de segurança da função unconfined_r SELinux deve ter permissão para ser manualmente (via sudo neste caso) alterado para o user_r SELinux identificador de segurança de função.

Isso pode ser feito criando um módulo de política simples:

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
  • O Sudo precisa ser informado sobre o identificador de segurança do tipo SELinux deve usar em conjunto com a segurança da função do user_r SELinux especificada identificador

    sudo -r user_r -t user_t id -Z

Eu acredito que eu toquei em toda a consideração, mas eu poderia ter esquecido alguns e meu exemplo pode ter erro de digitação. Consulte as páginas de manual para os comandos que mencionei.

    
por 14.12.2013 / 15:08
0

Enquanto estiver usando MLS , seu comando

sudo -u johndoe id -Z

significa que você está passando seu role e type para o sudo. Você deve usar o comando

sudo -r user_r -u johndoe id -Z

Além disso, se você tentou fazer o login com o console ou o ssh, também poderá ver os papéis e tipos corretos.

EDIT: Eu quero dar algumas notas também. Você não pode alterar seu contexto ( id -Z ) se não houver uma transição válida. Você receberá um erro como

sudo: ... is not a valid context

Por ser o root, primeiramente você deve estar no arquivo sudoers e no usuário staff_u do selinux. Para o sudo, gosto de adicionar apenas myuser ALL=/bin/su para usar sudo su - . Depois que fiz sudo su - , tornei-me root, executo newrole -r sysadm_r para obter direitos de administrador do sistema. Não é surpreendente porque o sudo não pode mudar role . Da mesma forma que, antes de sair eu executo newrole -r staff_r para retornar minha própria função. Depois disso eu saio, caso contrário, o shell trava (erro de contexto válido).

    
por 08.01.2015 / 10:42