Em nosso ambiente corporativo, há muito tempo, alguns gênios decidiram colocar o usuário " mysql
" no LDAP.
A conta está desativada:
$ sudo su - mysql
This account is currently not available.
... mas seu id ainda existe:
$ id mysql
uid=2050913(mysql) gid=867(ENG) groups=867(ENG)
Isso faz com que as instalações do mariadb falhem no CentOS7 porque /var/run/mariadb
é criado por uma regra tmpfile que tenta atribuir o diretório de propriedade do mysql. Mas o mysql não existe até que o LDAP/rede esteja instalado e funcionando, e a instalação do mariadb não cria o mysql
usuário porque o usuário já existe no ldap.
Existe uma maneira de forçar localmente o PAM (ou algo assim?) a ignorar o usuário mysql no LDAP? Ou renomeie o mysql
usuário ldap para mysql_ldap
?
Minha única solução alternativa é adicionar manualmente a entrada /etc/passwd
? (Ou altere a configuração do mariadb para usar um nome de usuário diferente.) Prefiro fazer alterações mínimas nos arquivos de configuração e systemd que vêm do rpm.
(E não tenho grandes esperanças de remover mysql
o LDAP, pois isso poderia quebrar muita infraestrutura legada.)
Estarei usando ansible, aliás, para implementar a mudança.
Adicional:
Mudei o título da pergunta:
Descobri que se eu adicionar o mysql
usuário " " local, ele funcionará bem, a menos que eu tenha arquivos pertencentes ao ID do usuário LDAP " mysql
". Se eu usar ls -la
os arquivos, ele polui o cache nscd (ou sssd) e " mysql
" novamente resolve para o usuário LDAP. Parece que o que eu realmente quero é construir de alguma forma um filtro PAM para contas para fazer esse mysql
usuário LDAP " " desaparecer.
Responder1
Aqui está minha solução final, codificada em 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
Responder2
No nível PAM:
Tudo que você precisa é ignorar um usuário no LDAP. Portanto, configure o cliente LDAP específico que você está usando, no CentOS seria sssd, para usar filtros de pesquisa LDAP UID/GID personalizados que ignorarão o registro "mysql". Em um sistema existente, você terá que limpar o cache SSD e reiniciá-lo e o usuário desaparecerá. A reinstalação do mariadb criará então um usuário mysql local.
No nível do pacote:
Configure um repositório Yum personalizado em algum lugar da rede que incluirá um pacote que contém um script pós-instalação, corrigindo o problema do usuário mysql. Você também terá que colocar o pacote mariadb nesse repositório. Em seguida, defina um grupo de pacotes que incluirá esse pacote e o mariadb e instale-o.
Alternativamente, você pode reconstruir o pacote mariaDB com um script pós-instalação atualizado e mais inteligente que cuidará da criação do usuário mysql.
Eu escolheria A - B está um pouco ofuscado :)
Responder3
Aqui está algo que estou usando atualmente como solução alternativa. Adicionei isso ao meu arquivo kickstart para ser executado %post
- antes de ativar/configurar o 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
Eu iria executar useradd
manualmente depois de ler o mariadb-server
arquivo de especificações: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 || :
... mas fico mais confortável em fazer isso direto da instalação do rpm.
Também não estou completamente satisfeito com isso porque se eu encontrar um arquivo com o ID de usuário "mysql" do ldap, a pesquisa reversa no ID do usuário polui nscd ou sssd com o usuário "mysql" errado.
Responder4
Se tudo o que você deseja fazer é não resolver os usuários do ldap. Edite /etc/nsswitch.conf e para as entradas de usuário e grupo remova as entradas sssd (ou ldap). Em seguida, limpe o cache do nscd