O SO é Amazon Linux 2023. Estou tentando usar LDAP para fazer gerenciamento de usuários/grupos para todos os novos usuários. Eu instalei os pacotes openldap-servers, openldap-clients e nss-pam-ldapd. Eu configurei SSL no slapd e
ldapwhoami -x -H ldaps://myserver.mydomain.com
ldapwhoami -x -H ldapi:///
ambos retornam anônimos.
sudo ldapwhoami -H ldapi:///
retorna dn:gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth.
Eu configurei nsswitch.conf para:
passwd: ldap sss files
shadow: ldap files
group: ldap sss files
Eu configurei nslcd.conf para:
uid root
gid root
uri ldapi:///
base dc=mydomain,dc=com
Quando eu corro:
sudo useradd -b /home balaguru1
não parece adicionar o usuário ao banco de dados LDAP. Os arquivos em /var/lib/ldap/ não são alterados. /etc/passwd é modificado com o novo usuário.
O que estou perdendo?
A interface nsswitch é somente leitura – ela não tem nenhuma operação de adição ou modificação que os módulos de serviço de nomes poderiam fornecer, e todas essas ferramentas realizam modificações diretamente no backend.
Por exemplo, sua
useradd
ferramenta foi escrita especificamente para atualizar o banco de dados de contas locais por meio de /etc/passwd e /etc/shadow e nada mais. (Na verdade, ela vem do pacote 'shadow', que serve apenas para manter os arquivos passwd/shadow/group.)Você precisará de uma ferramenta diferente para gerenciamento de contas LDAP.¹
¹ (Não conheço nenhum que ainda seria mantido; acabei escrevendo mais ou menos o meu próprio. Um script de shell
ldapadd
funcionaria.)Implementações típicas de LDAP são projetadas para ter esquemas configuráveis; o OpenLDAP é fornecido com diversas configurações de esquemas tradicionais em
/etc/(open)ldap/schema
.Você está procurando pela
posixAccount
objectClass, que – como você já descobriu – está nonis
arquivo schema. No entanto, é uma classe auxiliar, e geralmente anexada a um objetoperson
ouinetOrgPerson
(docosine
schema neste caso); embora nada impeça você de anexá-la a umdevice
objeto ou a umapplicationProcess
objeto. (O último é uma relíquia OSI & X.500, mas é um tanto adequado para representar, por exemplo, um serviço que precisa de sua própria senha LDAP e/ou sua própria conta POSIX.)Sim, e você terá que criar as entradas "pai" antes de poder colocar qualquer coisa abaixo. Se você acabou de começar com um banco de dados vazio, precisará criar até mesmo a entrada de nível superior correspondente ao sufixo do seu banco de dados (por exemplo,
dc=example,dc=org
como umaobjectClass: domain
entrada, ouo=My Little Org
como umaorganization
entrada). Então crie OUs comoorganizationalUnit
objetos – embora não seja necessário colocar usuários e grupos sob OUs; não tem problema criá-los sob a entrada de nível superior; eles podem ser movidos para uma OU mais tarde de qualquer maneira.(Observe que você só precisa adicionar os pais até o sufixo DB – você não precisa adicionar
dc=org
neste exemplo.)Digamos que você tenha uma entrada de banco de dados configurada assim:
Isso significa que você precisaria criar essas entradas (supondo que você queira o tipo típico de hierarquia OU=Usuários):
Enquanto que se você tivesse
olcSuffix: dc=example,dc=com
(estilo AD), você precisaria adicionar:(Se todos os programas suportam o modelo "vincular como aplicativo, pesquisar, vincular como usuário", então usar
dn: cn=
oudn: uid=
para o DN da entrada do usuário é uma escolha sua. A maioria dos programas aceita isso, pois é o que o Active Directory faz. Mas se alguns programas suportam apenas o modelo "vincular de acordouid=%s,ou=Users,etc
com um modelo de DN", então você precisará usaruid=
.)