¿Cómo obtiene el comando id en Linux grupos de usuarios o qué módulo pam se utiliza?

¿Cómo obtiene el comando id en Linux grupos de usuarios o qué módulo pam se utiliza?

Tenemos la configuración sssd de la siguiente manera:

id_provider = ad
auth_provider = krb5
access_provider = ldap
enumerate = false
ignore_group_members = true;

Como puede ver, no enumeramos usuarios y grupos y, por lo tanto, getent passwdno getent groupmostramos los usuarios y grupos del anuncio.

Ahora quiero entender cómo id -a <aduser>el comando muestra al usuario y sus grupos. Entiendo que busca en tiempo real el nombre de usuario dado o lo recupera del caché sssd. Pero quiero saber exactamente qué le dice al comando id que obtenga esta información de sssd.

Alguna información general para mi pregunta:

Estoy intentando configurar la autenticación ldap en nuestro servidor comunitario mysql 5.6 y para eso estoy usando auth_pam.so, que copié del servidor percona de mi VM local.

Creé un usuario proxy: ad_dbay lo asigné con el grupo ldap: mysql_dba y creé el siguiente servicio pam:

# cat /etc/pamd./mysqld
#%PAM-1.0
auth    include  password-auth audit
account include password-auth audit

Entonces, mi auth_string es el siguiente:mysqld, ad_dba=mysql_dba

Ahora, le di privilegios completos al usuario proxy:ad_dba

Sin embargo, solo puedo autenticarme con mi usuario publicitario pero no tengo ningún privilegio. Tengo entendido que el mapeo grupal no funciona.

No estoy seguro de cómo MySQL verifica a los miembros del grupo de usuarios. Estoy intentando ver si puedo agregar un módulo específico en PAM solo para recuperar la información de este grupo.

EDITAR-1:

Veo en el código fuente que el complemento mysql utiliza funciones integradas de Linux getgrouplisty getgrgid_r:

Por lo tanto, debo encontrar una manera de enumerar mis grupos y usuarios requeridos en la base de datos de grupos o cambiar el código y volver a compilarlo. Mi pregunta se ha vuelto irrelevante ahora respecto de esta cuestión. Pero todavía estoy ansioso por saber cómo obtiene id esta información.

Respuesta1

El idcomando obtiene la información del grupo de la misma fuente que getent group: preguntando a la biblioteca C, que luego mira la grouplínea de /etc/nsswitch.confy usa las funciones en la libnss_<name>.sobiblioteca o bibliotecas correspondientes para obtener la respuesta.

Las bibliotecas PAM no se utilizarán aquí en absoluto.

Por ejemplo, en tu situación, nsswitch.confdeberías decir al menos:

passwd: files sss
group: files sss

lo que haría que la biblioteca C primero realice la consulta usando libnss_files.so(que buscará en /etc/passwdy /etc/group), y si la respuesta no se encuentra allí, entonces con libnss_sss.so(que preguntará sssd).

Todos los mecanismos de búsqueda de nombres de usuario/grupos en la biblioteca GNU C ( glibc) utilizan este mecanismo, por lo que tanto el idcomando como MySQL eventualmente terminarán usando las mismas fuentes de información.

Pero en su caso, nsswitch.confpodría contener solo files(o compat) en las líneas passwdy group. Debe verificar su nsswitch.confarchivo y agregarlo sssallí si es necesario.

Respuesta2

id utiliza algunas utilidades principales para obtener la información. Si mirasid.cpuedes ver que incluye el archivo mgetgroups.h y llama a una función xgetgroups, que llamagrupos mget... si sigues persiguiendo, puedes rastrear las funciones que se llaman y desde dónde se incluyen. Básicamente, hay llamadas al sistema para recuperar la información pertinente de la base de datos del grupo que, en teoría, se construye utilizando la información nsswitch.conf para construir la base de datos a partir de las fuentes especificadas en la línea "grupo:".

información relacionada