Eu tenho um Active Directory funcionando como id, access e auth provider para meus servidores CentOS 7 usando sssd. Eu tenho seguido este postar para que usuários de grupos diferentes usem shells diferentes enquanto fazem login, mas eu tenho alguns problemas.
Aqui está o meu arquivo sssd.conf
:
[sssd]
domains = dev, domain.local
config_file_version = 2
services = nss, pam
[nss]
default_shell = /bin/bash
[domain/dev]
ad_domain = domain.local
krb5_realm = DOMAIN.LOCAL
ad_server = adserver.domain.local
id_provider = ad
access_provider = ad
ldap_id_mapping = True
use_fully_qualified_names = False
fallback_homedir = /home/%u
override_shell = /bin/tcsh
ldap_user_search_base = cn=dev,ou=Security Groups,ou=Domain,dc=domain,dc=local #According to sssd-ldap man page ldap_user_search_filter is deprecated
[domain/domain.local]
ad_server = adserver.domain.local
ad_domain = domain.local
krb5_realm = DOMAIN.LOCAL
realmd_tags = manages-system joined-with-adcli
cache_credentials = True
id_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = True
use_fully_qualified_names = False
fallback_homedir = /home/%u
access_provider = ad
A ideia é que quando alguém do grupo dev for logar, o shell seria o tcsh e quando alguns outros logins populares, ele usa o bash. A questão é, com esse conf, posso logar com sucesso com o Smith, um membro do grupo dev e chegar ao tcsh com sucesso, mas se eu fizer login com o John, membro também do domínio mas não um membro do dev, acontece o seguinte :
- Revendo
/var/log/secure
recebo uma falha de autenticação primeiro do pam_unix e depois um sucesso do pam_sss
- O primeiro usuário loga como
john
e obtém seu shell como tcsh (mesmo que deva ser bash). Em segundo lugar, o usuário efetua login como [email protected]
e obtém o bash. Terceiro, o usuário loga novamente como john
e agora ele obtém o shell correto (bash)
Aparentemente sssd depois de verificar o segundo domínio com o FQDN, ele armazena em cache o shell do usuário e, no terceiro login, faz isso direito.
Qual é a configuração correta para fazer o login de cada usuário em seu shell correspondente?
UPDATE :
Parece que, às vezes, o processo de login passa pelos módulos pam sozinho e, às vezes, por meio das diretivas sssd baseadas no GPO, obtidas do diretório ativo.
Eu tentei desativar o filtro e reiniciar o sssd várias vezes e em um desses eu consegui no log:
Aug 28 15:42:43 co-proy-02 sssd[be[dev.domain.local]]: Warning: user would have been denied GPO-based logon access if the ad_gpo_access_control option were set to enforcing mode.
Com o filtro desativado, o usuário Smith
de dev
groups obtém tcsh com êxito, mas também john
. Com filtro ativado, ambos recebem bash.
UPDATE2
Aparentemente, existe um pacote chamado sssd-tools
, que tem um comando que permite substituir o shell de qualquer usuário separado; no entanto, depois de tentar essa solução, ainda não obtive resultados apropriados.
Aqui está o comando, mas pelo menos para mim, não está funcionando como deveria:
sss_override user-add smith -s /usr/bin/sh