Função e tipo errados no login

9

Eu estou em um derivado do Ubuntu 14.04, elementary OS Freya.

Eu instalei e configurei o SELinux usando o pacote selinux-policy-default , que contém muitos módulos. Eu também adicionei meu usuário ao usuário staff_u SELinux:

$ sudo semanage login -l

Login Name           SELinux User         MLS/MCS Range        Service

__default__          unconfined_u         SystemLow-SystemHigh *
naftuli              staff_u              SystemLow-SystemHigh *
root                 unconfined_u         SystemLow-SystemHigh *
system_u             system_u             SystemLow-SystemHigh *

Para referência, aqui estão os usuários do SELinux:

$ sudo semanage user -l

                Labeling   MLS/       MLS/                          
SELinux User    Prefix     MCS Level  MCS Range                      SELinux Roles

root            sysadm     SystemLow  SystemLow-SystemHigh           staff_r sysadm_r system_r
staff_u         staff      SystemLow  SystemLow-SystemHigh           staff_r sysadm_r
sysadm_u        sysadm     SystemLow  SystemLow-SystemHigh           sysadm_r
system_u        user       SystemLow  SystemLow-SystemHigh           system_r
unconfined_u    unconfined SystemLow  SystemLow-SystemHigh           system_r unconfined_r
user_u          user       SystemLow  SystemLow                      user_r

Depois de fazer o login, tenho um tipo estranho e me encontro em sysadm_r em vez de staff_r :

$ id -Z
staff_u:sysadm_r:gpg_agent_t:SystemLow

Eu posso explicar o gpg_agent_t , pois tenho um script no meu Xsession.d que inicia gpg-agent , /etc/X11/Xsession.d/90gpg-agent :

: ${GNUPGHOME=$HOME/.gnupg}

GPGAGENT=/usr/bin/gpg-agent
PID_FILE="$HOME/.gpg-agent-info"

if grep -qs '^[[:space:]]*use-agent' "$GNUPGHOME/gpg.conf" "$GNUPGHOME/options" &&
   test -x $GPGAGENT &&
   { test -z "$GPG_AGENT_INFO" || ! $GPGAGENT 2>/dev/null; }; then

   if [ -r "$PID_FILE" ]; then
       . "$PID_FILE"
   fi

   # Invoking gpg-agent with no arguments exits successfully if the agent
   # is already running as pointed by $GPG_AGENT_INFO
   if ! $GPGAGENT 2>/dev/null; then
       STARTUP="$GPGAGENT --daemon --enable-ssh-support --sh --write-env-file=$PID_FILE $STARTUP"
   fi
fi

No entanto, não consigo descobrir por que as shells gráficas que eu abro têm o tipo gpg_agent_t e por que elas têm a função sysadm_r . No meu /etc/sudoers , concedi acesso para poder fazer a transição para o sysadm_r com o sudo, mas não deveria ter isso por padrão:

naftuli ALL=(ALL:ALL) ROLE=sysadm_r PASSWD: ALL

Se eu fizer login com um TTY, tudo ficará bem:

staff_u:staff_r:staff_t:SystemLow-SystemHigh

Por que lightdm ou gala está me dando esse tipo e papel estranhos? Como posso consertar isso?

Eu sei que não há política para lightdm ou gala, eu posso estar escrevendo um. Estou tentando colocar este sistema no modo enforcing, estou permissivo porque X / gala / lightdm falha assim que eu setenforce 1 .

EDIT: Ao editar meu script de início do gpg-agent, agora estou logado como staff_u:sysadm_r:sysadm_t . Além disso, meus processos de sessão são assim:

system_u:system_r:sysadm_t:s0   root      1875  0.0  0.0 292864  5888 ?        SLsl 10:33   0:00 lightdm
system_u:system_r:xserver_t:s0  root      1927  6.3  0.4 396864 74804 tty7     Ssl+ 10:33  12:38 /usr/bin/X -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
system_u:system_r:sysadm_t:s0   root      4699  0.0  0.0 170580  4688 ?        Sl   10:33   0:00 lightdm --session-child 12 19
staff_u:sysadm_r:sysadm_t:s0    naftuli   5067  2.0  0.4 974688 75180 ?        Sl   10:34   4:08 gala

Eu acho que Gala está fazendo errado. Poderia ser lightdm, que é o meu login, mas não tenho certeza. Mais uma vez, este é o Ubuntu, portanto, não é provável que o reconhecimento do SELinux seja feito.

    
por Naftuli Kay 27.12.2015 / 21:01

1 resposta

2

Como essa é uma pergunta muito boa, e foi interessante para mim, fiz algumas pesquisas que acabaram não sendo muito úteis. Por fim, entrei em contato com #selinux no IRC Freenode e perguntei como a função padrão do selinux está selecionada. Felizmente, o usuário grift poderia fornecer as informações que faltavam para responder à sua pergunta.

O componente principal para definir o contexto do selinux é pam_selinux.so , que é responsável pela configuração da sessão. O módulo pam tem várias opções de configuração e também pode solicitar ao usuário, de forma interativa, o contexto desejado. Caso não haja informações durante o login, ele volta a usar as informações armazenadas em /etc/selinux/$TYPE/contexts/user/$USERID , se não definido, usa o contexto __default__ definido em contexts/default_contexts .

root@u1604-cnt-host:/etc/pam.d# grep selinux *
lightdm:session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
lightdm:session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
lightdm-autologin:session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
lightdm-autologin:session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
lightdm-greeter:session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
lightdm-greeter:session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
login:session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
login:session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
sshd:session [success=ok ignore=ignore module_unknown=ignore default=bad]        pam_selinux.so close
sshd:session [success=ok ignore=ignore module_unknown=ignore default=bad]        pam_selinux.so open
systemd-user:session  required pam_selinux.so close
systemd-user:session  required pam_selinux.so nottys open
root@u1604-cnt-host:/etc/pam.d#

Como lightdm usa as mesmas pam_selinux.so chamadas como login ou sshd , isso não deve ser a origem do problema.

Em breve, tentei fazer a alteração desejada funcionar no Ubuntu, mas tive a impressão de que a política do selinux estava confusa no nível do processo. Então eu fiz alguns testes no Fedora:

[root@workbench users]# cat /etc/selinux/targeted/contexts/users/staff_u
system_r:local_login_t:s0       guest_r:guest_t:s0 staff_r:staff_t:s0
system_r:remote_login_t:s0      staff_r:staff_t:s0
system_r:sshd_t:s0              guest_r:guest_t:s0 staff_r:staff_t:s0
%<--- snipp ---%<

mudar system_r:sshd_t:s0 para guest_r:guest_t:s0 funciona bem, o usuário do selinux deve ter a função atribuída para funcionar. O processo sshd está sendo executado no domínio system_r:sshd_t . Ao tentar alternar o contexto padrão de staff_u para sysadm_r:sysadm_t|system_r:system_r , o login volta para staff_r:staff_t:s0 ao substituir apenas a parte guest_r:guest_t . Isso está relacionado à política de system_r:sshd_t que não permite a mudança de contexto para system_r ou sysadm_t .

Definir uma combinação não funcional leva a unconfined_r:unconfined_t , que é o tipo padrão no Fedora targeted , pois default_contexts contém user_r:user_t para system_r:sshd_t , mas o usuário selinux não teve acesso à função user_r durante o teste.

Mais alguns detalhes sobre o assunto:

link

link

    
por 01.07.2018 / 22:40