Múltiples nombres de inicio de sesión para un solo usuario en Linux usando autenticación de servidor LDAP

Múltiples nombres de inicio de sesión para un solo usuario en Linux usando autenticación de servidor LDAP

Hay unos 30 sistemas (PC independientes) en mi laboratorio y casi 200 estudiantes los utilizarán. Cada sistema tiene una cuenta llamada USUARIO cuya contraseña es 123456 la cual es conocida por esas 200 personas. Por lo tanto, acceden a cualquier sistema que sea gratuito y funcionan durante algún tiempo. Su uso se registra simplemente mediante un asiento en el libro de registro. Quiero darles a cada usuario nombres de usuario y contraseñas separados, lo cual se logra fácilmente mediante el servidor LDAP. Pero no quiero crear 200 cuentas de usuario en cada PC. Quiero asignar todos los inicios de sesión de 200 personas para que se realicen en la cuenta de USUARIO. Tendrán el mismo perfil y el mismo directorio de inicio. Solo quiero registrar la hora y la fecha del uso del laboratorio por parte de las personas en un archivo. ¿Se puede hacer esto usando LDAP o algún otro software?

Respuesta1

Estoy de acuerdo con SLESKE, pero para ampliar sus comentarios, ¡primero debes hacer un par de cosas!

En Linux, las bibliotecas que controlan el inicio de sesión deben redirigirse para usar un backend LDAP en lugar de buscar cosas en /etc/passwd.

Si está utilizando OpenLDAP, deberá observar dos cosas:

NSCD (Name Server Caching Daemon) que almacena en caché las consultas LDAP. Ejecutará esto en cada host donde los usuarios inicien sesión.

NSSLDAP (Conmutador de servidor de nombres para LDAP): este es el pegamento que hace que los inicios de sesión consulten NSCD, que a su vez consultará el backend de LDAP o NSSLDAP consultará el backend de LDAP directamente si NSCD está obsoleto o no está disponible.

Entonces, en cada estación de trabajo necesitará instalar OpenLDAP, NSCD y NSSLDAP si no forma parte de su distribución. Se requiere OpenLDAP para obtener las bibliotecas cliente que saben cómo hablar el protocolo LDAP.

Luego necesitas editar algunos archivos:

/etc/nscd.conf Este archivo controla lo que se almacena en caché. Aquí hay un volcado de uno de mis sistemas que actúa como servidor Samba:

    enable-cache            passwd          yes
    positive-time-to-live   passwd          10
    negative-time-to-live   passwd          3
    suggested-size          passwd          211
    check-files             passwd          yes
    persistent              passwd          yes
    shared                  passwd          yes
    max-db-size             passwd          33554432
    auto-propagate          passwd          yes

    enable-cache            group           yes
    positive-time-to-live   group           3600
    negative-time-to-live   group           3
    suggested-size          group           211
    check-files             group           yes
    persistent              group           yes
    shared                  group           yes
    max-db-size             group           33554432
    auto-propagate          group           yes

    enable-cache            hosts           yes
    positive-time-to-live   hosts           3600
    negative-time-to-live   hosts           3
    suggested-size          hosts           211
    check-files             hosts           yes
    persistent              hosts           yes
    shared                  hosts           yes
    max-db-size             hosts           33554432

Luego deberá modificar su archivo nsswitch.ldap (lea los DOC que contiene, hay demasiado para entrar aquí).

UNA COSA MUY IMPORTANTE!!!!

Si su servidor LDAP no funciona, querrá asegurarse de que la cuenta raíz local aún pueda iniciar sesión. O si una de sus estaciones de trabajo tiene problemas de red, querrá asegurarse de que aún pueda iniciar sesión.

Entonces, cuando mis cajas de Linux arrancan, tengo un script que siempre copia un archivo nsswitch.conf en su lugar con el siguiente aspecto:

contraseña: grupo compatible: compatible

hosts: archivos dns redes: archivos

servicios: archivos protocolos: archivos rpc: archivos ethers: archivos máscaras de red: archivos netgroup: archivos bootparams: archivos

montaje automático: archivos alias: archivos

y una vez que esté listo para usar LDAP para iniciar sesión, reemplazo el archivo nsswitch.conf con lo siguiente:

contraseña: archivos ldap grupo: archivos ldap sombra: archivos ldap

hosts: archivos dns redes: archivos

servicios: archivos protocolos: archivos rpc: archivos ethers: archivos máscaras de red: archivos netgroup: archivos bootparams: archivos

montaje automático: archivos alias: archivos

El primero me permite iniciar sesión localmente y el segundo permite ambos, pero debido al almacenamiento en caché de NSCD, NSCD tarda un tiempo en volverse obsoleto, lo que provoca retrasos o problemas en el inicio de sesión.

Hay mucho más que decir sobre esto, pero esperamos que esto le ayude a empezar.

Por cierto: soy el desarrollador de Pozix Linux y Pozix Linux Small Business Server y tenemos más de 400 sistemas Samba ejecutándose de esta manera.

De acuerdo, los comentarios de TRS80 son válidos, pero aquí hay un script que usamos para crear archivos LDIF a partir de archivos /etc/passwd. El archivo LDIF resultante se puede utilizar para completar su base de datos LDAP. Deberá asegurarse de que, si ejecuta este script en varias estaciones de trabajo, elimine los nombres de cuentas duplicados para terminar con nombres de cuentas únicos con UID únicos.

cat /etc/passwd | while read i; do
  uid=`echo $i | cut -d : -f 1`
  uidNumber=`echo $i | cut -d : -f 3`
  gidNumber=`echo $i | cut -d : -f 4`
  gecos=`echo $i | cut -d : -f 5`
  homeDirectory=`echo $i | cut -d : -f 6`
  loginShell=`echo $i | cut -d : -f 6`
  userPassword=`cat /etc/shadow | grep $uid | cut -d : -f 2`

  echo "dn: cn=$gecos,ou=people,dc=mycompany,dc=com"
  echo "objectClass: account"
  echo "objectClass: posixAccount"
  echo "cn: $gecos"
  echo "uid: $uid"
  echo "uidNumber: $uidNumber"
  echo "gidNumber: $gidNumber"
  echo "homeDirectory: $homeDirectory"
  echo "loginShell: $loginShell"
  echo "userPassword: $userPassword"

done

Respuesta2

Si configura los atributos uidNumber y homeDirectory en los mismos valores para todas las cuentas, las cosas probablemente deberían funcionar de la manera deseada.

Respuesta3

No es necesario crear 200 cuentas de usuario en cada PC. Linux puede recuperar toda la información del usuario desde LDAP, por lo que las cuentas no existen localmente (es decir, en /etc/passwd). El directorio de inicio suele estar en una unidad de red (NFS o similar).

Este es el enfoque estándar. ¿Hay alguna razón por la que no estás haciendo esto?

información relacionada