AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 833258
Accepted
wazoox
wazoox
Asked: 2017-02-18 10:32:34 +0800 CST2017-02-18 10:32:34 +0800 CST 2017-02-18 10:32:34 +0800 CST

Samba 4: ingresso no domínio, mas todos os usuários são mapeados para ninguém e os compartilhamentos são inacessíveis a partir de clientes Windows

  • 772

Eu tenho um Debian/Jessie Samba 4.2.14 rodando como um membro do AD. ADC é um servidor Windows2008R2. Join funcionou sem problemas.

# net ads testjoin
Join is OK

wbinfo -ue wbinfo -gfuncionam perfeitamente e fornecem uma lista de usuários e grupos do AD conforme o esperado. wbinfo -i <user>funciona também:

# wbinfo -i TESTAD\\testuser
TESTAD\testuser:*:4294967295:4294967295:testuser:/home/TESTAD/testuser:/bin/false

Editar: algo está errado aqui, porque wbinfo -imapeia todos os usuários e grupos para o id 4294967295 que é, como observou @TheSkunk, 2 ^ 32 -1.

Editar 2: wbinfo --sid-to-uid TESTAD\\testuser falha. Certamente devo configurar explicitamente alguns idmapparâmetros (os padrões aparentemente não funcionam), mas como?

Editar 3: adicionei essas 2 linhas ao smb.conf:

idmap config * : backend = tdb
idmap config * : range = 10000-30000

E agora ẁbinfo -i TESTDOMAIN\testuser reports a valid id, and a different one for each and every user. However I still have the same problems (all users mapping to nobody,id andgetent` não conhecendo usuários AD, etc).

No entanto getent passwd TESTAD\\testuserfalha:

# getent passwd TESTAD\\testuser
# echo $? 
2

Posso me conectar ao servidor com qualquer conta AD usando smbclient:

# smbclient //srv1/data -U TESTAD\\testuser
Enter TESTAD\testuser's password: 
Domain=[TESTAD] OS=[Windows 6.1] Server=[Samba 4.2.14-Debian]
smb: \> ls
  .                                   D        0  Fri Feb 17 16:23:04 2017
  ..                                  D        0  Wed Feb  1 16:47:02 2017
  test.txt                            N        5  Fri Feb 17 14:38:21 2017
  popo                                D        0  Fri Feb 17 16:23:04 2017

                117125466112 blocks of size 1024. 117052392484 blocks available
smb: \> 

No entanto, a conexão é mapeada para nobody/nogroup, e os arquivos criados também pertencem a nobodyele. As máquinas Windows falham ao se conectar usando qualquer conta do AD. No entanto, se eu criar uma conta local com smbpasswd -a <user>, eles poderão se conectar usando-a. No entanto, seus parâmetros de conexão, arquivos etc. são todos mapeados, nobodyembora a conta também exista localmente.

Aqui está o atual smb.conf(o mais próximo possível do padrão):

[global]
        workgroup = TESTAD
        realm = TESTAD.lan
        server role = member server
        security = ADS
        map to guest = Bad User
        obey pam restrictions = Yes
        pam password change = Yes
        passwd program = /usr/bin/passwd %u
        passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
        unix password sync = Yes
        syslog = 0
        log file = /var/log/samba/log.%m
        max log size = 1000
        dns proxy = No
        usershare allow guests = Yes
        panic action = /usr/share/samba/panic-action %d
        idmap config * : backend = tdb
        inherit permissions = Yes
        inherit acls = Yes


[DATA]
        path = /mnt/raid/
        read only = No
        guest ok = Yes

aqui está /etc/nsswitch.conf(eu tentei adicionar e remover 'winbindd da sombra, nenhuma mudança):

# cat /etc/nsswitch.conf 
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat winbind
group:          compat winbind
shadow:         compat winbind
gshadow:        files

hosts:          files mdns4_minimal [NOTFOUND=return] dns wins
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

Não entendo por que a autenticação nunca parece passar pelo winbind. Estou ficando desesperada, alguma ideia?

authentication linux-networking samba4 winbind
  • 4 4 respostas
  • 33215 Views

4 respostas

  • Voted
  1. Best Answer
    wazoox
    2017-03-09T04:57:23+08:002017-03-09T04:57:23+08:00

    Encontrei o problema principal: um pacote ausente. Infelizmente, não é fácil acertar: aqui está a configuração final e funcional (graças a Rowland Penny do samba.org):

    verifique se você instalou todos os pacotes necessários (o que faltava era libnss-winbind):

    apt-get install samba acl attr quota fam winbind libpam-winbind \
    libpam-krb5 libnss-winbind krb5-config krb5-user ntp dnsutils ldb-tools
    

    parar os serviços

    service smbd stop
    service nmbd stop
    service winbind stop
    

    configure um smb.conf adequado (particularmente os parâmetros idmap):

    [global]
        workgroup = TESTAD
        security = ADS
        realm = TESTAD.LAN
    
        dedicated keytab file = /etc/krb5.keytab
        kerberos method = secrets and keytab
        server string = Data %h
    
        winbind use default domain = yes
        winbind expand groups = 4
        winbind nss info = rfc2307
        winbind refresh tickets = Yes
        winbind offline logon = yes
        winbind normalize names = Yes
    
        ## map ids outside of domain to tdb files.
        idmap config *:backend = tdb
        idmap config *:range = 2000-9999
        ## map ids from the domain  the ranges may not overlap !
        idmap config TESTAD : backend = rid
        idmap config TESTAD : range = 10000-999999
        template shell = /bin/bash
        template homedir = /home/TESTAD/%U
    
        domain master = no
        local master = no
        preferred master = no
        os level = 20
        map to guest = bad user
        host msdfs = no
    
        # user Administrator workaround, without it you are unable to set privileges
        username map = /etc/samba/user.map
    
        # For ACL support on domain member
        vfs objects = acl_xattr
        map acl inherit = Yes
        store dos attributes = Yes
    
        # Share Setting Globally
        unix extensions = no
        reset on zero vc = yes
        veto files = /.bash_logout/.bash_profile/.bash_history/.bashrc/
        hide unreadable = yes
    
        # disable printing completely
        load printers = no
        printing = bsd
        printcap name = /dev/null
        disable spoolss = yes
    

    Nessa configuração, há um arquivo /etc/samba/user.map adicional necessário contendo a seguinte linha:

    !root = TESTAD\Administrator TESTAD\administrator Administrator administrator
    

    Não se esqueça de preencher corretamente /etc/krb5.conf:

    [libdefaults]
        default_realm = TESTAD.LAN
        dns_lookup_realm = false
        dns_lookup_kdc = true
    

    Tenha cuidado, krb5.conf deve pertencer ao root e ser lido por todos (644 direitos).

    Edite /etc/nsswitch.conf e adicione winbind às linhas passwd e group:

    # /etc/nsswitch.conf
    #
    # Example configuration of GNU Name Service Switch functionality.
    # If you have the `glibc-doc-reference' and `info' packages installed, try:
    # `info libc "Name Service Switch"' for information about this file.
    
    passwd:         compat files winbind
    group:          compat files winbind
    shadow:         compat files 
    
    hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4
    networks:       files
    
    protocols:      db files
    services:       db files
    ethers:         db files
    rpc:            db files
    
    netgroup:       nis
    

    Agora junte-se ao domínio:

    # net ads join -U Administrator
    Using short domain name -- TESTAD
    Joined 'DEBMEMBER' to dns domain 'TESTAD.example.com'
    

    Finalmente inicie os serviços:

    service smbd start
    service nmbd start
    service winbind start
    

    getent passwddeve funcionar com usuários do AD agora:

    # getent passwd testuser
    testuser:*:11107:10513:testuser:/home/TESTAD/testuser:/bin/bash
    

    CAVEAT Como já havia ingressado anteriormente no AD sem ter instalado as bibliotecas necessárias, tive que reiniciar o sistema para conseguir que o sistema após esta configuração autenticasse corretamente os usuários!

    • 7
  2. TheSkunk
    2017-02-18T14:18:21+08:002017-02-18T14:18:21+08:00

    4294967295 significa 2^32 - este é um estouro de contador para GID ou UID produzido pelo deamon winbind para traduzir xids do AD. Isso não tem nada a ver com o mapeamento de convidados ... Se você usar idmap config YOUR_DOMAIN : backend = ad , o anúncio significa que as informações não são apenas armazenadas localmente, mas também são replicadas durante o tempo de execução para todos os clientes e também armazenadas neles ( mas onde está, atualmente é minha tarefa descobrir). anúncio significa que, se um cliente se perder, você armazenou todas as informações de mapeamento uid/gid nos outros. Se você restaurar seu cliente, todo o mapeamento será o mesmo novamente. O problema é que, se você tiver esse estouro uma vez, não poderá se livrar dele facilmente, porque todos os clientes o estão replicando (executando windbind) e, talvez (estou tentando descobrir) também o DC.

    Aqui está a parte que estou usando para isso (funciona bem, mas tenho outro problema nos idmaps via anúncio):

    winbind nss info = rfc2307
    idmap config * : backend = tbd
    idmap config * : range = 1000-2999
    
    idmap config MY_DOMAIN : backend =  ad
    idmap config MY_DOMAIN : schema_mode = rfc2307
    idmap config MY_DOMAIN : range = 3000-30000
    idmap_ldb:use rfc2307 = yes
    
    winbind refresh tickets = yes
    winbind use default domain = yes
    winbind enum users  = yes
    winbind enum groups = yes
    
    winbind cache time = 60  #higher might make you wait long for updates 
    
    • 2
  3. Alex Leach
    2019-07-04T02:24:39+08:002019-07-04T02:24:39+08:00

    Tendo chegado aqui, enquanto procurava boas instruções, pensei que deveria adicionar uma atualização a este post...

    Daqui para frente, pretendemos usar sssdem vez da winbindintegração do Active Directory no Linux. Embora sssdnão ofereça todos os recursos do winbind, ele usa a autenticação Kerberos em vez da autenticação NT Lan Manager (NTLM). Ref: Guia de Integração do Red Hat Windows, Capítulo 4.2

    Estamos tentando reduzir o uso da autenticação NTLM em favor do Kerberos, já que este último é considerado um protocolo mais seguro.

    Com isso dito, configuramos nosso compartilhamento de arquivos SAMBA da seguinte maneira:

    1. Instale realmd, sambae sssdtodas as dependências. Talvez mais?
    2. Junte-se ao reino:realm join <domain name>

      Este comando usará credenciais de domínio para ingressar a máquina no domínio. Isso configurará automaticamente nsswitch.conf, /etc/sssd/sssd.confe /etc/krb5.conf, e também obterá um keytab da máquina, em /etc/krb5.keytab.

    3. Certifique-se de que o sistema de arquivos esteja montado com a aclopção em /etc/fstab, por exemplo

      UUID=foo-bar-baz /mnt/share ext4 defaults,acl 0 0

    4. Configure o samba corretamente. Há tantas opções, que isso é um pouco de arte escura. YMMV, mas o que funciona para mim é o seguinte. Qualquer coisa dentro <e >precisa ser configurada para sua própria rede.

    #/etc/samba/smb.conf
    [global]
        # SMB settings
        security = ads
        workgroup = <workgroup>
        netbios name = <server name>
        server string = Samba %v on %L (%h)
    
        # NMB settings
        local master = no
        dns proxy = no
    
        # Authentication / Kerberos settings
        realm = <realm / domain name>
        password server = *
        kerberos method = secrets and keytab
        dedicated keytab file = /etc/krb5.keytab
        encrypt passwords = yes
        client use spnego = yes
        client signing = yes
    
        # ID mapping
        idmap config * : backend = autorid
        idmap config * : range = 1000000-1999999
    
        # Windows Extended ACLs
        vfs objects = acl_xattr
        map acl inherit = yes
        nt acl support = yes
        # This next one apparently incurs a significant performance hit without
        # additional functionality, but can help compatibility.
        # It adds the DOS Read-only, Archive and Hidden bits to file attributes.
        # store dos attributes = yes
    
    [share]
        comment = <My Share>
        path = </mnt/share>
        valid users = @"<Domain Group>", <domain_user>
        # ... Other share-specific options
    
    
    1. Defina um usuário ou grupo de domínio como grupo no objeto de arquivo Unix. Remova o acesso de todos.
    > chown root:"Domain Users" /mnt/share
    > chmod 770 /mnt/share
    
    1. Agora, esperançosamente, você deve ser capaz de acessar o compartilhamento de arquivos de um PC com Windows ingressado no domínio e definir as permissões nele usando as propriedades da pasta do Windows.

    Se de alguma forma você se bloqueou fora do compartilhamento (como eu mesmo fiz), as permissões do Windows podem ser visualizadas e alteradas usando os seguintes comandos do Linux: -

    # get ACL permissions
    > getfacl /mnt/share
    # Set This Folder Only access on a share.
    > setfacl -m group:"<domain>\<group>":rwx /mnt/share
    # Set This Folder, Subdirectories and Files permissions on a folder
    > set facl -m default:group:"<domain>\<group>":rwx /mnt/share
    
    • 1
  4. fisheye
    2019-10-04T06:24:11+08:002019-10-04T06:24:11+08:00

    Eu tive o erro "client_input_channel_req: channel 0 rtype exit-status response 0" em um novo server02, no server01 no. A solução no meu caso foi adicionar duas linhas que por engano não adicionei ao /etc/samba/smb.conf:

    shell de modelo = /bin/bash

    template home dir = /home/%D/%u

    Agora os usuários do domínio estão logados no server02.

    Cumprimentos.

    • -1

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve