Guia de configuração do Samba não-PDC
Se você pesquisar por "smb.conf" no Google achará uma infinidade de tutoriais mostrando arquivos gigantes de configuração, sempre com uma tonelada de opções inúteis e obsoletas (quando não prejudiciais), que são passados adiante por blogs, fóruns, sites, sem a mínima análise do seu conteúdo.
Minha motivação aqui é ir contra a maré do copiar/colar e explicar uma configuração enxuta, baseada em versões recentes do Samba (4.3.0 ou superior), para o comum cenário de tê-lo servindo algumas pastas na rede da sua casa ou escritório em um grupo de trabalho, sem atuar como controlador de domínio (PDC).
O primeiro conselho é não ir atrás dos
Comecemos por:
Vamos a cada opção:
Grupo de trabalho.
Retira a descrição do servidor (preferência pessoal).
Logs são enviados para o journal. Em distribuições sem systemd, use
Essa é uma opção importante. Por padrão, o Samba usa o modo de
Não lista impressoras eventualmente presentes.
Definem globalmente as permissões Unix dos arquivos e pastas criadas pelos clientes. Estamos dando permissão total para o dono e grupo e nenhuma para os outros. Para os arquivos, não estamos configurando a permissão de execução — nada pior que ao tentar abrir qualquer coisa através do Linux ter que responder se quer "executar ou abrir" o arquivo. Não deixa de ser uma medida de segurança também.
Aloca arquivos com
Faz o Samba emular a semântica do NTFS (atributos DOS, carimbos de data/hora) usando atributos estendidos (xattr) do sistema de arquivos Linux. EXT4, XFS e Btrfs têm atributos estendidos habilitados por padrão. Se você usar outro sistema de arquivos, confira suas opções de montagem para ver como habilitar. O Samba cria o atributo
Arquivo criados com um ponto no início do nome não são ocultados pelo Samba. Sem essa opção, é certo que cedo ou tarde seus usuários reclamarão que alguns arquivos "sumiram" do servidor. No mundo Windows, ponto no início do nome nada significa. Portanto, siga a semântica do Windows para evitar dor de cabeça.
Suporta apenas autenticação NTLMv2. O parâmetro
Crie a pasta e ajuste as permissões. A pasta terá como dono
Se você usar o Fedora, CentOS e derivados, é necessário definir o rótulo correto na pasta compartilhada para o SELinux permitir o acesso:
(ver Colocar o Samba a funcionar com o SELinux)
Pronto. Você tem agora o Samba com uma configuração enxuta e otimizada para um compartilhamento público sem autenticação.
COMPARTILHAMENTO PROTEGIDO POR SENHA
Para adicionar um compartilhamento protegido por senha, adicione o seguinte bloco ao
A ideia é ter dentro do compartilhamento "Restrito" diversas pastas, sendo cada uma acessível apenas por grupos específicos. Também não será permitido aos usuários alterar o nome da pasta raiz na qual possuam permissão de escrita.
Criei os grupos "estagiarios" e "funcionarios" e pastas com o mesmo nome, associando-as aos grupos. Visto que estamos usando
A proibição de alteração das pastas pai nós conseguimos com a permissão
Ao usar compartilhamentos com autenticação, é importante adicionar a opção
Outro cenário útil é ter a pasta pública somente leitura para todos, com exceção de determinados usuários e/ou grupos. Para conseguir esse resultado, remova
Por fim crie os usuários pertencendo aos grupos desejados:
SEGURANÇA DOS PROTOCOLOS DE AUTENTICAÇÃO
A partir do Samba 4.5.0, autenticação NTLMv1 passou a ser desativada no servidor (
A propósito, em muitos dos arquivos
Windows 10 1709 descontinuou o inseguro protocolo SMB 1.0, que não vem mais instalado. Do Samba 4.0.0 para cima, SMB 2.0 e 3.0 são suportados e o servidor negocia com o cliente a melhor versão a ser usada na conexão. Não use a opção
REFERÊNCIAS
Recomendo o livro Using Samba, 3rd Edition, de Gerald Carter, Jay Ts e Robert Eckstein, lançado em 2007 pela O'Reilly. Apesar de ser um pouco antigo (usa como referência o Samba 3.0.22), é um livro bem escrito e com muita informação útil.
Minha motivação aqui é ir contra a maré do copiar/colar e explicar uma configuração enxuta, baseada em versões recentes do Samba (4.3.0 ou superior), para o comum cenário de tê-lo servindo algumas pastas na rede da sua casa ou escritório em um grupo de trabalho, sem atuar como controlador de domínio (PDC).
O primeiro conselho é não ir atrás dos
smb.conf
gigantes. Faça justamente o contrário: a partir de uma configuração mínima, vá adaptando até chegar no que for ideal. As opções padrão que o Samba usa para o que não estiver especificado no arquivo são na maioria dos casos suficientes e otimizadas. E use a ferramenta testparm
, que é muito útil para enxugar baboseira do arquivo.Comecemos por:
[global] workgroup = GRUPO server string = logging = systemd map to guest = Bad User load printers = No create mask = 0660 directory mask = 0770 strict allocate = Yes store dos attributes = Yes hide dot files = No ntlm auth = No [Publico] path = /srv/samba/pub read only = No guest ok = Yes
Vamos a cada opção:
workgroup = GRUPO
Grupo de trabalho.
server string =
Retira a descrição do servidor (preferência pessoal).
logging = systemd
Logs são enviados para o journal. Em distribuições sem systemd, use
logging = syslog
.map to guest = Bad User
Essa é uma opção importante. Por padrão, o Samba usa o modo de
security = USER
, que força todos os acessos ao servidor serem autenticados. Porém isso impossibilita compartilhamentos públicos para convidados, já que o Samba bloqueia todos os acessos que não confiram com um usuário local do servidor. A opção map to guest = Bad User
faz o Samba, quando o usuário não existir no servidor, autenticar usando a conta configurada em guest account
(que por padrão usa nobody
). Com isso, usuários que possuem conta local no servidor são autenticados normalmente e os que não possuem passam a ter acesso apenas aos compartilhamentos com permissão para convidados, ou seja, que tenham guest ok = Yes
.load printers = No
Não lista impressoras eventualmente presentes.
create mask = 0660
directory mask = 0770
Definem globalmente as permissões Unix dos arquivos e pastas criadas pelos clientes. Estamos dando permissão total para o dono e grupo e nenhuma para os outros. Para os arquivos, não estamos configurando a permissão de execução — nada pior que ao tentar abrir qualquer coisa através do Linux ter que responder se quer "executar ou abrir" o arquivo. Não deixa de ser uma medida de segurança também.
strict allocate = Yes
Aloca arquivos com
posix_fallocate()
/fallocate()
/fallocate64()
. Melhora o desempenho de escrita e diminui a fragmentação (sim, sistemas de arquivos Linux fragmentam, ao contrário do mito que é muito difundido por aí). Atenção: só use essa opção com sistemas de arquivos que suportem pré-alocação persistente, como o EXT4, XFS e Btrfs. Nos demais, pode causar perda de desempenho.store dos attributes = Yes
Faz o Samba emular a semântica do NTFS (atributos DOS, carimbos de data/hora) usando atributos estendidos (xattr) do sistema de arquivos Linux. EXT4, XFS e Btrfs têm atributos estendidos habilitados por padrão. Se você usar outro sistema de arquivos, confira suas opções de montagem para ver como habilitar. O Samba cria o atributo
user.DOSATTRIB
, que você pode visualizar com getfattr -n user.DOSATTRIB <arquivo|pasta>
. Habilitada por padrão desde a versão 4.9.0.hide dot files = No
Arquivo criados com um ponto no início do nome não são ocultados pelo Samba. Sem essa opção, é certo que cedo ou tarde seus usuários reclamarão que alguns arquivos "sumiram" do servidor. No mundo Windows, ponto no início do nome nada significa. Portanto, siga a semântica do Windows para evitar dor de cabeça.
ntlm auth = No
Suporta apenas autenticação NTLMv2. O parâmetro
No
foi renomeado a partir do Samba 4.7.0 para ntlmv2-only
(No
continua sendo aceito).Crie a pasta e ajuste as permissões. A pasta terá como dono
nobody:nobody
(a opção -m
do mkdir
apenas aplica-se ao último diretório quando -p
está presente).# mkdir -p -m 0750 /srv/samba/pub # chown nobody:nobody /srv/samba/pub
Se você usar o Fedora, CentOS e derivados, é necessário definir o rótulo correto na pasta compartilhada para o SELinux permitir o acesso:
(ver Colocar o Samba a funcionar com o SELinux)
# semanage fcontext -a -t samba_share_t '/srv/samba(/.*)?' # restorecon -FRv /srv/samba
Pronto. Você tem agora o Samba com uma configuração enxuta e otimizada para um compartilhamento público sem autenticação.
COMPARTILHAMENTO PROTEGIDO POR SENHA
Para adicionar um compartilhamento protegido por senha, adicione o seguinte bloco ao
smb.conf
:[Restrito] path = /srv/samba/priv valid users = +estagiarios +funcionarios read only = No
A ideia é ter dentro do compartilhamento "Restrito" diversas pastas, sendo cada uma acessível apenas por grupos específicos. Também não será permitido aos usuários alterar o nome da pasta raiz na qual possuam permissão de escrita.
# groupadd estagiarios # groupadd funcionarios # mkdir -p -m 0770 /srv/samba/priv/{estagiarios,funcionarios} # chgrp estagiarios /srv/samba/priv/estagiarios # chgrp funcionarios /srv/samba/priv/funcionarios # restorecon -FRv /srv/samba
Criei os grupos "estagiarios" e "funcionarios" e pastas com o mesmo nome, associando-as aos grupos. Visto que estamos usando
create mask = 0660
e directory mask = 0770
, arquivos e pastas terão permissão de escrita para o grupo primário. Isso permite que todos os usuários de um mesmo grupo façam alterações no compartilhamento no qual têm permissão de acesso.A proibição de alteração das pastas pai nós conseguimos com a permissão
0755
na pasta raiz do compartilhamento (/srv/samba/priv
) — o umask
padrão da conta root em todas as distribuições é 0022
, assim o mkdir
criará diretórios com permissão 0755
por padrão. Levando em conta que ela tem como dono root:root
, todos os acessos provenientes dos usuários cairão na permissão dos outros, que está configurada para somente leitura.Ao usar compartilhamentos com autenticação, é importante adicionar a opção
guest only = Yes
aos compartilhamentos que tenham guest ok = Yes
, pois do contrário os arquivos e pastas criadas neles pelos usuários não-convidados (os que tiverem uma conta local no Samba) não usarão a conta nobody
e será uma salada de proprietários/permissões. Como o objetivo do compartilhamento público é ser acessível a todos, tanto usuários autenticados quanto convidados, guest only = Yes
resolve o problema forçando todos os acessos à pasta pública serem feitos através da conta nobody
.Outro cenário útil é ter a pasta pública somente leitura para todos, com exceção de determinados usuários e/ou grupos. Para conseguir esse resultado, remova
read only = No
(que equivalerá a read only = Yes
) e adicione a opção write list = +grupo
(permite escrita a um grupo), ou write list = usuario
(permite escrita a um usuário). Você pode especificar mais de um grupo ou usuário (basta colocá-los um ao lado do outro separados por espaços ou vírgulas) e também misturar usuários e grupos, apenas tendo o cuidado de colocar o sinal "+" antes do nome dos grupos.Por fim crie os usuários pertencendo aos grupos desejados:
# useradd -M -g estagiarios -s /sbin/nologin fulano # useradd -M -g funcionarios -s /sbin/nologin beltrano # smbpasswd -a fulano # smbpasswd -a beltrano
SEGURANÇA DOS PROTOCOLOS DE AUTENTICAÇÃO
A partir do Samba 4.5.0, autenticação NTLMv1 passou a ser desativada no servidor (
ntlm auth = No
). Na versão 4.7.0, o parâmetro No
foi renomeado para ntlmv2-only
, para corretamente refletir seu comportamento (aceitar apenas NTLMv2). Como resultado, restringe a gama de clientes suportados à família Windows NT a partir do NT 4.0 SP4 e Samba 3.0.0 e superiores. Windows 9x/ME e DOS ficam de fora: nem NTLMv1 suportam; trabalham com LANMAN, que não possui segurança alguma e é desativado por padrão desde o Samba 3.2.0.A propósito, em muitos dos arquivos
smb.conf
gigantes que achamos por aí, o método de autenticação LANMAN está ativado no servidor (lanman auth = Yes
). É uma péssima configuração de segurança. Se você tiver compartilhamentos que exijam autenticação, não existe motivo para arruinar a segurança para dar suporte a sistemas operacionais obsoletos cuja probabilidade de você vir a usar é zero. Felizmente essa maléfica configuração não tem efeito caso a autenticação NTLMv1 esteja desativada.Windows 10 1709 descontinuou o inseguro protocolo SMB 1.0, que não vem mais instalado. Do Samba 4.0.0 para cima, SMB 2.0 e 3.0 são suportados e o servidor negocia com o cliente a melhor versão a ser usada na conexão. Não use a opção
server max protocol
(antiga max protocol
), pois é desnecessária!REFERÊNCIAS
Recomendo o livro Using Samba, 3rd Edition, de Gerald Carter, Jay Ts e Robert Eckstein, lançado em 2007 pela O'Reilly. Apesar de ser um pouco antigo (usa como referência o Samba 3.0.22), é um livro bem escrito e com muita informação útil.
Estou na area de informatica há 38 anos (acredite se quiser), já ví centenas de dicas, blog's etc e tal, mas com cderteza seu Blog é o que melhor existe na minha opinião, existem é claro blogs excelentes na europa e EUA, mas aquí no Brasil não tem prá ninguém. Sou Linuxista entusiasta (Fedora e Ubuntu) e venho de MainFrame IBM - Burrough's e etc e tal, depois fui para UNix (grande Unix), sempre que quero acompanhar novidades e dicas interessantes consulto seu Blog. meus Parabéns...!
ResponderExcluirObrigado, Brasilio. Fico feliz que o conteúdo seja útil.
ExcluirMuito ótimo. Simplicidade e praticidade. Se todos começassem do básico como neste guia fica mais simples partir para o mais avançado. Obrigado.
ResponderExcluirValeu pelas informações meu caro! SETGID salvou minha vida haha!
ResponderExcluirmarcos parabéns excelente !!! explicativo e ao mesmo tempo prático como nenhum outro! abraço
ResponderExcluirReformei o texto. Criando os usuários com o grupo primário correto permite evitar o uso de SETGID e inherit permissions, o que simplifica a configuração.
ResponderExcluir