Essa semana tive um incidente devido a uma mudança realizada pela Sernet, a fornecedora do pacote SAMBA+ que usamos nas aulas do 452 – Linux Security Server in Cloud da 4Linux. Por conta dessa mudança em suas políticas, toda a aula de SAMBA ficou inutilizada pois precisamos da função Active Directory, e somente o SAMBA+ fornecia a suite pré compilada com essa feature habilitada. Para contornar, foi necessário compilar a partir do código fonte. Apesar do passo a passo ser bem simples, ainda sim decidi registrar no blog para consultas futuras do procedimento.
Compilando SAMBA a Partir do Código Fonte
Baixe o pacote samba-latest no site oficial para sua máquina. Dê preferência para esse pacote pois ele contém sempre a versão mais recente do serviço (4.6.4 nesse momento).
# wget https://download.samba.org/pub/samba/samba-latest.tar.gz
Baixe também as dependências de compilação do samba através do grupo de instalação “Development Tools”, e os pacotes libgnutls-dev, gnutls-devel, libacl-devel, python-devel, e o openldap-devel.
# yum groupinstall -y "Development Tools" # yum install -y libgnutls-dev gnutls-devel libacl-devel python-devel openldap-devel
Descompacte o pacote em qualquer lugar de sua máquina e entre dentro do diretório para darmos início a compilação. O processo é bem semelhante a compilação de qualquer outro pacote, sendo somente necessário rodar os comandos ./configure -> make -> make install. Caso a máquina aonde está compilando possui mais de uma CPU, talvez seja interessante compilar usando mais de uma thread. O make recebe o parâmetro “-j <numero>” para que você informe o número de threads que ele utilizar durante o processo de compilação.
# tar -xvzf samba-latest.tar.gz # cd samba-4.6.4/ # ./configure # make -j2 # make install
Com isso temos nosso SAMBA compilado e funcionando, porém ainda precisamos fazer algumas modificações em nosso servidor para que facilite nosso dia a dia. A primeira delas é criar uma unit do tipo serviço para que possamos gerenciá-lo através do systemd. Para isso, crie um arquivo chamado samba.service dentro de /etc/systemd/system e coloque as linhas abaixo dentro de seu conteúdo:
# vim /etc/systemd/system/samba.service [Unit] Description=Samba AD Daemon After=syslog.target network.target [Service] Type=forking PIDFile=/usr/local/samba/var/run/samba.pid LimitNOFILE=16384 EnvironmentFile=-/etc/sysconfig/samba ExecStart=/usr/local/samba/sbin/samba $SAMBAOPTIONS ExecReload=/usr/bin/kill -HUP $MAINPID [Install] WantedBy=multi-user.target
Note que a opção ExecStart recebe uma variável de ambiente chamada $SAMBAOPTIONS: essa variável será carregada através do arquivo ‘/etc/sysconfig/samba’, assim facilitando a edição futura para ativar ou desativar alguma opção de inicialização do SAMBA. O arquivo pode ter qualquer nome e pode ser salvo em qualquer lugar, porém lembre-se de informar o caminho completo dele dentro da unit do systemd que você criou, dentro da variável ‘EnvironmnetFile’. Nesse primeiro momento, nossa variável só terá a opção ‘-D’ pra daemonizar o processo do samba:
# vim /etc/sysconfig/samba SAMBAOPTIONS="-D"
Execute o comando systemctl daemon-reload para que o systemd comece a enxergar a nova unit que você criou, e então habilite a inicialização durante o processo de boot do servidor. Ao compilar seu SAMBA a partir do código fonte, ele não terá um arquivo smb.conf, sendo necessário você criar um pois é uma dependência do processo. Nesse primeiro momento você pode colocar qualquer conteúdo dentro dele seguindo a sintaxe do smb.conf, o importante é que o arquivo exista para validar se o serviço do SAMBA irá inicializar ou não.
# systemctl daemon-reload # systemctl enable samba # vim /usr/local/samba/etc/smb.conf [global] workgroup = HEARTOFGOLD netbios name = ZAPHORD security = share # systemctl start samba
Por ultimo, para facilitar seu dia a dia, altere a variável $PATH do Linux para que reconheça também os diretórios /usr/local/samba/bin e /usr/local/samba/sbin, pois são esses diretórios aonde ficam localizados todos os binários do SAMBA (como por exemplo o samba-tool e o testparm). Para alterar permanentemente sua variável $PATH, crie um arquivo chamado samba.sh dentro de /etc/profile.d/ e coloque as linhas abaixo dentro dele.
# vim /etc/profile.d/samba.sh SAMBA_PATH="/usr/local/samba/bin:/usr/local/samba/sbin" export PATH=$PATH:$SAMBA_PATH
Faça logoff/logon com seu usuário, ou execute o comando source para ler o arquivo samba.sh, e então execute o comando samba-tool sem passar o caminho completo dele. Se tudo der certo, deverá exibir o help do comando, caso contrário verifique se o arquivo anterior foi criado corretamente e tente novamente.
Com isso temos nosso servidor de SAMBA pronto para uso, bastando prosseguir agora com a criação e configuração de seu domínio. Abaixo segue o link dos sites que usei de consulta para compilar durante a criação de meu laboratório:
Links
- https://wiki.samba.org/index.php/Managing_the_Samba_AD_DC_Service_Using_Systemd
- https://conradjonesit.wordpress.com/2013/06/24/building-a-samba4-domain-controller-on-opensuse-12-3/
- https://wiki.samba.org/index.php/Build_Samba_from_Source
Muito util.
Muito obrigado