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/mariadb
se 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 mysql
usuario 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 mysql
a 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 mysql
de 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 -la
los 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 useradd
manualmente después de haber leído el mariadb-server
archivo 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