SELinux não permitindo que oddjobd-mkhomedir crie um diretório inicial do usuário em um local não padrão

9

Estamos usando o SSSD para autenticar usuários em servidores CentOS. O oddjobd-mkhomedir funciona perfeitamente quando o diretório inicial padrão é / home, mas em um servidor específico, tivemos que alterar o diretório inicial padrão para / data, que está em uma montagem SAN.

Agora, toda vez que um usuário tenta efetuar login, ele é colocado em um shell bash com a seguinte mensagem.

Creating home directory for first.last.

Could not chdir to home directory /data/X.Y.local/first.last: No such file or directory

-bash-4.1$

Eu vejo a seguinte mensagem de negação do AVC para cada tentativa:

type=AVC msg=audit(1492004159.114:1428): avc:  denied  { create } for  pid=2832 
comm="mkhomedir" name="x.y.local"
scontext=system_u:system_r:oddjob_mkhomedir_t:s0-s0:c0.c1023
tcontext=system_u:object_r:default_t:s0 tclass=dir

Certifique-se de alterar o contexto para / data.

 drwxr-xr-x. root root system_u:object_r:home_root_t:s0 data

Se / data tiver o mesmo contexto que / home, por que o SELinux está restringindo o oddjobd para criar /data/XYlocal/first.last?

# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted

[ATUALIZAR]

Não tenho certeza se essa é a maneira correta de resolver isso, mas depois de adicionar as três entradas a seguir, o usuário agora pode efetuar login e acessar seus diretórios pessoais. Os diretórios de novos usuários estão sendo criados com base nos contextos definidos abaixo.

semanage fcontext -a -t home_root_t /data
semanage fcontext -a -t user_home_dir_t /data/x.y.local
semanage fcontext -a -t user_home_t "/data/x.y.local(/.*)?"

Essa é a maneira correta de contornar esse problema?

Abhi
fonte
Não sei se isso é relevante para o seu problema, mas causou-me tristeza no passado: linux.die.net/man/8/nfs_selinux
0xSheepdog

Respostas:

4

Essa última seção com semanage fcontexté a maneira correta de definir permanentemente o contexto sim. Você precisará executar restoreconpara que tenha efeito.

restorecon -Rv /data

restoreconlevará em consideração qualquer coisa /etc/selinux/targeted/contexts/files/file_contexts.local, que deve ter seus fcontextos personalizados que você acabou de adicionar usandosemanage

Para definir esses contextos temporariamente, consulte o chconcomando:

chcon -Rv -t home_root_t /data 
Patrick
fonte
1

Ao realocar os diretórios pessoais, a melhor solução é provavelmente usar o mecanismo EQUAL semanage fcontextconforme descrito nesta resposta por falha do servidor :

semanage fcontext -a -e /home /data

Isso é para garantir que todas as regras do local de origem original também sejam aplicadas ao novo.

mnk
fonte