¿Cómo autenticar cuentas de Linux en un Active Directory y montar un recurso compartido de Windows al iniciar sesión?

18

Estoy usando Ubuntu 10.04 Server.

Jamie
fuente
Esto debería haberse publicado como respuesta a una pregunta. Edite esto para que sea una pregunta y mueva lo que publicó anteriormente para responder. De las preguntas frecuentes : "También está perfectamente bien hacer y responder su propia pregunta, pero finja que está en peligro: formúlelo en forma de pregunta".
Pausado hasta nuevo aviso.

Respuestas:

27

[Editar] Desde entonces probé esta versión completa del servidor Ubuntu 10.04 (21 / mayo / 2010) .

He configurado mi Servidor Ubuntu 10.04 LTS que reside en una red de Windows para autenticar los inicios de sesión utilizando el directorio activo, luego montar un recurso compartido de Windows para servir como directorio de inicio.

Esto es lo que hice a partir de la instalación inicial de Ubuntu.

  1. Descargue e instale Ubuntu Server 10.04 LTS
  2. Obtener actualizaciones

    # sudo apt-get update && sudo apt-get upgrade

  3. Instalar un servidor SSH ( sshd)

    # sudo apt-get install openssh-server

    Algunos argumentarían que debería "bloquear sshd" desactivando los inicios de sesión de raíz. Me imagino que si eres lo suficientemente inteligente como para hackear una sesión ssh para una contraseña de root, probablemente no te va a frustrar la adición de PermitRootLogin noen el /etc/ssh/sshd_configarchivo. Si eres paranoico o no, simplemente no estás convencido, edita el archivo o dale un giro a lo siguiente:

    # (grep PermitRootLogin /etc/ssh/sshd_config && sudo sed -ri 's/PermitRootLogin ).+/\1no/' /etc/ssh/sshd_conifg) || echo "PermitRootLogin not found. Add it manually."

  4. Instalar paquetes requeridos

    # sudo apt-get install winbind samba smbfs smbclient ntp krb5-user

  5. Realice algunas tareas básicas de limpieza doméstica en red en preparación para las configuraciones de paquetes específicos que vendrán.

    1. Determine su nombre de dominio de Windows, el nombre del servidor DNS y la dirección IP para el servidor del directorio activo (para samba). Por conveniencia, configuré variables de entorno para el dominio de Windows y el servidor DNS. Para mí fue (mi dirección IP AD era 192.168.20.11):

      # WINDOMAIN=mydomain.local && WINDNS=srv1.$WINDOMAIN && WINDNS_IP=192.168.20.11

      Si desea averiguar cuál es su dominio y servidor DNS (era contratista y no conocía la red), consulte esta útil referencia .

    2. Necesitamos bautizar el cuadro de Linux en la nueva red, esto se hace editando el archivo host (reemplace el DNS de con el FQDN del DNS de Windows):
      # sudo sed -ri "s/^(127\.0\.[01]\.1[ \t]).*/\1$(hostname).$WINDOMAIN localhost $(hostname)/" /etc/hosts

    3. También deberíamos decirle a los próximos servicios instalados dónde pueden encontrar su líder: algunas redes tendrán servicios de búsqueda de nombres de netbios, pero por si acaso, agregue una entrada explícita en su /etc/hostsarchivo, en mi configuración agregué la entrada en el tercero (3) línea:
      # sudo sed -ri "3 i $WINDNS_IP $WINDNS" /etc/hosts

    4. Los procesos de autenticación y uso compartido de archivos para las cajas de Windows y Linux necesitan que sus relojes estén de acuerdo. Haga esto con un servicio NTP, y en la versión del servidor de Ubuntu, el servicio NTP viene instalado y configurado con un (1) servidor NTP. Agregue el suyo antes del Ubuntu (o reemplácelo por completo). La red a la que me unía también tenía el servidor DNS que servía el servicio NTP.
      # sudo sed -ri "s/^(server[ \t]+)(.+)/\1$WINDNS\n\1\2/" /etc/ntp.conf
      Reinicie el demonio NTP:
      # sudo /etc/init.d/ntp restart

  6. Configuración de Kerberos.
    Las instrucciones que siguen aquí no deben tomarse literalmente: los valores MYDOMAIN.LOCALy srv1.mydomain.localdeben reemplazarse con lo que es apropiado para su red cuando edita los archivos, pero tenga en cuenta que donde se utiliza MAYÚSCULAS se necesita MAYÚSCULAS .
    Si, durante apt-get installKerberos, tuvo la idea de responder correctamente a la pregunta del "dominio predeterminado", entonces, bueno, de lo contrario, tendrá que hacer lo siguiente.

    1. Edite el /etc/krb5.confarchivo (instalado anteriormente) .

      1. Encuentre la [libdefaults]sección y cambie el par de valores clave:

        [libdefaults]
        default_realm = MYDOMAIN.LOCAL

      2. Agregue lo siguiente a la [realms]sección del archivo:

        MYDOMAIN.LOCAL = {
        kdc = srv1.mydomain.local
        admin_server = srv1.mydomain.local
        default_domain = MYDOMAIN.LOCAL
        }

      3. Agregue lo siguiente a la [domain_realm]sección del archivo:
        .mydomain.local = MYDOMAIN.LOCAL
        mydomain.local = MYDOMAIN.LOCAL

      4. Una buena prueba en este punto es ver si su controlador AD le emitirá un ticket kerberos. Esto no es necesario, pero puede hacer que algunos de ustedes se sientan mareados:
        # kinit <some_windows_domain_user>
        luego, para ver el boleto:
        # klist
        verán cosas sobre el caché del boleto y los vencimientos y renovaciones. Una vez que el vértigo disminuya, también puede liberar / destruir el boleto:
        # kdestroy

  7. Configurar samba.
    De acuerdo con lo siguiente: Hay momentos en los que CIFS no se puede usar u otra opción de sistema de archivos de red es mejor. Si se necesita soporte de autenticación kerberos (krb5 / SPNEGO) para mayor seguridad, entonces se debe usar smbclient o smbfs de Samba en lugar de cifs
    Alas, el cifssoporte en el núcleo para ubuntu 10.04 (basado en la versión 2.6.32.9 del núcleo) está en la versión 1.61, y de acuerdo con la documentación del kernel, la implementación experimental de kerberos ha estado allí desde la versión 1.54.
    Así que ahí estás. No tengo idea de si cifsfuncionaría, así que te doy la configuración de samba:

    1. Reemplazar /etc/samba/smb.conf(recuerde que estaba trabajando desde una distribución limpia de Ubuntu, así que no estaba preocupado por romper nada):
      [global]
      security = ads
      realm = MYDOMAIN.LOCAL
      password server = 192.168.20.11
      workgroup = MYDOMAIN
      idmap uid = 10000-20000
      idmap gid = 10000-20000
      winbind enum users = yes
      winbind enum groups = yes
      template homedir = /home/%U
      template shell = /bin/bash
      client use spnego = yes
      client ntlmv2 auth = yes
      encrypt passwords = yes
      winbind use default domain = yes
      restrict anonymous = 2

    2. Iniciar y detener varios servicios.

      # sudo /etc/init.d/winbind stop
      # sudo service smbd restart
      # sudo /etc/init.d/winbind start

  8. Configura la autenticación.

    1. Edite el /etc/nsswitch.conf. Pude ejecutar el siguiente comando para obtener lo que necesitaba:
      # sed -ri 's/(compat)/\1 winbind/' /etc/nsswitch.conf
      Aquí están los contenidos de mi /etc/nsswitch.confarchivo:
      passwd: compat winbind
      group: compat winbind
      shadow: compat winbind
      hosts: files dns
      networks: files
      protocols: db files
      services: db files
      ethers: db files
      rpc: db files

    2. Iniciar y detener varios servicios.
      # sudo /etc/init.d/winbind stop
      # sudo service smbd restart
      # sudo /etc/init.d/winbind start

  9. Unir la computadora al dominio. No estoy convencido de que esto sea necesario; particularmente debido a la opción de seguridad en el smb.confarchivo ( security = ads). Quizás alguien pueda opinar sobre esto ...
    # sudo net ads join -U any_domain_user_account
    Es posible que obtenga un error DNS update failed!, pero que se unirá al dominio. Si recibe un error acerca de no poder encontrar el servidor, sus registros DNS deben modificarse. Durante la instalación de Ubuntu, el servidor de nombres a menudo apuntará a su puerta de enlace: la mayoría de los enrutadores harán un servicio de DNS. Las mejores prácticas para la administración del servidor de Windows es que el ADC también debe ejecutar DNS. En mi caso mis /etc/resolve.confve así:
    nameserver 192.168.20.11
    nameserver 8.8.8.8
    El 8.8.8.8es un Google DNS, una copia de seguridad bastante fiable en caso de que las ventanas se va hacia abajo.

En este punto, podía iniciar sesión (quizás después de un reinicio), los directorios principales no existían, pero podía iniciar sesión.

  1. Montaje de CIFS al iniciar sesión
    El siguiente paso fue la guinda para mí; No quería la responsabilidad de hacer una copia de seguridad de los directorios de trabajo de todos, y la caja que Ubuntu debía ejecutar era sospechosa en términos de confiabilidad. Al hacer lo siguiente, los usuarios podrían iniciar sesión y ver su directorio de usuarios de Windows automáticamente .

    1. Descargue el pam_mountmódulo:
      # sudo apt-get install libpam-mount
      quería que el punto de montaje estuviera en la /home/<user>ubicación tradicional : esta parte está configurada por el /etc/samba/smb.confarchivo ( template homedir = /home/%U). Pero lo necesitaba para explorar el recurso compartido y señalar su propio directorio de Windows. Esto se logra editando el /etc/security/pam_mount.conf.xmlarchivo (que a pesar de su intención, XML no es legible por humanos):

    2. Agregue lo siguiente /etc/security/pam_mount.conf.xmly modifique para adaptarlo:
      <volume
      user="*"
      server="srv1.mydomain.local"
      path="UserShares"
      mountpoint="home"
      fstype="cifs"
      />

      <cifsmount>mount -t cifs //%(SERVER)/%(VOLUME)/%(USER) %(MNTPT)/%(USER) -o "user=%(USER),uid=%(USERUID),gid=%(USERGID)%(before=\",\" OPTIONS)"</cifsmount>

      Debido a mi punto de montaje tonto, tuve que agregar esta línea también:

      <umount>umount %(MNTPT)/%(USER)</umount>

      Y para que los directorios de usuario (para el punto de montaje) se creen automáticamente, busque la línea y hágala así:

      <mkmountpoint enable="1" remove="false" />

      El remove="false"bit es muy importante: Si se establece en true, pam_mount.sointenta suprimir el punto, que no se puede hacer si un usuario ha iniciado sesión en múltiples ocasiones montaje en el directorio. Lo que termina en ese caso es un montón de monturas perdidas en su sistema.

      pam_mount.sotodavía no cumple lo prometido. En su forma actual, los montajes se siguen acumulando y los directorios principales no se están creando. En algún lugar entre aquí y la versión Beta 2 anterior del servidor 10.04, estaba funcionando. Sin embargo, no puedo recrear esto.
      Mientras tanto, para la creación del directorio, estoy confiando pam_mkhomedir.so, y pegué una línea inmediatamente antes de la pam_mount.solínea para acomodarla.
      Todavía no he resuelto el problema del montaje múltiple. Pero hasta que pam_mount.sose solucione, esto es lo que tengo en mi /etc/pam.d/common-sessionarchivo:

      session [default=1]     pam_permit.so  
      session requisite       pam_deny.so  
      session required        pam_permit.so  
      session required        pam_unix.so  
      session optional        pam_winbind.so  
      session required        pam_mkhomedir.so skel=/etc/skel/ umask=0022  
      session optional        pam_mount.so
      

Eso es. Funcionó para mí, y espero que les sea útil.

Se consideraron numerosos recursos para poder resolver esto. Aquí hay una breve lista (varios de estos enlaces apuntan a mis propias preguntas sobre el tema):

Jamie
fuente
1
Desactivar el inicio de sesión ssh raíz remoto es imprescindible. Los ataques de fuerza bruta / diccionario a veces tienen éxito. Si la raíz está comprometida, diga adiós a todo lo que confió en la máquina.
JR Lawhorne
1
sin embargo, ubuntu no activa la cuenta raíz ... ¿todo es sudod, o me falta algo?
Jamie
'todo es sudo' - Y esto es mejor ... ¿de qué manera? (Si alguna cuenta de usuario con derecho a sudo se ve comprometida, es básicamente lo mismo. Y es básicamente igual de simple [o no] forzar a las cuentas de usuario o root. Lo mejor es configurar el inicio de sesión solo con clave de pub y deshabilitar todas las contraseñas) inicios de sesión basados.)
Kurt Pfeifle
Lo entiendo, pero considere: "Lo mejor es configurar el inicio de sesión solo con clave de pub" , lo que anularía por completo el propósito de esta publicación.
Jamie
1
también puede usar una cuenta sudoed o root y cambiar el nombre del usuario root para que no sea root linuxers.org/article/fun-linux-changing-root-user-name-linux
PsychoData