Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: ✔️ partilhas de ficheiros SMB
O Ficheiros do Azure suporta autenticação baseada em identidade sobre Server Message Block (SMB) para máquinas virtuais Linux (VMs), utilizando o protocolo de autenticação Kerberos com Active Directory Domain Services (AD DS) on-premiss. Para utilizar este procedimento, deve sincronizar o seu ambiente AD DS com o Microsoft Entra ID utilizando o Microsoft Entra Connect Sync.
Para mais informações sobre opções suportadas e considerações, consulte Visão geral das opções de autenticação baseadas em identidade Ficheiros do Azure para acesso SMB.
Nota
Este artigo usa o Ubuntu para as etapas de exemplo. Configurações semelhantes funcionam para clientes RHEL e SLES, permitindo montar partilhas de ficheiros Azure usando AD DS local.
Limitações do cliente Linux SMB
Não é possível usar a autenticação baseada na identidade para montar partilhas de ficheiros do Azure em clientes Linux no arranque, utilizando entradas fstab. Esta limitação existe porque o cliente não consegue obter o bilhete Kerberos com a antecedência necessária para montar durante o arranque. Pode usar uma fstab entrada e especificar a noauto opção para permitir que um utilizador monte a partilha de ficheiros após iniciar sessão, usando um comando simples de montagem sem todos os parâmetros. Você também pode usar autofs para montar a partilha no momento do acesso.
Pré-requisitos
Antes de configurar um cliente Linux para utilizar a autenticação do AD DS no local através de SMB para partilhas de ficheiros do Azure, conclua os seguintes pré-requisitos:
- Uma VM Linux executando o Ubuntu 18.04+, ou uma VM RHEL ou SLES equivalente. A VM deve ter conectividade de rede aos controladores de domínio AD DS locais e usar servidores DNS que possam resolver o domínio AD DS.
- Um ambiente AD DS on-premises sincronizado com o Microsoft Entra ID através do Microsoft Entra Connect Sync.
- Uma partilha de ficheiros SMB Azure numa conta de armazenamento configurada para autenticação AD DS local.
- Credenciais de usuário root ou 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 juntar a VM a esse domínio.
- Uma conta de utilizador do domínio AD DS com permissão para ligar computadores ao domínio.
Instalar o pacote samba não é estritamente necessário, mas ele lhe dá algumas ferramentas úteis e traz outros pacotes automaticamente, como samba-common e smbclient. Execute os seguintes comandos para instalá-lo. Se lhe forem solicitados 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 samba e é útil para fins de autenticação e depuração, como verificar se o controlador de domínio está acessível, verificar a que domínio uma máquina está associada e encontrar informações sobre os usuários.
Certifique-se de que o host Linux mantém a hora sincronizada com os controladores de domínio AD DS. Consulte a documentação da sua distribuição Linux. Para algumas distribuições, pode fazer isto 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 servidor Network Time Protocol (NTP) que o seu ambiente AD DS utiliza.
[Time]
NTP=ntp.server
FallbackNTP=ntp.ubuntu.com
Em seguida, reinicie o serviço:
sudo systemctl restart systemd-timesyncd.service
Ativar autenticação AD DS Kerberos
Siga estes passos para ativar a autenticação Kerberos com AD DS local. Para mais informações sobre como configurar o Samba, consulte Configurar o Samba como Membro de Domínio.
Certifique-se de que os controladores de domínio AD DS são acessíveis e descobríveis
Garanta que os servidores DNS configurados conseguem resolver o domínio e controladores de domínio do seu AD DS.
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 conterem os endereços IP dos controladores de domínio, proceda a Configurar o nome do host e o FQDN. Se o comando não produzir a saída esperada, veja Troubleshoot AD DS domain controller discovery.
Resolver problemas de deteção do controlador de domínio do AD DS
Certifique-se de que pode fazer ping aos 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, revê os pré-requisitos e certifica-te de que a tua VM tem conectividade de rede aos controladores de domínio AD DS.
Se os endereços IP responderem ao ping mas os servidores DNS não forem detetados automaticamente, podes adicionar os servidores DNS manualmente. Edita
/etc/netplan/50-cloud-init.yamlusando o teu 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 applyWinbind assume que o servidor DHCP mantém os registros DNS do domínio atualizados. No entanto, esta suposição não é verdadeira para o Azure DHCP. Para configurar o cliente para fazer atualizações 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
Depois de resolver o problema, proceda à configuração de um nome de host e de um nome de domínio totalmente qualificado.
Configurar nome de host e nome de domínio totalmente qualificado (FQDN)
Usando seu editor de texto, atualize o /etc/hosts arquivo com o FQDN final (depois de ingressar no domínio) e o alias para o host. O endereço IP não importa por enquanto porque esta linha é usada principalmente para traduzir nome de host curto para FQDN. Para obter mais informações, consulte Configurando o Samba como membro do 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 o seu nome de host se resolve corretamente executando os três comandos seguintes.
Use getent hosts para confirmar que o nome abreviado do anfitrião é resolvido para o FQDN. Podes 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
Nota
Algumas distribuições Linux exigem que 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) num controlador de domínio AD DS possa ser contactado para autenticação. Para obter mais informações, consulte a documentação do MIT Kerberos. Aqui está um arquivo de exemplo /etc/krb5.conf .
[libdefaults]
default_realm = CONTOSODOMAIN.CONTOSO.COM
dns_lookup_realm = false
dns_lookup_kdc = true
Configurar o smb.conf
Identifique o caminho para o smb.conf.
sudo smbd -b | grep "CONFIGFILE"
CONFIGFILE: /etc/samba/smb.conf
Mude a configuração do SMB para atuar como membro do domínio AD DS. O exemplo seguinte utiliza o backend rid idmap. Consulte A escolha de um backend de idmap e selecione o backend que satisfaça os 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 ficheiro de configuração alterado.
sudo smbcontrol all reload-config
Junte-se ao domínio AD DS
Use o net ads join comando para ligar o host ao domínio. Se o comando devolver um erro, consulte Resolução de problemas dos membros do domínio 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 registo DNS deste host existe no DNS DS AD.
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 planeias que os utilizadores façam login ativo nas máquinas clientes e acedam às partilhas de ficheiros do Azure, precisas de configurar o nsswitch.conf. Se o acesso planeado for limitado a aplicações representadas por uma conta de utilizador ou de computador que necessitem de autenticação Kerberos para aceder à partilha de ficheiros, pode saltar este passo.
Depois de juntares o host ao domínio, adiciona as bibliotecas winbind aos caminhos de pesquisa do utilizador e do grupo. Use seu 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
Certifique-se de que os usuários e grupos do domínio sejam 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 é acessível usando a wbinfo ferramenta:
wbinfo --ping-dc
Configurar o PAM para winbind
Se planeia que os utilizadores façam login ativo nas máquinas clientes e acedam às partilhas de ficheiros do Azure, precisa de configurar o PAM para o winbind. Se o acesso planeado for limitado a aplicações representadas por uma conta de utilizador ou de computador que necessitem de autenticação Kerberos para aceder à partilha de ficheiros, pode saltar este passo.
Coloque o winbind na pilha de autenticação para que os utilizadores do domínio se autentiquem através do winbind, configurando o PAM (Módulo de Autenticação Pluggable) para o winbind. O segundo comando garante que o sistema cria o diretório inicial para um utilizador do domínio no primeiro login.
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, reexecute sudo pam-auth-update --enable winbind para garantir que o winbind é adicionado à pilha de autenticação PAM.
Agora pode iniciar sessão neste sistema como utilizador do domínio, seja através 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)
Verificar autenticação AD DS no Linux
Para verificar se a máquina cliente está ligada ao domínio AD DS, procure a FQDN do cliente usando um servidor DNS ADS DNS e confirme que a entrada DNS existe para o cliente. Em muitos casos, <dnsserver> é igual ao nome de domínio AD DS ao qual o cliente está ligado.
nslookup <clientname> <dnsserver>
De seguida, corra klist para ver os tickets na cache do Kerberos:
klist
A saída deve incluir uma entrada que comece por krbtgt e que se assemelhe a:
krbtgt/CONTOSODOMAIN.CONTOSO.COM@CONTOSODOMAIN.CONTOSO.COM
Se você não configurou o PAM para winbind, klist talvez não mostre a entrada do tíquete. Neste caso, você pode autenticar manualmente o usuário para obter os ingressos:
wbinfo -K contososmbadmin
Você também pode executar o comando como parte de um script:
wbinfo -K 'contososmbadmin%SUPERSECRETPASSWORD'
Montar a partilha de ficheiros
Depois de ativar a autenticação Kerberos e juntar domínio à sua VM Linux, pode montar a partilha de ficheiros.
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 utilizador e a palavra-passe quando usares sec=krb5. Por exemplo:
sudo mount -t cifs $SMB_PATH $MNT_PATH -o sec=krb5,cruid=$UID,serverino,nosharesock,actimeo=30,mfsymlinks
Nota
Esta funcionalidade suporta apenas um modelo de controlo de acesso imposto pelo servidor que utiliza ACLs NT sem bits de modo. As ferramentas Linux que atualizam as ACLs NT são mínimas, por isso atualiza as ACLs através 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 do Ficheiros do Azure SMB para Linux
Montagem de utilizador único versus montagem multiutilizador
Num caso de uso de montagem de utilizador único, um único utilizador no domínio AD DS acede ao ponto de montagem e não o partilha com outros utilizadores no domínio. Cada acesso a ficheiros ocorre no contexto do utilizador cujas credenciais krb5 são usadas para montar a partilha de ficheiros. Qualquer utilizador no sistema local que acesse o ponto de montagem assume a identidade desse utilizador.
Num caso de utilização multi-utilizador, ainda existe um único ponto de montagem, mas vários utilizadores de AD DS podem aceder a esse mesmo ponto de montagem. Em cenários em que vários utilizadores no mesmo cliente acedem à mesma partilha, e o sistema está configurado para Kerberos e montado com sec=krb5, considere usar a opção de montagem multiuser.
Permissões de arquivo
As permissões de ficheiro são importantes, especialmente se tanto os clientes Linux como Windows acedessem à partilha de ficheiros. Para converter permissões de ficheiro em DACLs em ficheiros, use uma opção de montagem padrão, como file_mode=<>,dir_mode=<>. O cliente apenas aplica permissões de ficheiro 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 diretório.
Propriedade do ficheiro
A propriedade dos ficheiros é importante, especialmente se tanto os clientes Linux como Windows acedessem à partilha de ficheiros. Escolha uma das seguintes opções de montagem para converter o UID/GID de propriedade do ficheiro para o SID de proprietário/grupo na DACL do ficheiro.
- Use um padrão como uid=<>,gid=<>
- Configura o mapeamento UID/GID através do 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 ficam armazenados em cache durante pelo menos um minuto. Para a maioria dos casos de uso, use um valor de 30 para esta opção (actimeo=30).
Para kernels mais recentes, considere definir os recursos do actimeo de forma mais granular. Você pode usar acdirmax para cache de revalidação de entrada de diretório e acregmax para armazenar metadados de arquivo em cache, por exemplo , acdirmax=60,acregmax=5.
Próximo passo
Para aprender a montar uma partilha de ficheiros SMB no Linux, veja: