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: ✔️ Compartilhamentos de arquivos do Azure SMB
Para obter mais informações sobre opções e considerações suportadas, consulte Visão geral das opções de autenticação baseada em identidade do Azure Files para acesso SMB.
Os Arquivos do Azure dão suporte à autenticação baseada em identidade no SMB (Server Message Block) para máquinas virtuais (VMs) Linux usando o protocolo de autenticação Kerberos por meio dos seguintes métodos:
- Serviços de Domínio do Active Directory do Windows (AD DS) locais
- Serviços de Domínio Microsoft Entra
Para usar o AD DS, deve sincronizar o seu AD DS com o Microsoft Entra ID utilizando o Microsoft Entra Connect.
Nota
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 Ative Directory.
Limitações do cliente Linux SMB
Não é possível usar autenticação baseada em identidade para montar partilhas de ficheiros do Azure em clientes Linux na inicialização através de entradas fstab. Isto porque o cliente não consegue obter o ticket do Kerberos com antecedência suficiente para montar no 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 ativar a autenticação do Active Directory sobre SMB para partilhas de ficheiros Azure, certifique-se de que cumpre os seguintes pré-requisitos.
- Uma VM Linux executando o Ubuntu 18.04+, ou uma VM RHEL ou SLES equivalente. Se estiver a correr no Azure, a VM deve ter pelo menos uma interface de rede na rede virtual que contenha os Microsoft Entra Domain Services. Se estiver usando uma VM local, o AD DS deverá ser sincronizado com a ID do Microsoft Entra.
- 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. Se já fizer parte de um domínio, ele deve primeiro sair desse domínio antes de poder ingressar nesse domínio.
- Um locatário do Microsoft Entra totalmente configurado, com o usuário do domínio já configurado.
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 o tempo sincronizado com o servidor de domínio. Consulte a documentação da sua distribuição Linux. Para algumas distros, você pode fazer isso usando systemd-timesyncd. Edite /etc/systemd/timesyncd.conf usando o seu editor de texto favorito para incluir o seguinte:
[Time]
NTP=onpremaadint.com
FallbackNTP=ntp.ubuntu.com
Em seguida, reinicie o serviço:
sudo systemctl restart systemd-timesyncd.service
Habilitar a autenticação Kerberos do AD
Siga estas etapas para habilitar a autenticação Kerberos do AD. Esta documentação do Samba pode ser útil como referência.
Verifique se o servidor de domínio está acessível e detetável
- Certifique-se de que os servidores DNS que inserir contêm os endereços IP do servidor de domínio.
systemd-resolve --status
Global
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.com
Se o comando funcionar, pule os passos seguintes e avance para a secção seguinte.
Se o comando não funcionar, certifica-te de que consegues fazer ping aos endereços IP do servidor de domínio.
ping 10.0.2.5
PING 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 ms
Se o ping não funcionar, volta aos pré-requisitos e certifica-te de que a tua VM está numa rede virtual que tem acesso ao inquilino do Entra.
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: 2
Em seguida, aplique as alterações:
sudo netplan --debug apply
- Winbind 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
Conecte-se aos Serviços de Domínio do Microsoft Entra e verifique se os serviços são detetáveis
Certifica-te de que consegues fazer ping ao servidor de domínio pelo nome de domínio.
ping contosodomain.contoso.com
PING contosodomain.contoso.com (10.0.2.4) 56(84) bytes of data.
64 bytes from pwe-oqarc11l568.internal.cloudapp.net (10.0.2.4): icmp_seq=1 ttl=128 time=1.41 ms
64 bytes from pwe-oqarc11l568.internal.cloudapp.net (10.0.2.4): icmp_seq=2 ttl=128 time=1.02 ms
64 bytes from pwe-oqarc11l568.internal.cloudapp.net (10.0.2.4): icmp_seq=3 ttl=128 time=0.740 ms
64 bytes from pwe-oqarc11l568.internal.cloudapp.net (10.0.2.4): icmp_seq=4 ttl=128 time=0.925 ms
^C
--- contosodomain.contoso.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3016ms
rtt min/avg/max/mdev = 0.740/1.026/1.419/0.248 ms
Certifique-se de que pode encontrar os serviços Entra na rede.
nslookup
> set type=SRV
> _ldap._tcp.contosodomain.contoso.com.
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
_ldap._tcp.contosodomain.contoso.com service = 0 100 389 pwe-oqarc11l568.contosodomain.contoso.com.
_ldap._tcp.contosodomain.contoso.com service = 0 100 389 hxt4yo--jb9q529.contosodomain.contoso.com.
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 "ubuntvm.contosodomain.contoso.com UbuntuVM"
Agora, o seu nome de host deve estar a ser resolvido. Você pode ignorar o endereço IP para o qual ele resolve por enquanto. O nome de host curto deve corresponder ao FQDN.
getent hosts contosovm
127.0.0.1 contosovm.contosodomain.contoso.com contosovm
dnsdomainname
contosodomain.contoso.com
hostname -f
contosovm.contosodomain.contoso.com
Nota
Algumas distribuições Linux exigem que execute o comando hostnamectl para hostname -f ser 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) com o servidor de domínio possa ser contatado 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
Altere a configuração do SMB para atuar como um membro do domínio. Para obter mais informações, consulte Configuração do Samba como membro de um domínio. Aqui está um arquivo de exemplo smb.conf .
Nota
Este exemplo é para os Microsoft Entra Domain Services, para os quais a configuração backend = rid é recomendada ao configurar o idmap. Os utilizadores locais do AD DS podem preferir escolher um idmap backend diferente.
[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
Juntar-se ao domínio
Use o net ads join comando para associar o host ao domínio dos Serviços de Domínio Microsoft Entra. 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 # user - garead
Enter contososmbadmin's password:
Using short domain name -- CONTOSODOMAIN
Joined 'CONTOSOVM' to dns domain 'contosodomain.contoso.com'
Certifique-se de que o registo DNS existe para este anfitrião no servidor de domínio.
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
Se planeias que os utilizadores façam login ativo nas máquinas clientes e acedam às partilhas de ficheiros do Azure, tens de configurar o nsswitch.conf e configurar o PAM para o winbind. Se o acesso planejado estiver limitado a aplicativos representados por uma conta de usuário ou de computador que precisam de autenticação Kerberos para acessar o compartilhamento de arquivos, ignore estas etapas.
Configurar nsswitch.conf
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 o controlador de domínio está acessível usando a wbinfo ferramenta:
wbinfo --ping-dc
Configurar o PAM para winbind
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 do PAM tem os seguintes argumentos 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
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 configuração
Para verificar se a máquina cliente está associada ao domínio, procure o FQDN do cliente no controlador de domínio e localize a entrada DNS listada para este cliente específico. Em muitos casos, <dnsserver> é o mesmo que o nome de domínio ao qual o cliente está associado.
nslookup <clientname> <dnsserver>
Em seguida, use o klist comando para exibir os tíquetes no cache Kerberos. Deve haver uma entrada que comece com krbtgt e que se pareça com:
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 AD (ou Entra ID) 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 ACLs NT são mínimas, portanto, atualize 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).
Outras opções de montagem
Montagem de utilizador único versus montagem multiutilizador
Num caso de utilização de montagem de utilizador único, um único utilizador no domínio AD 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.
Em um caso de uso de montagem multiusuário, ainda há um único ponto de montagem, mas vários usuários do AD podem acessar 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 arquivo são importantes, especialmente se os clientes Linux e Windows acessarem o compartilhamento de arquivos. 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 do arquivo é importante, especialmente se os clientes Linux e Windows acessarem o compartilhamento de arquivos. 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=<>
- Configurar mapeamento UID/GID via RFC2307 e Ative Directory (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: