Configuración del shell de inicio de sesión en la configuración SSS para usuarios de Active Directory

Configuración del shell de inicio de sesión en la configuración SSS para usuarios de Active Directory

Estoy intentando definir diferentes shells de inicio de sesión para diferentes usuarios de un dominio AD,como se describe aquí. El objetivo es impedir que los miembros de un grupo en particular inicien sesión y al mismo tiempo permitirles realizar túneles SSH.

A continuación se muestra el archivo /etc/sssd/sssd.conf. MYDOMAIN.GLOBAL es el dominio predeterminado proporcionado por AD. La siguiente configuración define un dominio de prueba MYDOMAIN_TEST.GLOBAL, que no está en AD, como el dominio para estos usuarios limitados. (Esta es solo una configuración para pruebas: más adelante, en la sección del dominio MYDOMAIN_TEST.GLOBAL, override_shell = /bin/zshserá reemplazado por override_shell = /sbin/nologin.)

[sssd]
domains = MYDOMAIN.GLOBAL,MYDOMAIN_TEST.GLOBAL
config_file_version = 2
services = nss, pam

[nss]
default_shell = /bin/bash

[domain/MYDOMAIN.GLOBAL]
ad_server = ad.mydomain.global
ad_domain = MYDOMAIN.GLOBAL
ldap_user_search_filter = (memberOf=CN=AdminsGroup,OU=Groups,DC=MYDOMAIN,DC=GLOBAL)
id_provider = ad
simple_allow_groups = [email protected]
override_shell = /bin/bash

[domain/MYDOMAIN_TEST.GLOBAL]
ad_server = ad.mydomain.global
ad_domain = MYDOMAIN.GLOBAL
ldap_user_search_filter = (memberOf=CN=LimitedGroup,OU=Groups,DC=MYDOMAIN,DC=GLOBAL)
id_provider = ad
simple_allow_groups = [email protected]
override_shell = /bin/zsh

Un miembro de MYDOMAIN.GLOBAL puede iniciar sesión a través de SSH, mientras que un miembro de MYDOMAIN_TEST.GLOBAL no puede y recibe el mensaje "Permiso denegado, inténtelo de nuevo" o el error "Error de autenticación".

Los sssdarchivos de registro no muestran ningún error.

¿Porqué es eso?

¿Es necesario que MYDOMAIN_TEST.GLOBAL esté presente en el AD? En caso afirmativo, ¿es posible evitar esto de alguna manera y configurar sss con diferentes "categorías locales" de usuarios para hacer lo que quiero?

(Nota: aparentemente esto se puede hacer con nlscd, comopor esta preguntayesta otra pregunta, pero requiere un servidor LDAP, y configurarlo para usar un AD es otra lata de gusanos).

Respuesta1

Esto debería funcionar con versiones más nuevas de sssd:

[sssd]
domains = MYDOMAIN_ADMINS,MYDOMAIN_LIMITED,MYDOMAIN_ALL
config_file_version = 2
services = nss, pam

[nss]
default_shell = /bin/bash

[domain/MYDOMAIN_ADMINS]
ad_server = srv001.company.local,srv002.company.local,srv003.company.local,srv004.company.local
ad_domain = company.local  
ldap_user_search_base = DC=company,DC=local?subtree?(memberOf=CN=unix_admins,OU=Groupes,OU=Main Office,DC=company,DC=local)
id_provider = ad
override_shell = /usr/bin/pwd
override_homedir = /home/%u

[domain/MYDOMAIN_LIMITED]
ad_server = srv001.company.local,srv002.company.local,srv003.company.local,srv004.company.local
ad_domain = company.local  
ldap_user_search_base = DC=company,DC=local?subtree?(memberOf=CN=unix_limited,OU=Groupes,OU=Main Office,DC=company,DC=local)
id_provider = ad
override_shell = /usr/bin/date
override_homedir = /home/%u

[domain/MYDOMAIN_ALL]
ad_server = srv001.company.local,srv002.company.local,srv003.company.local,srv004.company.local
ad_domain = company.local  
ldap_user_search_base = DC=company,DC=local
id_provider = ad
override_homedir = /home/%u

Se ldap_user_search_baseutiliza en lugar del ahora obsoleto (¿eliminado?) ldap_user_search_filter.

No sé si agregar un simple_allow_groupsfiltro ldap_user_search_basees correcto o no. Me pregunto si funcionaría sólo con una simple_allow_groupsdirectiva.

Respuesta2

Gracias amantenedores de sssdEncontré la respuesta. Aquí hay una configuración funcional que hace lo que necesitaba, es decir, permitir la creación de túneles SSH pero no el inicio de sesión SSH para los usuarios de AD que son miembros del AD LimitedGroup.

Tenga en cuenta que un miembro del grupo limitado debe utilizar ssh como user@MYDOMAIN_TEST.GLOBAL, no como [email protected], o no funcionará.

La esencia de la solución consiste en utilizar el nombre de dominio de la sección SSSD en lugar del nombre de dominio AD en la simple_allow_groupsdirectiva. Sin embargo, tenga en cuenta que la configuración también funciona sin las líneas access_provider = simpley simple_allow_groups = .... También es posible configurarlo simple_allow_groups = groupsin la use_fully_qualified_names = Truedirectiva, como informó un usuario en los comentarios.

Además, tenga en cuenta que esta configuración utiliza ldap_user_search_baseen lugar del obsoleto ldap_user_search_filter.

Las otras opciones de configuración son solo para completar, ya que ya estaban en el archivo de configuración.

[sssd]
domains = MYDOMAIN.GLOBAL,MYDOMAIN_TEST.GLOBAL
config_file_version = 2
services = nss, pam

[nss]
default_shell = /bin/bash

[domain/MYDOMAIN_TEST.GLOBAL]
ldap_user_search_base = DC=MYDOMAIN,DC=GLOBAL?subtree?(memberOf=CN=LimitedGroup,OU=Groups,DC=MYDOMAIN,DC=GLOBAL)
default_shell = /sbin/nologin
ad_server = ad.mydomain.global
ad_backup_server = ad2.mydomain.global
ad_domain = MYDOMAIN.GLOBAL
krb5_realm = MYDOMAIN.GLOBAL
realmd_tags = manages-system joined-with-adcli 
cache_credentials = False
id_provider = ad
krb5_store_password_if_offline = True
ldap_id_mapping = True
use_fully_qualified_names = True
fallback_homedir = /home/%u@%d
access_provider = simple
simple_allow_groups = LimitedGroup@MYDOMAIN_TEST.GLOBAL

[domain/MYDOMAIN.GLOBAL]
ldap_user_search_base = DC=MYDOMAIN,DC=GLOBAL?subtree?(memberOf=CN=AdminsGroup,OU=Groups,DC=MYDOMAIN,DC=GLOBAL)
default_shell = /bin/bash
ad_server = ad.mydomain.global
ad_backup_server = ad2.mydomain.global
ad_domain = MYDOMAIN.GLOBAL
krb5_realm = MYDOMAIN.GLOBAL
realmd_tags = manages-system joined-with-adcli 
cache_credentials = False
id_provider = ad
krb5_store_password_if_offline = True
ldap_id_mapping = True
use_fully_qualified_names = True
fallback_homedir = /home/%u@%d
access_provider = simple
simple_allow_groups = [email protected]

información relacionada