Jump to content

# Samba (Português)

6 languages

- Deutsch
- English
- Magyar
- 日本語
- Русский
- 中文（简体）

From ArchWiki

Related articles

- Active Directory Integration
- Samba/Active Directory domain controller
- NFS

Samba é a suíte de programas padrão de interoperabilidade do Windows com Linux e Unix. Desde 1992, Samba vem provendo seguros, estáveis e rápidos serviços de arquivo e impressão para todos os clientes usando o protocolo SMB/CIFS, como todas as versões do DOS e Windows, OS/2, Linux e muitos outros.

Para compartilhar arquivos através do Samba, veja a seção #Servidor; para acessar arquivos compartilhados através do Samba em outras máquinas, veja a seção #Cliente.

## Servidor

### Instalação

Instale o pacote samba.

Samba é configurado pelo arquivo de configuração `/etc/samba/smb.conf`, o qual é extensivamente documentado em smb.conf(5).

Pelo fato do pacote samba não prover este arquivo, um deverá ser criado antes de iniciar o serviço `smb.service`.

Um exemplo documentado `smb.conf.default` do repositório git do Samba pode ser usado para configurar `/etc/samba/smb.conf`.

Nota:

- A configuração padrão ajusta `log file` para uma localização não gravável, o que irá causar erros - aplica-se uma das seguintes soluções:
  - Altere a localização do arquivo de log para um caminho gravável: `log file = /var/log/samba/%m.log`
  - Altere o log para uma solução de back-end sem arquivo: `logging = syslog` com `syslog only = yes`, ou use `logging = systemd`
- Se necessário; o `workgroup` especificado na seção `[global]` precisa equivaler ao grupo de trabalho do Windows (por padrão `WORKGROUP`).

Dica: Sempre que você modificar o arquivo `smb.conf`, execute o comando testparm(1) para verificar por erros de sintaxe.

#### Ativando e iniciando serviços

Para prover compartilhamento básico de arquivos via SMB, ative/inicie `smb.service`. Veja smbd(8) para mais detalhes.

Se você deseja tornar o seu servidor acessível via NetBIOS hostname, ajuste o nome desejado através da opção `netbios name` em `smb.conf` e ative/inicie `nmb.service`. Veja nmbd(8) para detalhes.

Nota: `nmb.service` não é requerido. Entretanto, é necessário para acessar servidores Samba pelo hostname (por exemplo, `smb://hostname/`) para alguns hosts. Se sua rede é composta somente por máquinas executando Windows 10 ou mais recente, considere instalar também um daemon WSD para que seu servidor apareça ao visualizar o componente "Rede".

#### Tornar a rede detectável

Instale o pacote avahi, então ative/inicie `avahi-daemon.service` para tornar o servidor samba detectável com Zeroconf. Isto deve funcionar para a maioria dos gerenciadores de arquivos não-Windws (como Finder do macOS, vários gerenciadores de arquivos baseados em interface gráfica do Linux e BSD etc.)

Se `avahi-daemon.service` não estiver em execução, o servidor continuará acessível, apenas não detectável, isto é, não aparecerá nos gerenciadores de arquivos, mas você poderá conectar-se ao servidor diretamente pelo IP ou domínio.

O Windows Explorer depende do protocolo WS-Discovery; veja #Windows 1709 ou mais recente não mostra o servidor Samba na rede.

#### Configurar firewall

Se você estiver usando um firewall, não se esqueça de abrir as portas necessárias (normalmente 137-139 + 445). Para uma lista completa, veja uso de portas pelo Samba.

##### Regra UFW

Um perfil de aplicativo Ufw para SMB/CIFS é incluído por padrão com a instalação padrão do UFW em `ufw-fileserver`.

Permita ao Samba executar `ufw allow CIFS` como root.

Caso tenha excluído o perfil, crie/edite `/etc/ufw/applications.d/samba` e adicione o seguinte conteúdo:

    [Samba]
    title=LanManager-like file and printer server for Unix
    description=The Samba software suite is a collection of programs that implements the SMB/CIFS protocol for unix systems, allowing you to serve files and printers to Windows, NT, OS/2 and DOS clients. This protocol is sometimes also referred to as the LanManager or NetBIOS protocol.
    ports=137,138/udp|139,445/tcp

Em seguida, carregue o perfil no UFW executando `ufw app update Samba` como root.

Então finalmente dê permissão ao Samba executando `ufw allow Samba` como root.

##### Serviço firewalld

Para configurar firewalld para permitir Samba na zona home, execute:

    # firewall-cmd --permanent --add-service={samba,samba-client,samba-dc} --zone=home

Os três serviços listados são:

- `samba`: para compartilhar arquivos com terceiros.
- `samba-client`: para navegar por compartilhamentos em outras máquinas na rede.
- `samba-dc`: para Samba/Active Directory domain controller.

`--permanent` garante que as mudanças continuem após o reinício do serviço `firewalld.service`.

### Uso

#### Gerenciamento de usuários

A seguinte seção descreve como criar um banco de dados local (tdbsam) de usuários do Samba. Para autenticação de usuários e outros propósitos, Samba também pode ser vinculado a um domínio do Active Directory, pode servir como um controlador de domínio do Active Directory ou pode ser usado com um servidor LDAP.

##### Adicionando um usuário

Samba requer uma conta de usuário Linux - você poderá usar uma existente ou criar uma nova.

Nota: O usuário/grupo nobody já deve existir no sistema, é usado como padrão `guest account` e poderá ser usado para compartilhamentos contendo `guest ok = yes`, evitando assim a necessidade de login do usuário nesse compartilhamento.

Embora o nome de usuário seja compartilhado com o sistema Linux, o Samba usa uma senha separada daquela das contas de usuário do Linux. Substitua `samba_user` com a conta de usuário Samba escolhida:

    # smbpasswd -a samba_user

Dependendo da função do servidor, permissões de arquivo e atributos existentes podem precisar ser alterados para a conta de usuário do Samba.

Se você deseja que o novo usuário tenha permissão apenas para acessar remotamente os compartilhamentos do servidor de arquivos através do Samba, você pode restringir outras opções de login：

- disabling shell - `usermod --shell /usr/bin/nologin --lock samba_user`
- disabling SSH logons - edit `/etc/ssh/sshd_config`, change option `AllowUsers`

Veja também segurança para aumentar a segurança do seu sistema.

##### Listando usuários

Usuários do Samba podem ser listados usando o comando pdbedit(8):

    # pdbedit -L -v

##### Alterando senha do usuário

Para alterar uma senha do usuário, use `smbpasswd`:

    # smbpasswd samba_user

#### Criando um compartilhamento anônimo

1. Crie um usuário Linux para o qual os usuários anônimos do Samba serão mapeados.

    # useradd guest -s /bin/nologin

Nota: O nome de usuário pode ser qualquer username válido em Linux, não apenas "guest". Este usuário não precisa ser um usuário do Samba.

2. Adicione o seguinte ao `/etc/samba/smb.conf`:

    /etc/samba/smb.conf

    ...
    [global]
    security = user
    map to guest = bad user
    guest account = guest

    [guest_share]
        comment = guest share
        path = /tmp/
        public = yes
        only guest = yes
        writable = yes
        printable = no

Usuários anônimos serão agora mapeados ao usuário Linux `guest` e terão a capacidade de acessar quaisquer diretórios definidos em `guest_share.path`, o qual é configurado para ser `/tmp/` no exemplo acima.

Nota: O nome de compartilhamento não precisa ter "guest" nele. Pode ser qualquer nome de compartilhamento válido para o Samba.

Certifique-se de que o usuário Linux `guest` possui as permissões apropriadas para acessar arquivos em `guest_share.path`.

Além disso, certifique-se de que os compartilhamentos foram definidos adequadamente de acordo com a seção Share Definitions de smb.conf.default.

### Ativar seguimento de links simbólicos

Atenção: Ativar a opção `follow symlinks` pode ser um risco de segurança.

    /etc/samba/smb.conf

    ...
    [global]
       follow symlinks = yes
       wide links = yes
       unix extensions = no

Então, reinicie `smb.service`.

Nota: Ao usar AppArmor, caso o link simólico aponte para um diretório fora do diretório home do usuário ou ao diretório usershare, então você precisará modificar as permissões do perfil AppArmor.

### Configuração avançada

#### Ativar compartilhamentos de usuário

Nota: Este recurso é opcional. Pule esta seção caso você não necessite dela.

Compartilhamentos de usuário é um recurso que dá a usuários não-root a capacidade de adicionar, modificar e excluir suas próprias definições de compartilhamento. Veja smb.conf(5) § USERSHARES.

1. Crie um diretório para compartilhamentos de usuário:

       # mkdir /var/lib/samba/usershares

2. Crie um grupo de usuários:

       # groupadd -r sambashare

3. Altere o proprietário do diretório para `root` e o grupo para `sambashare`:

       # chown root:sambashare /var/lib/samba/usershares

4. Altere as permissões do diretório `usershares` para que os usuários do grupo `sambashare` possam criar arquivos. Este comando também ajusta o sticky bit, o qual é importante para prevenir que usuários excluam compartilhamentos de outros usuários:

       # chmod 1770 /var/lib/samba/usershares

Ajuste os seguintes parâmetros no arquivo de configuração `smb.conf`:

    /etc/samba/smb.conf

    [global]
      usershare path = /var/lib/samba/usershares
      usershare max shares = 100
      usershare allow guests = yes
      usershare owner only = yes

Adicione o usuário ao grupo sambashare. Substitua `your_username` pelo nome de seu usuário:

    # gpasswd sambashare -a your_username

Reinicie os serviços `smb.service` e `nmb.service`.

Faça logout e login novamente.

Se desejar compartilhar caminhos dentro de seu diretório home, você deve torná-lo acessível para o grupo others.

Na interface gráfica, você pode usar Thunar ou Dolphin - clique com o botão direito em qualquer diretório e compartilhe-o na rede.

Na linha de comando, use um dos seguintes comandos, substituindo o que está em itálico sharename, user, ... :

    # net usershare add sharename abspath [comment] [user:{R|D|F}] [guest_ok={y|n}]
    # net usershare delete sharename
    # net usershare list wildcard-sharename
    # net usershare info wildcard-sharename

#### Ajustar e forçar permissões

Permissões podem ser aplicadas para ambos servidor e compartilhamentos:

    /etc/samba/smb.conf

    [global]
      ;inherit owner = unix only ; Inherit ownership of the parent directory for new files and directories
      ;inherit permissions = yes ; Inherit permissions of the parent directory for new files and directories
      create mask = 0664
      directory mask = 2755
      force create mode = 0644
      force directory mode = 2755
      ...

    [media]
      comment = Media share accessible by greg and pcusers
      path = /path/to/media
      valid users = greg @pcusers
      force group = +pcusers
      public = no
      writable = yes
      create mask = 0664
      directory mask = 2775
      force create mode = 0664
      force directory mode = 2775

    [public]
      comment = Public share where archie has write access
      path = /path/to/public
      public = yes
      read only = yes
      write list = archie
      printable = no

    [guests]
      comment = Allow all users to read/write
      path = /path/to/guests
      public = yes
      only guest = yes
      writable = yes
      printable = no

Veja smb.conf(5) para uma visão geral de possíveis bandeiras de permissão e configurações.

#### Restringir protocolos para maior segurança

Atenção: Por padrão, versões do Samba anteriores a 4.11 permitem conexões usando o desatualizado e inseguro protocolo SMB1. Ao usar uma dessas versões do Samba, é altamente recomendável configurar `server min protocol = SMB2_02` para proteger seu sistema de ataques de ransonware. Em versões do Samba 4.11 e mais novas, SMB2 é o protocolo padrão, portanto nenhuma alteração será necessária.

Acrescente `server min protocol` e `server max protocol` em `/etc/samba/smb.conf` para forçar o uso de um protocolo mínimo e máximo:

    /etc/samba/smb.conf

    [global]
      server min protocol = SMB2_02
      ; server max protocol = SMB3

Veja `server max protocol` em smb.conf(5) para uma visão geral de protocolos suportados.

Para compatibilidade com clientes e/ou servidores mais antigos, você pode precisar definir `client min protocol = CORE` ou `server min protocol = CORE`, mas observe que isto torna o seu sistema mais vulnerável a exploits no SMB1 incluindo ataques de ransonware.

Dica: Use `server min protocol = SMB3_00` quando clientes devem apenas conectar-se usando o mais recente protocolo SMB3, por exemplo, clientes usando Windows 8 e mais recentes.

Clientes usando `mount.cifs` podem necessitar que seja especificado o `vers=*` correto, por exemplo:

    # mount -t cifs //SERVER/sharename /mnt/mountpoint -o username=username,password=password,iocharset=utf8,vers=3.1.1

Veja mount.cifs(8) para mais informações.

#### Usar criptografia de transporte SMB nativa

A criptografia de transporte SMB nativa está disponível na versão SMB 3.0 ou mais recente. Os clientes que oferecem suporte a esse tipo de criptografia incluem Windows 8 e mais recente, Windows server 2012 e mais recente e smbclient do Samba 4.1 e mais recente.

Para usar a criptografia de transporte SMB nativa por padrão, defina o parâmetro `server smb encrypt` globalmente e/ou por compartilhamento. Valores possíveis são `off`, `enabled` (valor padrão), `desired`, ou `required`:

    /etc/samba/smb.conf

    [global]
      server smb encrypt = desired

Para configurar a criptografia no lado do cliente, use a opção `client smb encrypt`.

Veja smb.conf(5) para maiores informações, especialmente os parágrafos Effects for SMB1 e Effects for SMB2.

Dica: Ao montar um compartilhamento, especifique a opção de montagem `seal` para forçaro uso de criptografia.

#### Desativar compartilhamento de impressora

Por padrão, o Samba compartilha impressoras configuradas usando CUPS.

Se você não quiser que as impressoras sejam compartilhadas, use as seguintes configurações:

    /etc/samba/smb.conf

    [global]
      load printers = no
      printing = bsd
      printcap name = /dev/null
      disable spoolss = yes
      show add printer wizard = no

#### Bloquear certas extensões de arquivo em um compartilhamento do Samba

Nota: Definir este parâmetro afetará o desempenho do Samba, pois ele será forçado a verificar todos os arquivos e diretórios para uma correspondência à medida que são verificados.

O Samba oferece uma opção para bloquear arquivos com determinados padrões, como extensões de arquivo. Esta opção pode ser usada para evitar a disseminação de vírus ou para dissuadir os usuários de desperdiçar espaço com determinados arquivos. Mais informações sobre esta opção podem ser encontradas em smb.conf(5).

    /etc/samba/smb.conf

    ...
    [myshare]
      comment = Private
      path = /mnt/data
      read only = no
      veto files = /*.exe/*.com/*.dll/*.bat/*.vbs/*.tmp/*.mp3/*.avi/*.mp4/*.wmv/*.wma/

#### Melhorar o desempenho

Atenção: Cuidado, isso pode levar a problemas de corrupção/conexão e potencialmente prejudicar sua pilha TCP/IP.

As configurações padrão devem ser suficientes para a maioria dos usuários. No entanto, definir 'socket options' corretamente poderá melhorar o desempenho, mas errar pode torná-lo mais lento. Teste o efeito antes de fazer grandes alterações.

Leia smb.conf(5) no manual antes de aplicar quaisquer opções listadas abaixo.

As seguintes configurações deverão ser acrescentadas à seção `[global]` de `/etc/samba/smb.conf`.

Definir deadtime é útil para impedir que os recursos de um servidor sejam esgotados por um grande número de conexões inativas:

    deadtime = 30

O uso de sendfile pode tornar o uso mais eficiente das CPUs do sistema e fazer com que o Samba seja mais rápido:

    use sendfile = yes

Definir um tamanho mínimo de receivefile permite gravações de cópia zero diretamente dos buffers de soquete de rede no cache de buffer do sistema de arquivos (se disponível). Pode melhorar o desempenho, mas o teste do usuário é recomendado:

    min receivefile size = 16384

Aumentar o tamanho dos buffers de recebimento/envio e as bandeiras de otimização de soquete podem ser úteis para melhorar o rendimento. Recomenda-se testar cada bandeira separadamente, pois pode causar problemas em algumas redes:

    socket options = IPTOS_LOWDELAY TCP_NODELAY IPTOS_THROUGHPUT SO_RCVBUF=131072 SO_SNDBUF=131072

Nota: Ajustes na interface de rede podem ser necessários para que algumas opções funcionem, consulte Sysctl#Networking.

#### Ativar acesso para dispositivos/clientes antigos

Últimas versões do Samba oferecem métodos de autenticação mais antigos e protocolos que continuam sendo usados por clientes antigos (câmeras de vigilância , etc). Estes dispositivos normalmente requerem que o servidor do Samba permita autenticação NTMLv1 e a versão do protocolo NT1, conhecida como CIFS. Para que estes dispositivos trabalhem com a última versão do Samba, você precisa adicionar estes dois parâmetros de configuração dentro da seção `[global]`:

    server min protocol = NT1
    ntlm auth = yes

O acesso anônimo/convidado a um comopartilhamento requer apenas o primeiro parâmetro. Se o dispositivo antigo irá acessar com usuário e senha, você precisará também adicionar a segunda linha.

#### Ativar busca Spotlight

Spotlight permite que os clientes suportados (por exemplo, MacOS Finder) para rapidamente procurar por arquivos compartilhados.

Instale e inicie/ative OpenSearch. Instale fs2es-indexerAUR, configure os diretórios que deseja que sejam indexados em `/etc/fs2es-indexer/config.yml` e inicie/ative `fs2es-indexer.service` para indexação periódica.

Edite `smb.conf` como descrito na wiki do Samba para ativar Spotlight por compartilhamento, e reinicie `smb.service` para aplicar as alterações.

## Cliente

Instale smbclient para uma interface de linha de comando `ftp`. Veja smbclient(1) para os comandos comumente usados.

Para uma alternativa leve (sem suporte para listar ações públicas, etc.), instale cifs-utils que provê `/usr/bin/mount.cifs`.

Dependendo do ambiente desktop, métodos de interface gráfica estarão disponíveis. Veja #Configuração do gerenciador de arquivos para uso com um gerenciador de arquivos.

Nota:

- smbclient requer um arquivo `/etc/samba/smb.conf` (veja #Instalação), o qual você pode criar como um arquivo vazio usando o utilitário `touch`.
- Após a instalação de cifs-utils ou smbclient, carregue o módulo do kernel `cifs` ou reinicie o sistema para prevenir falhas na montagem.

### Listar compartilhamentos públicos

O seguinte comando lista compartilhamentos públicos em um servidor:

    $ smbclient -L hostname -U%

Alternativamente, executar `$ smbtree -N` irá exibir um diagrama de árvore de todos os compartilhamentos. Ele usa consultas de transmissão e, portanto, não é aconselhável em uma rede com muitos computadores, mas pode ser útil para diagnosticar se você tiver o nome de compartilhamento correto. A opção `-N` (`-no-pass`) suprime a solicitação de senha.

Nota: `smbtree` usa SMB1 e NetBIOS, o que significa que eles devem estar habilitados nos servidores e você precisa definir `client min protocol = NT1` em `smb.conf` no cliente. Caso contrário, `smbtree` emitirá uma saída vazia.

### Hostnames NetBIOS/WINS

Clientes Samba lidam com hostnames NetBIOS automaticamente por padrão (o comportamento é controlado pela opção `name resolve order` em `smb.conf`). Outros programas (incluindo `mount.cifs`) tipicamente usam Name Service Switch, o qual não lida com NetBIOS por padrão.

O pacote smbclient fornece um controlador libnss para resolver hostnames NetBIOS. Para usa-lo, instale juntamente com o pacote samba (o qual fornece a daemon winbindd), inicie/ative `winbind.service` e adicione `wins` à linha `hosts` em nsswitch.conf(5):

    /etc/nsswitch.conf

    ...
    hosts: mymachines resolve [!UNAVAIL=return] files myhostname dns wins
    ...

Nota: Devido a um erro em `winbind.service`, você pode ter que modificar o arquivo de unidade conforme descrito neste bug-report

Agora, durante a resolução de host (por exemplo, ao usar `mount.cifs` ou simplesmente `ping netbios-name`), winbindd irá resolver o nome do host enviando consultas usando Serviço de Nomes NetBIOS (NBNS, também conhecido como protocolo WINS).

Por padrão, ele envia uma consulta de transmissão para sua rede local. Caso tenha um servidor WINS, você poderá adicionar `wins server = wins-server-ip` ao `smb.conf` e reiniciar `winbind.service`, então winbindd e outros clientes Samba irão enviar consultas unicast para o IP especificado.

Se desejar resolver sou nome de host local (especificado na opção `netbios name` em `smb.conf`), inicie/ative `nmb.service`, o qual lidará com as consultas recebidas.

Você pode testar a resolução WINS com `nmblookup`. Por padrão, ela transmite consultas para sua rede local independentemente da opção `wins server`.

Observe que a resolução WINS exige tráfego de entrada oriundo da porta 137.

#### Desativar o suporte a NetBIOS/WINS

Quando não se usa resolução de nome de host NetBIOS/WINS, pode ser preferível desativar este protocolo:

    /etc/samba/smb.conf

    [global]
      disable netbios = yes
      dns proxy = no

Finalmente desative/pare `winbind.service`.

### Montagem manual

Monte o compartilhamento usando `mount.cifs` como `type`. Nem todas as opções listadas abaixo são necessárias ou desejáveis:

    # mount --mkdir -t cifs //SERVER/sharename /mnt/mountpoint -o username=username,password=password,workgroup=workgroup,iocharset=utf8,uid=username,gid=group

As opções `uid` e `gid` correspondem ao local (por exemplo, cliente) usuário/grupo de usuários que terão acesso de leitura/gravação no caminho fornecido.

Nota:

- Caso `uid` e `gid` usados não equivalham ao usuário do servidor, as opções `forceuid` e `forcegid` poderão ser úteis. No entanto, observe que as permissões atribuídas a um arquivo quando `forceuid` ou `forcegid` que estão em vigor podem não refletir as permissões reais (do servidor). Veja a seção File And Directory Ownership And Permissions em mount.cifs(8) § FILE AND DIRECTORY OWNERSHIP AND PERMISSIONS para mais informações.
- Para montar um compartilhamento Windows sem autenticação, use `"username=*"`.

Atenção: Usar `uid` e/ou `gid` como opções de montagem podem causar erros de I/O, portanto, em vez disso, é recomendável definir/verificar as permissões e atributos de arquivos corretas.

- `SERVER` — O nome do servidor.
- `sharename` — O diretório compartilhado.
- `mountpoint` — O diretório local onde o compartilhamento será montado.
- `[-o options]` — Veja mount.cifs(8) para mais informações.

Nota:

- Abstenha-se de usar uma `/` seguinte. `//SERVER/sharename/` não irá funcionar.
- Se sua montagem não ficar estável, com engasgos e travamentos, tente ativar uma versão diferente do protocolo SMB com a opção `vers=`. Por exemplo, `vers=2.0` para uma montagem do Windows Vista.
- Se estiver excedendo o tempo limite em um compartilhamento de rede montado com cifs em um desligamento, veja wpa_supplicant#Problem with mounted network shares (cifs) and shutdown.

#### Armazenando senhas de compartilhamentos

Armazenar senhas em um arquivo legível por todos não é recomendado. Um método mais seguro é usar um arquivo de credenciais, por exemplo, dentro de `/etc/samba/credentials`:

    /etc/samba/credentials/share

    username=myuser
    password=mypass

Para o comando de montagem, substitua `username=myuser,password=mypass` por `credentials=/etc/samba/credentials/share`.

O arquivo de credencial deve ser explicitamente legível/gravável por root:

    # chown root:root /etc/samba/credentials
    # chmod 700 /etc/samba/credentials
    # chmod 600 /etc/samba/credentials/share

### Montagem automática

Nota: Talvez seja necessário ativar `systemd-networkd-wait-online.service` ou `NetworkManager-wait-online.service` (dependendo das suas configurações) para habilitar corretamente durante a inicialização.

#### Using NetworkManager and GIO/gvfs

NetworkManager pode ser configurado para executar um script quando ocorrerem alterações no status de rede do sistema. Este script usa o comando gio para que ele monte os compartilhamentos do Samba automaticamente, da mesma forma que seu gerenciador de arquivos faz, conforme explicado abaixo. O script também desmonta com segurança os compartilhamentos do Samba antes que a conexão de rede relevante seja desabilitada, ouvindo os eventos `pre-down` e `vpn-pre-down`. Torne o script executável executable após criá-lo.

    /etc/NetworkManager/dispatcher.d/30-samba.sh

    #!/bin/sh

    # Find the connection UUID with "nmcli con show" in terminal.
    # All NetworkManager connection types are supported: wireless, VPN, wired...
    WANTED_CON_UUID="CHANGE-ME-NOW-9c7eff15-010a-4b1c-a786-9b4efa218ba9"

    # The user the share will be mounted under
    USER="yourusername"
    # The path that appears in your file manager when you manually mount the share you want
    SMB_URL="smb://servername/share"

    # Get runtime user directory. If it does not exist, do nothing and just exit
    XDG_RUNTIME_DIR=$(loginctl show-user --property=RuntimePath --value "$USER") || exit 0

    if [ "$CONNECTION_UUID" = "$WANTED_CON_UUID" ]; then

        # Script parameter $1: network interface name, not used
        # Script parameter $2: dispatched event

        case "$2" in
            "up"|"vpn-up")
                su $USER -c "DBUS_SESSION_BUS_ADDRESS=unix:path=$XDG_RUNTIME_DIR/bus gio mount $SMB_URL"
                ;;
            "pre-down"|"vpn-pre-down")
                su $USER -c "DBUS_SESSION_BUS_ADDRESS=unix:path=$XDG_RUNTIME_DIR/bus gio mount -uf $SMB_URL"
                ;;
        esac
    fi

Cria um link simbólico dentro de `/etc/NetworkManager/dispatcher.d/pre-down` para capturar os eventos `pre-down`:

    # ln -s /etc/NetworkManager/dispatcher.d/30-samba.sh /etc/NetworkManager/dispatcher.d/pre-down.d/30-samba.sh

Nota: Como este script usa o barramento do usuário, ele só funcionará se o usuário tiver sessões ativas. Isso significa que o compartilhamento não será montado automaticamente após a inicialização se a conexão for estabelecida antes de você estar logado.

#### Como uma entrada de montagem

Este á um simples exemplo de uma entrada de montagem no fstab do tipo `cifs` que requer autenticação:

    /etc/fstab

    //SERVER/sharename /mnt/mountpoint cifs _netdev,nofail,username=myuser,password=mypass 0 0

Nota:

- Espaços no nome do compartilhamento deverão ser substituídos por `\040` (código ASCII para espaços, em octal). Por exemplo, `//SERVER/nome do compartilhamento` na linha de comando deve ser `//SERVER/nome\040do\040compartilhamento` em `/etc/fstab`.
- Para permitir que os usuários o montem desde que o ponto de montagem resida em um diretório controlado pelo usuário; ou seja, dentro do diretório home, acrescente a opção de montagem `users`. A opção é users (no plural). Para outros tipos de sistema de arquivos manipulados pelo mount, esta opção geralmente é user; sem o "s".

Tip: Use `x-systemd.automount` caso queira que eles sejam montados apenas após o acesso. Veja fstab (Português)#Sistema de arquivos remoto para detalhes.

#### Como unit do systemd

Crie um novo arquivo `.mount` dentro de `/etc/systemd/system`, por exemplo `mnt-myshare.mount`. Veja systemd.mount(5) para detalhes.

Nota: Certifique-se de que o nome do arquivo corresponda ao ponto de montagem que queira usar. Por exemplo, o nome de unit `mnt-myshare.mount` somente pode ser usado se estiver montando o compartilhamento sob `/mnt/myshare`. Caso contrário, o seguinte erro ocorrerá: `systemd[1]: mnt-myshare.mount: Where= setting does not match unit name. Refusing.`.

`What=` caminho para o compartilhamento

`Where=` caminho para montar o compartilhamento

`Options=` opções de montagem do compartilhamento

Nota:

- Unidades de montagem em rede adquirem automaticamente dependências `After` em `remote-fs-pre.target`, `network.target` e `network-online.target`, e ganham uma dependência `Before` em `remote-fs.target`, a menos que a opção de montagem `nofail` esteja definida. Para este último, uma unidade `Wants` é adicionada também.
- Acrescente `noauto` em `Options` para impedir a montagem automática durante a inicialização (a menos que seja puxado por alguma outra unidade).
- Caso queira usar um nome de host para o servidor que deseja compartilhar (em vez de um endereço IP), adicione `nss-lookup.target` a `After`. Isso pode evitar erros de montagem no momento da inicialização que não surgem ao testar a unidade.

    /etc/systemd/system/mnt-myshare.mount

    [Unit]
    Description=Mount Share at boot

    [Mount]
    What=//server/share
    Where=/mnt/myshare
    Options=_netdev,credentials=/etc/samba/credentials/myshare,iocharset=utf8,rw
    Type=cifs
    TimeoutSec=30

    [Install]
    WantedBy=multi-user.target

Dica:

- Caso o sistema fique inalcançável, acrescente `ForceUnmount=true` em `[Mount]`, permitendo que a montagem seja forçada.
- Se seu compartilhamento tiver grupos com acesso somente leitura, acrescente `uid=username` ou `gid=group` em `Options=`, para especificar seu usuário/grupo permitindo escrita no compartilhamento.

Para usar `mnt-myshare.mount`, inicie a unit e ative a mesma para que execute durante a inicialização do sistema.

##### Montagem automática

Para automaticamente montar um compartilhamento (quando acessado, como autofs), uma maneira é usar a seguinte unit de de montagem automática:

    /etc/systemd/system/mnt-myshare.automount

    [Unit]
    Description=Automount myshare

    [Automount]
    Where=/mnt/myshare

    [Install]
    WantedBy=multi-user.target

Desative/pare a unit `mnt-myshare.mount` e ative/inicie `mnt-myshare.automount` para montagem automática do compartilhamento quando o caminho de montagem estiver sendo acessado.

Dica: Acrescente `TimeoutIdleSec` para ativar a desmontagem automática. Veja systemd.automount(5) para detalhes.

#### smbnetfs

Nota: smbnetfs precisa de uma configuração de servidor Samba intacta. Veja acima como fazer isso.

Primeiro, verifique se você consegue visualizar todos os compartilhamentos que você está interessado em montar:

    $ smbtree -U remote_user

Se isso não funcionar, localize e modifique apropriadamente a seguinte linha em `/etc/samba/smb.conf`:

    domain master = auto

Agora reinicie `smb.service` e `nmb.service`.

Se tudo funcionar como esperado, instale smbnetfs.

Então, adicione a seguinte linha ao `/etc/fuse.conf`:

    user_allow_other

Agora copie o diretório `/etc/smbnetfs/.smb` para o seu diretório home:

    $ cp -a /etc/smbnetfs/.smb ~

Então crie um link para `smb.conf`:

    $ ln -sf /etc/samba/smb.conf ~/.smb/smb.conf

Caso um usuário e senha sejam solicitados para acessar alguma das pastas do compartilhamento, edite `~/.smb/smbnetfs.auth` para incluir uma ou mais entradas, assim:

    ~/.smb/smbnetfs.auth

    auth			"hostname" "username" "password"

Também é possível adicionar entradas para hosts específicos a serem montados pelo smbnetfs, se necessário. Mais detalhes podem ser encontrados em `~/.smb/smbnetfs.conf`.

Se estiver usando Dolphin ou GNOME Files, talvez queira adicionar o seguinte ao `~/.smb/smbnetfs.conf` para evitar erros "disco cheio" já que smbnetfs por padrão relatará 0 bytes de espaço livre:

    ~/.smb/smbnetfs.conf

    free_space_size 1073741824

Ao terminar a configuração, será necessário executar

    $ chmod 600 ~/.smb/smbnetfs.*

Caso contrário, smbnetfs reclamará de 'permissões de arquivo de configuração inseguras'.

Finalmente, para montar sua vizinhança de rede Samba em um diretório de sua escolha, chame

    $ smbnetfs mount_point

##### Daemon

O pacote Arch Linux também mantém um modo de operação adicional em todo o sistema para smbnetfs. Para habilitá-lo, você precisa fazer as referidas modificações no diretório `/etc/smbnetfs/.smb`.

Então, você podera iniciar/ativar a daemon `smbnetfs` como o usual. O ponto de montagem de todo o sistema está em `/mnt/smbnet/`.

#### autofs

Veja Autofs para informações sobre montagem automática baseada em kernel para Linux.

### Configuração do gerenciador de arquivos

#### GNOME Files, Nemo, Caja, Thunar e PCManFM

Para acessar compartilhamentos samba pelos gerenciadores de arquivos GNOME Files, Nemo, Caja, Thunar ou PCManFM, instale o pacote gvfs-smb.

Pressione `Ctrl+l` e insira `smb://nome_do_servidor/compartilhamento` na barra de locais para acessar seu compartilhamento.

O compartilhamento montado estará provavelmente em `/run/user/seu_UID/gvfs` ou `~/.gvfs` no sistema de arquivos.

#### KDE

Aplicações do KDE (como Dolphin) tem a capacidade de navegar por compartilhamentos do Samba embutida. Use o caminho `smb://nome_do_servidor/compartilhamento` para navegar pelos arquivos. Caso deseje acessar arquivos por uma aplicação que não seja do KDE, você pode instalar kio-fuse.

Para usar uma interface gráfica nas Configurações do Sistema KDE, você precisará instalar o pacote kdenetwork-filesharing.

#### Outros ambientes gráficos

Existem vários programas úteis, mas eles podem precisar ter pacotes criados para eles. Isso pode ser feito com o sistema de compilação do pacote Arch. Uma vantagem desses outros é que eles não exigem que um ambiente específico seja instalado para suportá-los e, portanto, trazem menos bagagem.

- pyneighborhoodAUR
- LinNeighborhood, RUmba, xffm-samba plugin para Xffm não estão disponíveis nos repositórios oficiais ou no AUR. Como eles não são oficialmente (nem mesmo extraoficialmente suportados), eles podem estar obsoletos e poderão sequer funcionar.

## Dicas e truques

### Descobrindo compartilhamentos de rede

Se nada for conhecido sobre outros sistemas na rede local e ferramentas automatizadas como smbnetfs não estiverem disponíveis, você poderá investigar manualmente os compartilhamentos do Samba.

Primeiro, instale os pacotes nmap e smbclient.

Use nmap para varrer sua rede local para encontrar sistemas com a porta TCP 445 aberta, que é a porta usada pelo protocolo SMB. Observe que talvez seja necessário usar `-Pn` ou definir um tipo de varredura ping personalizada (por exemplo, `-PS445`) porque sistemas Windows são geralmente protegidos por firewall.

    $ nmap -p 445 "192.168.1.*"

    Starting Nmap 7.92 ( https://nmap.org ) at 2022-03-13 12:00 UTC
    Nmap scan report for 192.168.1.1
    Host is up (0.0011s latency).

    PORT    STATE  SERVICE
    445/tcp open  microsoft-ds

    Nmap scan report for 192.168.1.2
    Host is up (0.00011s latency).

    PORT    STATE SERVICE
    445/tcp open  microsoft-ds

    Nmap done: 256 IP addresses (2 hosts up) scanned in 2.45 seconds

O primeiro resultado é o outro sistema; o segundo é o cliente de onde esta verificação foi realizada.

Agora você pode se conectar a esses endereços IP diretamente, mas se quiser usar nomes de host NetBIOS, você pode usar nmblookup(1) para verificar os nomes NetBIOS. Observe que isso não funcionará se o NetBIOS estiver desabilitado no servidor.

    $ nmblookup -A 192.168.1.1

    Looking up status of 192.168.1.1
            PUTER           <00> -         B <ACTIVE>
            HOMENET         <00> - <GROUP> B <ACTIVE>
            PUTER           <03> -         B <ACTIVE>
            PUTER           <20> -         B <ACTIVE>
            HOMENET         <1e> - <GROUP> B <ACTIVE>
            USERNAME        <03> -         B <ACTIVE>
            HOMENET         <1d> -         B <ACTIVE>
            MSBROWSE        <01> - <GROUP> B <ACTIVE>

Independentemente da saída, obser em <20>, que corresponde ao host com serviços abertos.

Use smbclient(1) para listar quais serviços são compartilhados nesses sistemas. Você pode usar o nome do host NetBIOS (`PUTER` neste exemplo) em vez do IP quando disponível. Se for solicitada uma senha, pressionar enter ainda deve exibir a lista:

    $ smbclient -L \\192.168.1.1

    Sharename       Type      Comment
    ---------       ----      -------
    MY_MUSIC        Disk
    SHAREDDOCS      Disk
    PRINTER$        Disk
    PRINTER         Printer
    IPC$            IPC       Remote Inter Process Communication

    Server               Comment
    ---------            -------
    PUTER

    Workgroup            Master
    ---------            -------
    HOMENET               PUTER

### Controle remoto de um computador Windows

Samba oferece uma coletânea de ferramentas para comunicação com Windows. Isso pode ser útil se o acesso a um computador Windows por meio da área de trabalho remota não for uma opção, como mostrado em alguns exemplos.

Enviar o comando shutdown com comentário:

    $ net rpc shutdown -C "comment" -I IPADDRESS -U USERNAME%PASSWORD

Em vez disso, um desligamento forçado pode ser invocado alterando -C com comentário por um simples -f. Para um reinício, somente adicione -r, seguida de um -C ou -f.

Parar e reiniciar serviços:

    $ net rpc service stop SERVICENAME -I IPADDRESS -U USERNAME%PASSWORD

Para ver todos os possíveis comandos da gama net rpc:

    $ net rpc

## Solucionando problemas

### Falha ao iniciar o servidor Samba SMB/CIFS

Possíveis soluções:

- Verifique erros de sintaxe no arquivo `smb.conf` com testparm(1).
- Defina permissões corretas para `/var/cache/samba/` e reinicie `smb.service`:

    # chmod 0755 /var/cache/samba/msg

### Problemas de permissão com SELinux

SELinux não permite que o samba acesse os diretórios pessoais do usuário por padrão, para resolver isso, execute:

    # setsebool -P samba_enable_home_dirs 1

Similarmente, `samba_export_all_ro` e `samba_export_all_rw` fazem com que Samba seja capaz de ler ou "ler e gravar" todos os arquivos.

### Problemas de permissão com AppArmor

Se estiver usando um caminho de compartilhamento localizado fora de um diretório home ou de compartilhamentos do usuário, coloque-o na lista de permissões em `/etc/apparmor.d/local/usr.sbin.smbd`. Por exemplo:

    /etc/apparmor.d/local/usr.sbin.smbd

    "/data/" rk,
    "/data/**" lrwk,

### Dialeto não especificado na montagem

O cliente está usando uma versão não suportada do SMB/CIFS que é requerida pelo servidor.

Veja #Restringir protocolos para maior segurança para mais informações.

### Impossível sobrescrever arquivos, erros de permissão

The factual accuracy of this article or section is disputed.

Reason: Um usuário deve definir/verificar as permissões do servidor/cliente, em vez de usar sinalizadores incorretos/possivelmente inseguros. (Discuss in Talk:Samba (Português))

Possíveis soluções:

- Acrescente a opção de montagem `nodfs` à entrada no `/etc/fstab`.
- Adicione `msdfs root = no` à seção `[global]` do `/etc/samba/smb.conf`, no servidor.

### Os clientes Windows continuam pedindo senha mesmo quando os compartilhamentos do Samba são criados com permissões de convidado

Defina `map to guest` dentro da seção `global` de `/etc/samba/smb.conf`:

    map to guest = Bad Password

Se estiver usando Samba inferior a 4.10.10, use `Bad User` em vez de `Bad Password`.

### Problemas de conectividade com Windows 7 - mount error(12): cannot allocate memory

Um bug conhecido do Windows 7 que causa "mount error(12): cannot allocate memory" em um compartilhamento cifs perfeito no Linux, no fim das contas pode ser corrigido definindo algumas chaves de registro na caixa do Windows da seguinte maneira:

- `HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\LargeSystemCache` (set to `1`)
- `HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\Size` (set to `3`)

Como alternativa, inicie o prompt de comando no modo administrador e execute o seguinte:

    reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v "LargeSystemCache" /t REG_DWORD /d 1 /f
    reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v "Size" /t REG_DWORD /d 3 /f

Siga um destes procedimentos para que as configurações tenham efeito:

- Reinicie o Windows
- Reinicie o serviço de servidor via services.msc
- A partir de um prompt de comando, execute: 'net stop lanmanserver' e 'net start lanmanserver' - O servidor irá reiniciar automaticamente depois de pará-lo.

Nota: Uma pesquisa no Google irá revelar outro ajuste recomendando aos usuários que é adicionar uma chave modificando o tamanho "IRPStackSize". Isso é incorreto para corrigir esse problema no Windows 7. Não faça isso.

Artigo original.

### Problemas de conectividade com Windows 10 1709 e superiores - "Windows cannot access" 0x80004005

Este erro afeta algumas máquinas que executam o Windows 10 versão 1709 e posterior. Não está relacionado à desativação do SMB1 nesta versão, mas ao fato de a Microsoft desabilitar logons inseguros para convidados nesta versão para alguns, mas não para outros.

Para corrigir, abra o editor de Diretivas de Grupo (`gpedit.msc`). Navegue até Configuração do computador\modelos administrativos\rede\Estação de trabalho Lanman > Habilitar logons de convidados inseguros e habilite-o. Como alternativa, altere o seguinte valor no registro:

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters]
    "AllowInsecureGuestAuth"=dword:1

### Erro: Failed to retrieve printer list: NT_STATUS_UNSUCCESSFUL

Se você é um usuário doméstico e usa o samba apenas para compartilhamento de arquivos de um servidor ou NAS, provavelmente não está interessado em compartilhar impressoras por meio dele. Nesse caso, você pode evitar que esse erro ocorra adicionando as seguintes linhas ao seu `/etc/samba/smb.conf`:

    /etc/samba/smb.conf

    [global]
      load printers = No
      printing = bsd
      printcap name = /dev/null
      disable spoolss = Yes

Reinicie o serviço do samba, `smb.service`, e então verifique os logs:

    # cat /var/log/samba/smbd.log

e o erro não deverá mais estar aparecendo.

### Falha ao compartilhar uma pasta

Isso significa que enquanto você está compartilhando uma pasta do Dolphin (gerenciador de arquivos) e tudo parece bem no início, depois de reiniciar o Dolphin o ícone de compartilhamento desapareceu da pasta compartilhada, e também algumas saídas como esta do terminal (Konsole):

    ‘net usershare’ returned error 255: net usershare: usershares are currently disabled

Para corrigir isto, ative o compartilhamento do usuário conforme descrito em #Ativar compartilhamentos de usuário.

### "Nevagação" da rede falha com "Failed to retrieve share list from server"

E você está usando um firewall (iptables) porque não confia na sua rede local (escola, universidade, hotel). Isso pode ser devido ao seguinte: Quando o smbclient está navegando na rede local, ele envia uma solicitação de transmissão na porta udp 137. Os servidores na rede respondem ao seu cliente, mas como o endereço de origem desta resposta é diferente do destino endereço que o iptables viu ao enviar a solicitação para a listagem, o iptables não reconhecerá a resposta como "ESTABLISHED" ou "RELATED" e, portanto, o pacote será descartado. Uma possível solução é adicionar:

    iptables -t raw -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns

às definições de seu iptables.

Para Uncomplicated Firewall, será preciso adicionar `nf_conntrack_netbios_ns` ao final da seguinte linha em `/etc/default/ufw`

    IPT_MODULES="nf_conntrack_ftp nf_nat_ftp nf_conntrack_irc nf_nat_irc"

e então executar o seguinte comando como root:

    echo 1 > /proc/sys/net/netfilter/nf_conntrack_helper
    ufw allow CIFS
    ufw reload

Para tornar esta alteração persistente às reinicializações, adicione a seguinte linha ao final de `/etc/ufw/sysctl.conf`:

    net.netfilter.nf_conntrack_helper=1

### Protocolo de negociação falhou: NT_STATUS_INVALID_NETWORK_RESPONSE

O cliente provavelmente não tem acesso a compartilhamentos. Certifique-se de que o endereço IP dos clientes esteja na linha `hosts allow =` em `/etc/samba/smb.conf`.

Um outro problema pode ser o fato de que o cliente usa uma versão de protocolo inválida. Para verificar isso, tente conectar com o `smbclient` onde você especifica a versão máxima do protocolo manualmente:

    $ smbclient -U <user name> -L //<server name> -m <protocol version: e. g. SMB2> -W <domain name>

Se o comando foi bem-sucedido, crie um arquivo de configuração:

    ~/.smb/smb.conf

    [global]
      workgroup = <domain name>
      client max protocol = SMB2

### Falha na conexão com o servidor: (Erro NT_STATUS_UNSUCCESSFUL)

Você provavelmente está passando um nome de servidor errado para `smbclient`. Para descobrir o nome do servidor, execute `hostnamectl` no servidor e veja a linha "Transient hostname"

### Falha na conexão com o servidor: (Erro NT_STATUS_CONNECTION_REFUSED)

Certifique-se de que o servidor foi iniciado. Os diretórios compartilhados devem existir e ser acessíveis.

### Falha com o protocolo de negociação: NT_STATUS_CONNECTION_RESET

Provavelmente o servidor está configurado para não aceitar o protocolo SMB1. Adicione a opção `client max protocol = SMB2` em `/etc/samba/smb.conf`. Ou simplesmente passe o argumento `-m SMB2` para `smbclient`.

### Erro de senha quando as credenciais corretas são informadas (error 1326)

Samba 4.5 possui autenticação NTLMv1 desativada por padrão. É recomendável instalar as atualizações mais recentes disponíveis em clientes e negar acesso a clientes não suportados.

Se você ainda precisar de suporte para clientes muito antigos sem suporte ao NTLMV2 (por exemplo, Windows XP), é possível forçar a ativação do NTLMV1, embora isso não seja recomendável, por razões de segurança:

    /etc/samba/smb.conf

    [global]
      lanman auth = yes
      ntlm auth = yes

Se os clientes NTLMV2 não conseguirem autenticar quando o NTLMV1 tiver sido ativado, crie o seguinte arquivo no cliente:

    /home/user/.smb/smb.conf

    [global]
      sec = ntlmv2
      client ntlmv2 auth = yes

Esta mudança também afeta os compartilhamentos de samba montados com mount.cifs. Se após a atualização para o Samba 4.5 sua montagem falhar, adicione a opção sec=ntlmssp ao seu comando de montagem, por exemplo.

    mount.cifs //server/share /mnt/point -o sec=ntlmssp,...

Veja a página de manual do mount.cifs(8): ntlmssp - Use o hash de senha NTLMv2 encapsulado como mensagem Raw NTLMSSP. O padrão nas versões principais do kernel anteriores à v3.8 era sec=ntlm. Na v3.8, o padrão foi alterado para sec=ntlmssp.

### Mapeando com caracteres reservador do Windows

Iniciando com o kernel 3.18, o módulo cifs usa a opção "mapposix" por padrão. Ao montar um compartilhamento usando extensões unix e uma configuração padrão do Samba, arquivos e diretórios contendo um dos sete caracteres reservados do Windows `: \ * < > ?` estão listados, mas não podem ser acessados.

Possíveis soluções são:

- Usar a não documentada opção de montagem `nomapposix` para cifs

    # mount.cifs //server/share /mnt/point -o nomapposix

- Configurar o Samba para remapear o estilo de caracteres `mapposix` ("SFM", Services for Mac) para os nativos corretos usando fruit

    /etc/samba/smb.conf

    [global]
      vfs objects = catia fruit
      fruit:encoding = native

- Manualmente remapear os caracteres proibidos usando catia

    /etc/samba/smb.conf

    [global]
      vfs objects = catia
      catia:mappings = 0x22:0xf022, 0x2a:0xf02a, 0x2f:0xf02f, 0x3a:0xf03a, 0x3c:0xf03c, 0x3e:0xf03e, 0x3f:0xf03f, 0x5c:0xf05c, 0x7c:0xf07c, 0x20:0xf020

A última abordagem (usando catia ou fruit) tem a desvantagem de filtrar arquivos com caracteres não imprimíveis.

### Pasta compartilhada dentro do ambiente gráfico não está disponível para convidados

Esta seção pressupõe:

1. Compartilhamentos do usuário são configurados seguindo a seção anterior
2. Uma pasta compartilhada foi criada como um usuário não root da interface gráfica
3. O acesso de convidados foi definido para a pasta compartilhada durante a criação
4. O serviço Samba foi reiniciado pelo menos uma vez desde a última modificação do arquivo `/etc/samba/smb.conf`

Apenas para fins de esclarecimento, nas seguintes subseções assume-se:

- A pasta compartilhada está localizada dentro do caminho do diretório inicial do usuário (`/home/yourUser/Shared`)
- O nome da pasta compartilhada é MySharedFiles
- O acesso de convidado é somente leitura.
- Os usuários do Windows acessarão o conteúdo da pasta compartilhada sem o prompt de login

#### Verifique a correta configuração do samba

Execute o seguinte comando em um terminal para testar a correção do arquivo de configuração:

    $ testparm

#### Verifique a criação correta da pasta compartilhada

Execute os seguintes comandos a partir de um terminal:

    $ cd /var/lib/samba/usershare
    $ ls

Se tudo estiver bem, você notará um arquivo chamado `mysharedfiles`

Leia o conteúdo do arquivo usando o seguinte comando:

    $ cat mysharedfiles

A saída do terminal deve exibir algo assim:

    /var/lib/samba/usershare/mysharedfiles

    path=/home/yourUser/Shared
    comment=
    usershare_acl=S-1-1-0:r
    guest_ok=y
    sharename=MySharedFiles

#### Verifique o acesso à pasta pelo convidado

Execute o seguinte comando a partir de um terminal. Se for solicitada uma senha, basta pressionar Enter:

    $ smbclient -L localhost

Se tudo estiver bem, MySharedFiles deve ser exibido na coluna `Sharename`

Execute o seguinte comando para acessar a pasta compartilhada como convidado (login anônimo)

    $ smbclient -N //localhost/MySharedFiles

Se tudo estiver bem, o prompt do cliente samba será exibido:

    smb: \>

No prompt do samba, verifique se o convidado pode listar o conteúdo do diretório:

    smb: \> ls

Se o erro `NTFS_STATUS_ACCESS_DENIED` for exibido, o problema provavelmente está nas permissões do diretório Unix. Certifique-se de que seu usuário do samba tenha acesso à pasta e a todas as pastas pai. Você pode testar isso usando sudo no usuário e tentar listar o diretório de montagem e todos os seus pais.

### Mount error: Host is down

Este erro pode ser visto ao montar compartilhamentos de servidores Synology NAS. Use a opção de montagem `vers=1.0` para resolvê-lo.

Nota: A versão 1 do SMB é conhecida por ter vulnerabilidades de segurança e foi usada em ataques de ransomware bem-sucedidos.

### Software caused connection abort

Os gerenciadores de arquivos que utilizam gvfs-smb podem mostrar o erro `Software caused connection abort` ao gravar um arquivo em um compartilhamento/servidor. Isso pode ser devido ao servidor executando SMB/CIFS versão 1, que muitos roteadores usam para compartilhamento de unidade USB (por exemplo, roteadores Belkin). Para gravar nesses compartilhamentos, especifique a versão CIFS com a opção `vers=1.0`. Por exemplo:

    /etc/fstab

    //SERVER/sharename /mnt/mountpoint cifs _netdev,guest,file_mode=0777,dir_mode=0777,vers=1.0 0 0

Isso também pode acontecer após atualizar o Samba para a versão 4.11, que desativa o SMB1 como padrão, e acessar qualquer compartilhamento do Samba. Você pode reativá-lo adicionando

    /etc/samba/smb.conf

    [global]
    client min protocol = CORE

### Problemas de conexão (devido a erros de autenticação)

Certifique-se de não deixar nenhum caractere de espaço antes de seu nome de usuário no arquivo de configuração do cliente Samba da seguinte forma:

    ~/.samba

    username= user
    password=pass

O formato correto é o seguinte:

    ~/.samba

    username=user
    password=pass

### Windows 1709 ou mais recente não mostra o servidor Samba na rede

Com o Windows 10 versão 1511, o suporte para SMBv1 e, portanto, a descoberta de dispositivos NetBIOS foi desabilitado por padrão. Dependendo da edição real, as versões posteriores do Windows a partir da versão 1709 ("Fall Creators Update") não permitem mais a instalação do cliente SMBv1. Isso faz com que os hosts que executam o Samba não sejam listados nas visualizações "Rede (Vizinhança)" do Explorer. Embora não haja problemas de conectividade e o Samba ainda funcione bem, os usuários podem querer que seus hosts Samba sejam listados pelo Windows automaticamente. wsdd implementa uma daemon de host do Web Service Discovery. Isso permite que hosts (Samba), como seu dispositivo NAS local, sejam encontrados por Clientes de Descoberta de Serviços da Web, como o Windows. As configurações padrão devem funcionar para a maioria das instalações, tudo o que você precisa fazer é ativar o `wsdd.service`.

Se estiver com a configuração padrão, anunciar-se na rede com o nome do host da máquina no grupo "WORKGROUP" deve ser tudo o que você precisa na maioria dos casos. Caso seja necessário, você pode alterar as opções de configuração passando argumentos adicionais para wsdd adicionando-os em `/etc/conf.d/wsdd` (consulte a página de manual para wsdd para obter detalhes).

wsdd2AUR faz a mesma coisa, mas é escrito em C em vez de Python. Por padrão, ele procurará os valores `netbios name` e `workgroup` em `smb.conf`.

### Arquivos IOS não podem mais ser copiados para o compartilhamento Samba no Arch Linux começando com IOS 14.5

Começando com o IOS 14.5 tentando transferir de um dispositivo executando o IOS usando o aplicativo "Files" para um compartilhamento de samba no Arch Linux resultará no erro:

    The operation couldn't be completed
    Operation canceled

Para corrigir esse problema, adicione o seguinte à seção global do seu `smb.conf` e reinicie `smb.service`. Comentário opcional:

    ## addition for IOS Files transfer-to server
    vfs object = fruit streams_xattr

Veja https://apple.stackexchange.com/q/424681 Apple.Stackexchange.com - "The operation couldn't be completed"/"Operation canceled" error message when saving to a Samba share via Files app.

## Veja também

- Official website
- Samba: An Introduction
- Samba 3.2.x HOWTO and Reference Guide (outdated but still most extensive documentation)
- Wikipedia
- Gentoo:Samba/Guide
- Debian:Samba/ServerSimple
- KSMBD[link inativo 2023-06-17 ⓘ] - A linux kernel server which implements SMB3 protocol in kernel space for sharing files over network.

Categories:

- Network sharing (Português)
- Servers (Português)

Hidden categories:

- Pages or sections flagged with Template:Accuracy
- Pages with dead links