Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: ✔️ compartilhamentos de arquivos SMB
O Arquivos do Azure suporta autenticação baseada em identidade sobre Server Message Block (SMB) para máquinas virtuais Linux (VMs) usando o protocolo de autenticação Kerberos com Active Directory Domain Services (AD DS) local. Para usar esse procedimento, você deve sincronizar seu ambiente AD DS com o Microsoft Entra ID usando o Microsoft Entra Connect Sync.
Para obter mais informações sobre opções e considerações com suporte, consulte Visão geral das opções de autenticação baseada em identidade do Arquivos do Azure para acesso SMB.
Observação
Este artigo usa o Ubuntu para as etapas de exemplo. Configurações semelhantes funcionam para clientes RHEL e SLES, permitindo que você monte compartilhamentos de arquivos do Azure usando o AD DS local.
Limitações do cliente SMB do Linux
Você não pode usar autenticação baseada em identidade para montar compartilhamentos de arquivos do Azure em clientes Linux no momento da inicialização usando entradas fstab. Essa limitação existe porque o cliente não consegue obter o ticket do Kerberos cedo o suficiente para montar no momento de inicialização. Você pode usar uma fstab entrada e especificar a opção noauto para permitir que um usuário monte o compartilhamento de arquivos após entrar usando um comando de montagem simples sem todos os parâmetros. Você também pode usar autofs para montar o compartilhamento após o acesso.
Pré-requisitos
Antes de configurar um cliente Linux para usar autenticação AD DS local sobre SMB para compartilhamentos de arquivos Azure, complete os seguintes pré-requisitos:
- Uma VM do Linux executando Ubuntu 18.04+ ou uma VM RHEL ou SLES equivalente. A VM deve ter conectividade de rede aos seus controladores de domínio AD DS on-premises e usar servidores DNS que possam resolver o domínio AD DS.
- Um ambiente AD DS on-premises sincronizado com o Microsoft Entra ID usando o Microsoft Entra Connect Sync.
- Um compartilhamento de arquivos SMB do Azure em uma conta de armazenamento configurada para autenticação do AD DS local.
- Usuário raiz ou credenciais de usuário para uma conta de usuário local que tenha direitos sudo completos (para este guia, localadmin).
- A VM Linux ainda não está ligada a outro domínio AD DS. Se for, saia desse domínio antes de unir a VM a esse domínio.
- Uma conta de usuário do domínio AD DS com permissão para conectar computadores ao domínio.
A instalação do pacote samba não é estritamente necessária, mas fornece algumas ferramentas úteis e traz outros pacotes automaticamente, como samba-common e smbclient. Execute os seguintes comandos para instalá-lo. Se você for solicitado a fornecer valores de entrada durante a instalação, deixe-os em branco.
sudo apt update -y
sudo apt install samba winbind libpam-winbind libnss-winbind krb5-config krb5-user keyutils cifs-utils
A wbinfo ferramenta faz parte do pacote de samba e é útil para fins de autenticação e depuração, como verificar se o controlador de domínio é acessível, verificar em qual domínio um computador está unido e encontrar informações sobre os usuários.
Certifique-se de que o host Linux mantenha o horário sincronizado com os controladores de domínio do AD DS. Veja a documentação da sua distribuição Linux. Para algumas distribuições, você pode fazer isso usando systemd-timesyncd. Edite /etc/systemd/timesyncd.conf para incluir a seguinte configuração. Substitua ntp.server pelo mesmo nome de host ou endereço IP do Protocolo de Tempo de Rede (NTP) que seu ambiente AD DS usa.
[Time]
NTP=ntp.server
FallbackNTP=ntp.ubuntu.com
Depois reinicie o serviço:
sudo systemctl restart systemd-timesyncd.service
Ativar a autenticação AD DS Kerberos
Siga estes passos para habilitar a autenticação Kerberos com AD DS local. Para mais informações sobre como configurar o Samba, veja Configurar o Samba como Membro de Domínio.
Certifique-se de que os controladores de domínio do AD DS estejam acessíveis e descobríveis
Certifique-se de que os servidores DNS configurados possam resolver seu domínio AD DS e seus controladores de domínio.
systemd-resolve --statusGlobal DNSSEC NTA: 10.in-addr.arpa 16.172.in-addr.arpa 168.192.in-addr.arpa 17.172.in-addr.arpa 18.172.in-addr.arpa 19.172.in-addr.arpa 20.172.in-addr.arpa 21.172.in-addr.arpa 22.172.in-addr.arpa 23.172.in-addr.arpa 24.172.in-addr.arpa 25.172.in-addr.arpa 26.172.in-addr.arpa 27.172.in-addr.arpa 28.172.in-addr.arpa 29.172.in-addr.arpa 30.172.in-addr.arpa 31.172.in-addr.arpa corp d.f.ip6.arpa home internal intranet lan local private test Link 2 (eth0) Current Scopes: DNS LLMNR setting: yes MulticastDNS setting: no DNSSEC setting: no DNSSEC supported: no DNS Servers: 10.0.2.5 10.0.2.4 10.0.0.41 DNS Domain: domain1.contoso.comSe os servidores DNS contêm os endereços IP do controlador de domínio, proceda a Configurar nome de host e FQDN. Se o comando não produzir a saída esperada, veja Solucionar problemas na descoberta do controlador de domínio AD DS.
Solucionar problemas na descoberta do controlador de domínio AD DS
Certifique-se de que você pode fazer ping nos endereços IP do controlador de domínio AD DS.
ping 10.0.2.5PING 10.0.2.5 (10.0.2.5) 56(84) bytes of data. 64 bytes from 10.0.2.5: icmp_seq=1 ttl=128 time=0.898 ms 64 bytes from 10.0.2.5: icmp_seq=2 ttl=128 time=0.946 ms ^C --- 10.0.2.5 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1002ms rtt min/avg/max/mdev = 0.898/0.922/0.946/0.024 msSe o ping não funcionar, revise os pré-requisitos e certifique-se de que sua VM tem conectividade de rede aos controladores de domínio do AD DS.
Se os endereços IP responderem ao ping, mas os servidores DNS não forem descobertos automaticamente, você poderá adicionar os servidores DNS manualmente. Edite
/etc/netplan/50-cloud-init.yamlusando seu editor de texto favorito.# This file is generated from information provided by the datasource. Changes # to it will not persist across an instance reboot. To disable cloud-init's # network configuration capabilities, write a file # /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following: # network: {config: disabled} network: ethernets: eth0: dhcp4: true dhcp4-overrides: route-metric: 100 dhcp6: false match: macaddress: 00:22:48:03:6b:c5 set-name: eth0 nameservers: addresses: [10.0.2.5, 10.0.2.4] version: 2Em seguida, aplique as alterações:
sudo netplan --debug applyO Winbind pressupõe que o servidor DHCP mantenha os registros DNS do domínio atualizados. No entanto, essa suposição não é verdadeira para Azure DHCP. Para configurar o cliente para fazer atualizações de DDNS, use este guia para criar um script de rede. Aqui está um exemplo de script que reside em
/etc/dhcp/dhclient-exit-hooks.d/ddns-update.#!/bin/sh # only execute on the primary nic if [ "$interface" != "eth0" ] then return fi # When you have a new IP, perform nsupdate if [ "$reason" = BOUND ] || [ "$reason" = RENEW ] || [ "$reason" = REBIND ] || [ "$reason" = REBOOT ] then host=`hostname -f` nsupdatecmds=/var/tmp/nsupdatecmds echo "update delete $host a" > $nsupdatecmds echo "update add $host 3600 a $new_ip_address" >> $nsupdatecmds echo "send" >> $nsupdatecmds nsupdate $nsupdatecmds fi
Após resolver o problema, proceda a configurar um nome de host e um nome de domínio totalmente qualificado.
Configure o nome do host e o FQDN (nome de domínio totalmente qualificado)
Usando o editor de texto, atualize o arquivo /etc/hosts com o FQDN final (depois de ingressar no domínio) e o alias do host. O endereço IP não importa por enquanto, pois essa linha é usada principalmente para traduzir nome de host curto para FQDN. Para obter mais informações, consulte Configurando o Samba como um membro de domínio.
127.0.0.1 contosovm.contosodomain.contoso.com contosovm
#cmd=sudo vim /etc/hosts
#then enter this value instead of localhost "ubuntuvm.contosodomain.contoso.com UbuntuVM"
Agora, verifique se seu nome de host se resolve corretamente executando os três comandos a seguir.
Use getent hosts para confirmar que o nome de host curto é resolvido para o FQDN. Você pode ignorar o endereço IP que é devolvido.
getent hosts contosovm
127.0.0.1 contosovm.contosodomain.contoso.com contosovm
Use dnsdomainname para confirmar que o nome de domínio está configurado corretamente.
dnsdomainname
contosodomain.contoso.com
Use hostname -f para confirmar que o FQDN completo está resolvido.
hostname -f
contosovm.contosodomain.contoso.com
Observação
Algumas distribuições Linux exigem que você execute o comando hostnamectl para que hostname -f seja atualizado:
hostnamectl set-hostname contosovm.contosodomain.contoso.com
Configurar krb5.conf
Configure /etc/krb5.conf para que o centro de distribuição de chaves Kerberos (KDC) em um controlador de domínio AD DS possa ser contatado para autenticação. Para obter mais informações, confira a documentação do MIT Kerberos. Aqui está um arquivo /etc/krb5.conf de exemplo.
[libdefaults]
default_realm = CONTOSODOMAIN.CONTOSO.COM
dns_lookup_realm = false
dns_lookup_kdc = true
Configurar smb.conf
Identifique o caminho para smb.conf.
sudo smbd -b | grep "CONFIGFILE"
CONFIGFILE: /etc/samba/smb.conf
Mude a configuração do SMB para atuar como um membro do domínio AD DS. O exemplo a seguir usa o rid backend idmap.
Revise a escolha de um backend idmap e selecione o backend que atenda aos requisitos do seu ambiente AD DS.
[global]
workgroup = CONTOSODOMAIN
security = ADS
realm = CONTOSODOMAIN.CONTOSO.COM
winbind refresh tickets = Yes
vfs objects = acl_xattr
map acl inherit = Yes
store dos attributes = Yes
dedicated keytab file = /etc/krb5.keytab
kerberos method = secrets and keytab
winbind use default domain = Yes
load printers = No
printing = bsd
printcap name = /dev/null
disable spoolss = Yes
log file = /var/log/samba/log.%m
log level = 1
idmap config * : backend = tdb
idmap config * : range = 3000-7999
idmap config CONTOSODOMAIN : backend = rid
idmap config CONTOSODOMAIN : range = 10000-999999
template shell = /bin/bash
template homedir = /home/%U
Force winbind a recarregar o arquivo de configuração alterado.
sudo smbcontrol all reload-config
Junte-se ao domínio AD DS
Use o net ads join comando para unir o host ao domínio. Se o comando retornar um erro, consulte Solução de problemas de membros do domínio de samba para resolver o problema.
sudo net ads join -U contososmbadmin
Enter contososmbadmin's password:
Using short domain name -- CONTOSODOMAIN
Joined 'CONTOSOVM' to dns domain 'contosodomain.contoso.com'
Certifique-se de que o registro DNS deste host existe no DNS ADS.
nslookup contosovm.contosodomain.contoso.com 10.0.2.5
Server: 10.0.2.5
Address: 10.0.2.5#53
Name: contosovm.contosodomain.contoso.com
Address: 10.0.0.8
Configurar nsswitch.conf
Se você planeja que os usuários façam login ativamente em máquinas clientes e acessem os compartilhamentos de arquivos do Azure, você precisará configurar nsswitch.conf. Se o acesso planejado for limitado a aplicativos representados por uma conta de usuário ou conta de computador que precise da autenticação Kerberos para acessar o compartilhamento de arquivos, você poderá ignorar esta etapa.
Depois de ingressar o host no domínio, adicione as bibliotecas winbind aos caminhos de pesquisa de usuários e grupos. Use o editor de texto para editar /etc/nsswitch.conf e adicionar as seguintes entradas:
passwd: compat systemd winbind
group: compat systemd winbind
Habilite o serviço winbind para iniciar automaticamente na reinicialização.
sudo systemctl enable winbind
Synchronizing state of winbind.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable winbind
Reinicie o serviço.
sudo systemctl restart winbind
sudo systemctl status winbind
winbind.service - Samba Winbind Daemon
Loaded: loaded (/lib/systemd/system/winbind.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-04-24 09:34:31 UTC; 10s ago
Docs: man:winbindd(8)
man:samba(7)
man:smb.conf(5)
Main PID: 27349 (winbindd)
Status: "winbindd: ready to serve connections..."
Tasks: 2 (limit: 4915)
CGroup: /system.slice/winbind.service
├─27349 /usr/sbin/winbindd --foreground --no-process-group
└─27351 /usr/sbin/winbindd --foreground --no-process-group
Apr 24 09:34:31 contosovm systemd[1]: Starting Samba Winbind Daemon...
Apr 24 09:34:31 contosovm winbindd[27349]: [2020/04/24 09:34:31.724211, 0] ../source3/winbindd/winbindd_cache.c:3170(initialize_winbindd_cache)
Apr 24 09:34:31 contosovm winbindd[27349]: initialize_winbindd_cache: clearing cache and re-creating with version number 2
Apr 24 09:34:31 contosovm winbindd[27349]: [2020/04/24 09:34:31.725486, 0] ../lib/util/become_daemon.c:124(daemon_ready)
Apr 24 09:34:31 contosovm systemd[1]: Started Samba Winbind Daemon.
Apr 24 09:34:31 contosovm winbindd[27349]: STATUS=daemon 'winbindd' finished starting up and ready to serve connections
Verifique se os usuários e grupos de domínio foram descobertos.
getent passwd contososmbadmin
contososmbadmin:*:12604:10513::/home/contososmbadmin:/bin/bash
getent group 'domain users'
domain users:x:10513:
Se os passos anteriores não funcionarem, verifique se um controlador de domínio AD DS está acessível usando a wbinfo ferramenta:
wbinfo --ping-dc
Configurar PAM para o winbind
Se você planeja que os usuários entrem ativamente em computadores cliente e acessem os compartilhamentos de arquivos Azure, você precisará configurar o PAM para winbind. Se o acesso planejado for limitado a aplicativos representados por uma conta de usuário ou conta de computador que precise da autenticação Kerberos para acessar o compartilhamento de arquivos, você poderá ignorar esta etapa.
Coloque o winbind na pilha de autenticação para que os usuários de domínio se autentiquem por meio dele configurando o PAM (Módulo de Autenticação Conectável) para winbind. O segundo comando garante que o sistema crie o diretório base para um usuário de domínio após o primeiro logon.
sudo pam-auth-update --enable winbind
sudo pam-auth-update --enable mkhomedir
Verifique se a configuração de autenticação PAM tem os argumentos corretos pam_winbind.so em /etc/pam.d/common-auth:
grep pam_winbind.so /etc/pam.d/common-auth
auth [success=1 default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
Se o comando não devolver saída, execute sudo pam-auth-update --enable winbind novamente para garantir que o winbind seja adicionado à pilha de autenticação PAM.
Agora você pode entrar nesse sistema como o usuário de domínio, por meio de ssh, su ou qualquer outro meio de autenticação.
su - contososmbadmin
Password:
Creating directory '/home/contososmbadmin'.
contososmbadmin@contosovm:~$ pwd
/home/contososmbadmin
contososmbadmin@contosovm:~$ id
uid=12604(contososmbadmin) gid=10513(domain users) groups=10513(domain users),10520(group policy creator owners),10572(denied rodc password replication group),11102(dnsadmins),11104(aad dc administrators),11164(group-readwrite),11165(fileshareallaccess),12604(contososmbadmin)
Verifique a autenticação do AD DS no Linux
Para verificar se a máquina cliente está conectada ao domínio AD DS, procure a FQDN do cliente usando um servidor DNS AD DS e confirme que a entrada DNS existe para o cliente. Em muitos casos, <dnsserver> é o mesmo que o nome de domínio AD DS ao qual o cliente está conectado.
nslookup <clientname> <dnsserver>
Em seguida, corra klist para ver os tickets no cache do Kerberos:
klist
A saída deve incluir uma entrada começando por krbtgt que seja semelhante a:
krbtgt/CONTOSODOMAIN.CONTOSO.COM@CONTOSODOMAIN.CONTOSO.COM
Se você não configurou o PAM para o winbind, talvez klist não mostre a entrada do tíquete. Nesse caso, você pode autenticar manualmente o usuário para obter os tíquetes:
wbinfo -K contososmbadmin
Você também pode executar o comando como parte de um script:
wbinfo -K 'contososmbadmin%SUPERSECRETPASSWORD'
Montar o compartilhamento de arquivos
Depois de habilitar a autenticação Kerberos e ingressar no domínio na VM do Linux, você poderá montar o compartilhamento de arquivos.
Use a seguinte opção de montagem com todos os modelos de controle de acesso para habilitar a segurança Kerberos: sec=krb5. Omita o nome de usuário e a senha quando você usa sec=krb5. Por exemplo:
sudo mount -t cifs $SMB_PATH $MNT_PATH -o sec=krb5,cruid=$UID,serverino,nosharesock,actimeo=30,mfsymlinks
Observação
Esse recurso só dá suporte a um modelo de controle de acesso imposto pelo servidor que usa ACLs NT sem bits de modo. As ferramentas do Linux que atualizam os ACLs NT são mínimas, portanto, atualize os ACLs por meio do Windows. Atualmente, não há suporte para modelos de controle de acesso imposto pelo cliente (modefromsid,idsfromsid) e controle de acesso traduzido pelo cliente (cifsacl).
Opções adicionais de montagem SMB do Arquivos do Azure para Linux
Montagem de usuário único versus multiusuário
Em um caso de uso de montagem para usuário único, um único usuário no domínio AD DS acessa o ponto de montagem e não o compartilha com outros usuários no domínio. Cada acesso a arquivos ocorre no contexto do usuário cujas credenciais krb5 são usadas para montar o compartilhamento de arquivos. Qualquer usuário no sistema local que acessa o ponto de montagem faz isso se passando por aquele usuário.
Em um caso de uso multiusuário, ainda há um único ponto de montagem, mas vários usuários do AD DS podem acessar esse mesmo ponto de montagem. Em cenários em que vários usuários no mesmo cliente acessam o mesmo compartilhamento e o sistema é configurado para Kerberos e montado com sec=krb5, considere usar a opção multiuser de montagem.
Permissões de arquivo
As permissões de arquivo são importantes, especialmente se clientes de Linux e Windows acessarem o compartilhamento de arquivos. Para converter permissões de arquivo em DACLs em arquivos, use uma opção de montagem padrão, como file_mode=<>,dir_mode=<>. O cliente só impõe permissões de arquivo especificadas como file_mode e dir_mode. O servidor impõe o controle de acesso com base no descritor de segurança do arquivo ou do diretório.
Propriedade do arquivo
A propriedade do arquivo é importante, especialmente se o Linux e os clientes Windows acessarem o compartilhamento de arquivos. Escolha uma das seguintes opções de montagem para converter a propriedade do arquivo UID/GID em SID de proprietário/grupo no arquivo DACL:
- Use um padrão como uid=<>,gid=<>
- Configure o mapeamento UID/GID via RFC2307 e AD DS usando nss_winbind ou nss_sssd.
Coerência do cache de atributos de arquivo
O desempenho é importante, mesmo que os atributos de arquivo nem sempre sejam precisos. O valor padrão para actimeo é 1 (segundo), o que significa que os atributos de arquivo são buscados novamente do servidor se os atributos armazenados em cache tiverem mais de 1 segundo de idade. Aumentar o valor para 60 significa que os atributos são armazenados em cache por pelo menos um minuto. Para a maioria dos casos de uso, use um valor de 30 para essa opção (actimeo=30).
Para kernels mais recentes, considere definir os recursos de actimeo de forma mais granular. Você pode usar acdirmax para cache de revalidação de entrada de diretório e acregmax para armazenar em cache metadados de arquivo, por exemplo acdirmax=60,acregmax=5.
Próxima etapa
Para saber como montar um compartilhamento de arquivos SMB no Linux, confira: