Filtre el usuario LDAP a través de PAM para que parezca que no existe en absoluto

Filtre el usuario LDAP a través de PAM para que parezca que no existe en absoluto

En nuestro entorno corporativo hace mucho tiempo, algunos magos decidieron poner el usuario " mysql" en LDAP.

La cuenta está deshabilitada:

$ sudo su - mysql
This account is currently not available.

...pero su identificación todavía existe:

$ id mysql
uid=2050913(mysql) gid=867(ENG) groups=867(ENG)

Esto hace que las instalaciones de mariadb fallen en CentOS7 porque /var/run/mariadbse crea mediante una regla tmpfile que intenta asignar el directorio como propiedad de mysql. Pero mysql no existe hasta que LDAP/networking esté en funcionamiento, y la instalación de mariadb no crea el mysqlusuario porque el usuario ya existe en ldap.

¿Hay alguna manera de forzar localmente a PAM (o algo así) a ignorar al usuario mysql en LDAP? ¿O cambiar el nombre del usuario ldap mysqla mysql_ldap?

¿Mi única solución es agregar manualmente la entrada /etc/passwd? (O cambie la configuración de mariadb para usar un nombre de usuario diferente). Preferiría tener cambios mínimos en los archivos de configuración y systemd que provienen de rpm.

(Y no tengo grandes esperanzas de eliminarlo mysqlde LDAP, ya que eso podría dañar gran parte de la infraestructura heredada).

Usaré ansible, por cierto, para implementar el cambio.

Adicional:

Cambié el título de la pregunta:

Descubrí que si agrego el " mysql" usuario local, funciona bien, a menos que tenga archivos propiedad del ID de usuario del " mysql" usuario LDAP. Si reviso ls -lalos archivos, contamina el caché nscd (o sssd) y " mysql" nuevamente se resuelve en el usuario LDAP. Parece que lo que realmente quiero es construir de alguna manera un filtro PAM para cuentas para hacer que este " mysql" usuario LDAP desaparezca.

Respuesta1

Aquí está mi solución final, codificada en ansible:

- name: Disable ldap users                                                  
  ini_file: dest=/etc/sssd/sssd.conf section='nss' 
            option=filter_users value={{ filter_ldap_users | join(",") }}
  register: sssd_conf_users                                                   

- name: Disable ldap groups                                                 
  ini_file: dest=/etc/sssd/sssd.conf section='nss' 
            option=filter_groups value={{ filter_ldap_groups | join(",") }}
  register: sssd_conf_groups                                                  

- name: Restart SSSD                                                        
  when: sssd_conf_users.changed or sssd_conf_groups.changed                   
  service: name=sssd state=restarted                                          

- name: Flush NSCD cache                                                    
  when: sssd_conf_users.changed or sssd_conf_groups.changed                   
  shell: "for db in /var/db/nscd/*; do nscd -i $(basename $db); done"         

- name: Flush SSSD cache                                                     
  when: sssd_conf_users.changed or sssd_conf_groups.changed                   
  command: /usr/sbin/sss_cache -E        

Respuesta2

A nivel PAM:
todo lo que necesita es ignorar a un usuario en LDAP. Por lo tanto, configure el cliente LDAP particular que está usando. En CentOS sería sssd, para usar filtros de búsqueda LDAP UID/GID personalizados que ignorarán el registro "mysql". En un sistema existente, tendrá que limpiar el caché sssd y reiniciarlo y el usuario desaparecerá. La reinstalación de mariadb creará un usuario mysql local.

A nivel de paquete:
configure un repositorio de Yum personalizado en algún lugar de la red que incluya un paquete que contenga un script posterior a la instalación, solucionando el problema del usuario de MySQL. También tendrás que poner el paquete mariadb en ese repositorio. Luego, defina un grupo de paquetes que incluirá ese paquete y mariadb e instálelo.
Alternativamente, puede reconstruir el paquete mariaDB con un script posterior a la instalación actualizado y más inteligente que se encargará de la creación del usuario mysql.

Yo elegiría A - B está algo confuso :)

Respuesta3

Aquí hay algo que estoy usando actualmente como solución alternativa. Agregué esto a mi archivo kickstart para ejecutarlo %post, antes de habilitar/configurar LDAP:

# Install and de-install mariadb-server to create mysql
# user before LDAP is enabled.
yum -d1 -e1 -y install yum-plugin-remove-with-leaves mariadb-server
yum -d1 -e1 -y erase mariadb-server --remove-leaves

Iba a ejecutar useraddmanualmente después de haber leído el mariadb-serverarchivo de especificaciones:http://pkgs.fedoraproject.org/cgit/mariadb.git/tree/mariadb.spec

%pre server
/usr/sbin/groupadd -g 27 -o -r mysql >/dev/null 2>&1 || :
/usr/sbin/useradd -M -N -g mysql -o -r -d %{mysqluserhome} -s /sbin/nologin \
  -c "MySQL Server" -u 27 mysql >/dev/null 2>&1 || :

...pero me siento más cómodo tomándolo directamente al instalar las rpm.

Tampoco estoy completamente satisfecho con esto porque si encuentro un archivo con el ID de usuario "mysql" de ldap, la búsqueda inversa en el ID de usuario contamina nscd o sssd con el usuario "mysql" incorrecto.

Respuesta4

Si lo único que quiere hacer es no resolver los usuarios de ldap. Edite /etc/nsswitch.conf y, para las entradas de usuario y grupo, elimine las entradas sssd (o ldap). Luego vacíe el caché nscd

información relacionada