Como autenticar contas do Linux em um Active Directory e montar um compartilhamento do Windows no logon?


18

Estou usando o Ubuntu 10.04 Server.


Isso deveria ter sido postado como resposta a uma pergunta. Edite-o para que ele seja uma pergunta e mova o que você postou acima para ser uma resposta. No FAQ : "Também é perfeitamente bom fazer e responder sua própria pergunta, mas finja que você está no Jeopardy: expresse-a na forma de uma pergunta."
Pausado até novo aviso.

Respostas:


27

[Editar] Desde então, testei a versão completa do Ubuntu 10.04 Server (21 / maio / 2010) .

Eu configurei o meu Ubuntu 10.04 Server LTS residente em uma rede Windows para autenticar logins usando o Active Directory e, em seguida, monte um compartilhamento do Windows para servir como diretório inicial.

Aqui está o que eu fiz a partir da instalação inicial do Ubuntu.

  1. Baixe e instale o Ubuntu Server 10.04 LTS
  2. Obter atualizações

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

  3. Instale um servidor SSH ( sshd)

    # sudo apt-get install openssh-server

    Alguns argumentam que você deve "bloquear o sshd" desativando os logins raiz. Eu acho que se você é inteligente o suficiente para hackear uma sessão ssh para obter uma senha root, provavelmente você não será frustrado pela adição de PermitRootLogin nono /etc/ssh/sshd_configarquivo. Se o seu paranóico ou simplesmente não estiver convencido, edite o arquivo ou dê uma olhada:

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

  4. Instale os pacotes necessários

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

  5. Faça uma limpeza básica da rede em preparação para as configurações de pacotes específicas que estão por vir.

    1. Determine o nome de domínio do Windows, o nome do servidor DNS e o endereço IP do servidor do Active Directory (para samba). Por conveniência, defino variáveis ​​de ambiente para o domínio do Windows e o servidor DNS. Para mim, era (meu endereço IP do anúncio era 192.168.20.11):

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

      Se você quiser descobrir qual é o seu domínio e servidor DNS (eu era contratado e não conhecia a rede), consulte esta referência útil .

    2. Precisamos batizar a caixa do Linux na nova rede, isso é feito editando o arquivo host (substitua o DNS de pelo FQDN do DNS do Windows):
      # sudo sed -ri "s/^(127\.0\.[01]\.1[ \t]).*/\1$(hostname).$WINDOMAIN localhost $(hostname)/" /etc/hosts

    3. Também devemos informar aos serviços instalados futuros onde eles podem encontrar o líder: algumas redes terão serviços de pesquisa de nome netbios, mas, para garantir, adicione uma entrada explícita no seu /etc/hostsarquivo. Na minha configuração, adicionei a entrada no terceiro (3) linha:
      # sudo sed -ri "3 i $WINDNS_IP $WINDNS" /etc/hosts

    4. Os processos de autenticação e compartilhamento de arquivos para as caixas Windows e Linux precisam ter seus relógios concordados. Faça isso com um serviço NTP e, na versão de servidor do Ubuntu, o serviço NTP é instalado e configurado com um (1) servidor NTP. Adicione o seu antes do Ubuntu (ou substitua-o totalmente). A rede na qual eu estava ingressando tinha o servidor DNS que também atendia o serviço NTP.
      # sudo sed -ri "s/^(server[ \t]+)(.+)/\1$WINDNS\n\1\2/" /etc/ntp.conf
      Reinicie o daemon NTP:
      # sudo /etc/init.d/ntp restart

  6. Configuração Kerberos.
    As instruções a seguir aqui não devem ser tomadas literalmente: os valores MYDOMAIN.LOCALe srv1.mydomain.localprecisam ser substituídos pelos que são apropriados para a sua rede quando você edita os arquivos, mas observe que, onde o UPPERCASE é usado, o UPPERCASE é necessário .
    Se, durante o apt-get installKerberos, você teve a percepção de responder corretamente à pergunta "domínio padrão", então, adeus para você, caso contrário, será necessário fazer o seguinte.

    1. Edite o /etc/krb5.confarquivo (instalado anteriormente acima) .

      1. Localize a [libdefaults]seção e altere o par de valores-chave:

        [libdefaults]
        default_realm = MYDOMAIN.LOCAL

      2. Adicione o seguinte à [realms]seção do arquivo:

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

      3. Adicione o seguinte à [domain_realm]seção do arquivo:
        .mydomain.local = MYDOMAIN.LOCAL
        mydomain.local = MYDOMAIN.LOCAL

      4. Um bom teste neste momento é verificar se o seu controlador do AD emitirá um ticket kerberos. Isso não é necessário, mas pode deixar alguns de vocês tontos:
        # kinit <some_windows_domain_user>
        Depois, para ver o ticket:
        # klist
        você verá informações sobre o cache do ticket e as expirações e renovações. Depois que a tontura desaparecer, você também poderá liberar / destruir o ticket:
        # kdestroy

  7. Configure o samba.
    De acordo com o seguinte: Há momentos em que o CIFS não pode ser usado ou outra opção de sistema de arquivos de rede é melhor. Se o suporte à autenticação kerberos (krb5 / SPNEGO) for necessário para aumentar a segurança, o smbclient ou smbfs do Samba deve ser usado em vez do cifs
    Infelizmente, o cifssuporte no kernel para o ubuntu 10.04 (baseado na versão 2.6.32.9) está na versão 1.61 e de acordo com a documentação do kernel, a implementação experimental do kerberos existe desde a versão 1.54.
    Então aí está você. Eu não tenho idéia se cifsfuncionaria, então eu lhe dou a configuração do samba:

    1. Substitua /etc/samba/smb.conf(lembre-se de que eu estava trabalhando em uma distribuição limpa do Ubuntu, então não estava preocupado em quebrar 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. Inicie e pare vários serviços.

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

  8. Configure a autenticação.

    1. Edite o /etc/nsswitch.conf. Consegui executar o seguinte comando para obter o que precisava:
      # sed -ri 's/(compat)/\1 winbind/' /etc/nsswitch.conf
      Aqui está o conteúdo do meu /etc/nsswitch.confarquivo:
      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. Inicie e pare vários serviços.
      # sudo /etc/init.d/winbind stop
      # sudo service smbd restart
      # sudo /etc/init.d/winbind start

  9. Associe o computador ao domínio. Não estou convencido de que isso seja necessário; principalmente por causa da opção de segurança no smb.confarquivo ( security = ads). Talvez alguém possa avaliar isso ...
    # sudo net ads join -U any_domain_user_account
    Você pode receber um erro DNS update failed!, mas ingressará no domínio. Se você receber um erro ao não conseguir encontrar o servidor, seus registros DNS precisam ser modificados. Durante a instalação do Ubuntu, o servidor de nomes geralmente aponta para o seu gateway: a maioria dos roteadores faz um serviço DNS. As práticas recomendadas para administração do servidor Windows são que o ADC também deve executar o DNS. No meu caso, minha /etc/resolve.confaparência é a seguinte:
    nameserver 192.168.20.11
    nameserver 8.8.8.8
    O 8.8.8.8DNS do Google é um backup razoavelmente confiável, caso o Windows seja desativado.

Nesse ponto, eu poderia entrar (talvez após uma reinicialização), os diretórios pessoais não existiam, mas eu poderia entrar.

  1. Montagem do CIFS no login
    Este próximo passo foi a cereja para mim; Eu não queria a responsabilidade de fazer backup dos diretórios de trabalho de todos, e a caixa que o Ubuntu estava executando era suspeita em termos de confiabilidade. Ao fazer o seguinte, os usuários podem fazer login e ver o diretório de usuários do Windows automaticamente .

    1. Faça o download do pam_mountmódulo:
      # sudo apt-get install libpam-mount
      Eu queria que o ponto de montagem aponte no /home/<user>local tradicional : esta parte é configurada pelo /etc/samba/smb.confarquivo ( template homedir = /home/%U). Mas eu precisava dele para detalhar o compartilhamento e apontar para o próprio diretório do Windows. Isso é feito editando o /etc/security/pam_mount.conf.xmlarquivo (que, apesar de sua intenção, XML não é legível por humanos):

    2. Adicione o seguinte /etc/security/pam_mount.conf.xmle altere para se adequar:
      <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>

      Por causa do meu ponto de montagem pateta, eu tive que adicionar esta linha também:

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

      E para que os diretórios do usuário (para o ponto de montagem) sejam criados, localize automaticamente a linha e faça assim:

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

      O remove="false"bit é muito importante: se estiver definido como true, pam_mount.sotenta excluir o ponto de montagem do diretório, o que não pode ser feito se um usuário tiver efetuado login várias vezes. O que você acaba fazendo nesse caso são muitas montagens perdidas no seu sistema.

      pam_mount.soainda não cumpre as promessas. Em sua forma atual, as montagens continuam se acumulando e os diretórios pessoais não estão sendo criados. Em algum lugar entre aqui e a versão Beta 2 anterior do servidor 10.04, ele estava funcionando. Não posso recriar isso embora.
      Enquanto isso, para a criação do diretório em que estou confiando pam_mkhomedir.so, coloquei uma linha imediatamente antes da pam_mount.solinha para acomodar.
      Ainda não resolvi o problema de montagem múltipla. Mas até que pam_mount.soseja corrigido, é isso que eu tenho no meu /etc/pam.d/common-sessionarquivo:

      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
      

É isso aí. Funcionou para mim e espero que você ache útil.

Inúmeros recursos foram considerados para que eu pudesse descobrir isso. Aqui está uma pequena lista (vários desses links apontam para minhas próprias perguntas sobre o tópico):


11
Desativar o login ssh raiz remoto é uma obrigação. Às vezes, ataques de força bruta / dicionário são bem-sucedidos. Se a raiz estiver comprometida, diga adeus a qualquer coisa em que você confie na máquina.
JR Lawhorne

11
O ubuntu não ativa a conta root ... tudo está sudod, ou estou faltando alguma coisa?
Jamie

'tudo é sudo' - e isso é melhor ... de que maneira? (Se qualquer conta de usuário com direito ao sudo estiver comprometida, é basicamente a mesma coisa. E é basicamente igualmente simples [ou não] criar bruteforce contas de usuário ou raiz. O melhor é configurar o logon apenas com a chave de publicação e desativar todas as senhas. )
Kurt Pfeifle

Entendi isso, mas considero: "O melhor é configurar o logon apenas com pub-key" , o que anularia completamente o objetivo deste post.
Jamie

11
você também pode usar uma conta sudoed ou root e alterar o nome do usuário root para que ele não seja root linuxers.org/article/fun-linux-changing-root-user-name-linux
PsychoData:
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.