Introdução
Antes de iniciar a instalação do servidor samba Linux, é importante, antes de mais nada, entender alguns pontos com relação a esse procedimento:
Trata-se então de um procedimento que parte da premissa que você já possui algum conhecimento técnico e experiência em sistemas Unix-like. Caso você não possua nenhuma familiaridade com sistema Linux, recomendo que siga nossa Jornada Shell Script, que abordará muitos comandos e muita prática que servirá como um guia inicial para que você possa tirar o melhor proveito possível deste material.
Assim, caso necessário um detalhamento maior do procedimento, acesse nossas referências.
Do mesmo modo, você precisa entender os comandos aplicados neste artigo e ajustar conforme a sua necessidade. Não faça cópia e cola em ambiente de produção, entenda o que está sendo executado e evite assim problemas futuros.
Por fim, usaremos o seguinte ambiente:
Servidor: RHEL7 Red Hat based on
O que é o Samba Linux?
O Samba é um serviço Linux concebido para ser compatível com o protocolo SMB tornando assim possível disponibilizar para usuários de ambiente Microsoft, o acesso ao compartilhamento de arquivos a partir de um servidor unix-like.
O samba é considerado um software livre, ou seja, tem seu código aberto e teve seu lançamento oficial em 1992.
O serviço tem como seus principais serviços em um ambiente Unix:
Basicamente os dois daemons principais de uma servidor SAMBA são:
- smbd – Serviço responsável por compartilhaar arquivos e impressoras
nmbd – Responsável pelo serviço de nomes e navegação
Assim, caso deseje ter mais informações a respeito do programa, recomendo o acesso à página oficial do produto: www.samba.org. Nada melhor que o próprio criador e mantenedor para tirar potenciais dúvidas e explicar com mais detalhes sobre seu produto, não acha?
Instalando o servidor Samba
Instalação de Pacotes
O comando abaixo dará conta de instalar e habilitar os serviços básicos para iniciarmos nosso servidor Samba Linux.
# yum install -y samba samba-client # systemctl habilita smb nmb
Não irei me aprofundar neste artigo sobre a parte de segurança e configurações de firewall no Linux, mas deixarei apenas o comando de referência para liberação do serviço Samba Linux no firewall do nosso RHEL7.
# firewall-cmd --permanent --add-service=samba # firewall-cmd --reload
Criando Diretórios e ajustando permissões
Agora vamos criar com o comando mkdir a estrutura base do nosso serviço. Primeiro vamos criar nossa estrutura de diretórios.
# mkdir /srv/{samba_pub,samba_group} #diretorios publico e de restrito a um grupo respectivamente
Em seguida daremos permissão total a uma pasta publica no nosso servidor usando o comando chmod.
# chmod 0777 /srv/samba_pub
Em seguida criamos nosso grupo devops com o comando groupadd.
# groupadd devops
Após, alteramos a propriedade do diretório samba_group para grupo devops com o comando chgrp.
# chgrp devops /srv/samba_group
Então, definimos as permissões necessárias para nosso diretório samba_group com o comando chmod.
# chmod 2775 /srv/samba_group
Criando usuários dedicados ao serviço Samba Linux
Neste passo, iremos adicionar com o comando useradd dois usuários que serão usados exclusivamente para acesso ao nosso servidor Samba Linux, não estando estes autorizados a acessar ao servidor Linux via Shell.
# useradd -s /sbin/nologin -G devops dev1 # useradd -s /sbin/nologin dev2 # smbpasswd -a dev1 #Usuario do grupo restrito devops # smbpasswd -a dev2 #usuario publico
Verificando os usuários criados no Samba
O programa pdbedit é usado para gerenciar as contas de usuários. O parametro -L servirá para listar os usuários criados.
# pdbedit -L
Ajustando o contexto SELinux
SE Linux é uma implementação de Segurança dos sistemas RedHat based. Caso deseje saber mais sobre as camadas de segurança do Linux, recomendo que assista ao vídeo Jornada Proxmox Aula 1 Sobre o Proxmox, minuto 10:20.
# ls -dZ /srv/samba_* #analisando o contexto default drwxrwsr-x. root devops unconfined_u:object_r:var_t:s0 /srv/samba_group drwxrwxrwx. root root unconfined_u:object_r:var_t:s0 /srv/samba_pub #semanage fcontext -a -t samba_share_t "/srv/samba_group(/.*)?" #Aplicando o tipo de contexto samba_share_t # setsebool -P smbd_anon_write=1 # semanage fcontext -a -t public_content_rw_t "/srv/samba_pub(/.*)?"
Restaurando o contexto SELinux
# restorecon -Rv /srv/samba_*
Configurando o serviço Samba Linux
Agora vamos ao arquivo base de configuração (smb.conf) do serviço Samba Linux.
Perceba abaixo que deixarei um modelo pronto, mas, você deverá fazer as alterações necessárias, especificando as configurações de interface, diretórios, hostname, IP conforme seu ambiente conforme a sua necessidade.
#vi /etc/samba/smb.conf #Edite conforme modelo abaixo [global] ; Most Windows systems default to WORKGROUP workgroup = MYGROUP server string = Samba Server Version %v ; netbios name = MYSERVER interfaces = lo 10.8.8.0/24 hosts allow = 127. 10.8.8. hostname lookups = yes log file = /var/log/samba/log.%m max log size = 50 security = user passdb backend = tdbsam map to guest = bad user guest account = nobody load printers = no [public] comment = Public Share path = /srv/samba_pub ; public = yes writable = yes browseable = yes printable = no guest ok = yes [group] comment = Group Share path = /srv/samba_group writable = no browseable = yes printable = no guest ok = no write list = @devops read list = dev2 valid users = @devops, dev2
Validando a sintaxe do arquivo SMB
Após fazer a configuração do seu arquivo smb.cnf, vamos usar o comando testparm para validar se não existem problemas de sintaxe no seu arquivo. Veja abaixo um exemplo de saída esperada desse comando.
# testparm -s Load smb config files from /etc/samba/smb.conf rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384) Processing section "[public]" Processing section "[group]" Loaded services file OK. Server role: ROLE_STANDALONE [global] workgroup = MYGROUP server string = Samba Server Version %v interfaces = lo, 10.8.8.0/24 map to guest = Bad User log file = /var/log/samba/log.%m max log size = 50 load printers = No idmap config * : backend = tdb hosts allow = 127., 10.8.8. [public] comment = Public Share path = /srv/samba_pub read only = No guest ok = Yes [group] comment = Group Share path = /srv/samba_group valid users = @devops, dev2 read list = dev2 write list = @devops
Iniciando o serviço Samba
Por fim vamos iniciar, com o comando systemctl, nosso serviço samba, que se tudo for executado conforme exposto acima, está disponível na sua rede.
# systemctl start smb nmb
Para validar o serviço em funcionamento, execute:
# systemctl start smb nmb
Erros conhecidos
Se você está utilizando então o CentOS 7, e todas as configurações do SAMBA além das permissões dos arquivos foram verificados, é possível que seu problema esteja no nosso adorado SELINUX.
Desse modo, uma solução rápida para validar o problema é desativar temporariamente o SELINUX com o comando:
#sudo setenforce 0
Do mesmo modo, é importante lembrar que o CentOS guarda a configuração do SELinux no arquivo:
#vi /etc/selinux/config
Por fim, seus principais modos de configuração são:
SELINUX=disabled #desabilita o SE, não recomendado SELINUX=permissive #Imprime avisos em vez de import SELINUX=enforcing #sendo este ultimo o padrão do CentOS7