%\documentclass[t,handout]{beamer}
\documentclass{beamer}

\usepackage[brazil]{babel}
\usepackage[latin1]{inputenc}


\usepackage[tight]{subfigure}
\usepackage{graphicx}
\usepackage{color}
\usepackage{url}
% \usepackage{inconsolata}
\newcommand{\setcolor}[2]{\color{#1}{#2}\color{black}}

%Pacote de listagem de cï¿½digo
\usepackage{listings}
%\lstset{numbers=left, stepnumber=1, firstnumber=1,
%numberstyle=\tiny, extendedchars=true, breaklines=true, frame=tb,
%basicstyle=\footnotesize, stringstyle=\ttfamily,
%showstringspaces=false }

\lstset{extendedchars=true, breaklines=true, frame=tb,
basicstyle=\footnotesize, stringstyle=\ttfamily,
showstringspaces=false,language=HTML }

% \usecolortheme[RGB={130,35,150}]{structure}
% \usecolortheme[RGB={33,33,94}]{structure}
\usecolortheme[RGB={153,204,123}]{structure}
\setbeamertemplate{footline}[frame number]
\setbeamertemplate{navigation symbols}{}

% \usetheme{Frankfurt} %LEGAL     !!!
% \usetheme{Madrid}     %LEGAL/L%IMPO/COM CAIXA     (sem barra de desenvolvimento)

% \usetheme{Antibes} %NAO
% \usetheme{Berlin} %PODE SER...     (BARRA DE DESENVOLVIMANTO)
% \usetheme{Berkeley}     %FEIO
% \usetheme{Boadilla} %TUDO BRANCO...
% \usetheme{Copenhagen}     %NAO
% \usetheme{Darmstadt} %LEGAL!     !!!
% \usetheme{Dresden}     %LEGAL/LIMPO/SEM CAIXA     (sem caixa fica ruim...)

% \usetheme{Goettingen}     %FEIO DEMAIS!
 \usetheme{Ilmenau} %LEGAL (forte candidato)
% \usetheme{JuanLesPins} %BACANA
% \usetheme{Luebeck}     %FEIO

% \usetheme{Malmoe}     %FEIO
% \usetheme{Warsaw} %NAO...
% \usetheme{Seattle}
% \usetheme{CambridgeUS}
% \usetheme{Singapore}

%Insere o numero de frames no slide
\newcommand*\oldmacro{}
\let\oldmacro\insertshortauthor% save previous definition
\renewcommand*\insertshortauthor{%
  \leftskip=.3cm% before the author could be a plus1fill ...
  \insertframenumber\,/\,\inserttotalframenumber\hfill\oldmacro}


\author[Ivo Calado]{Ivo Calado\\\url{ivo.calado@ifal.edu.br}}
\date{\today}
\institute[IFAL]{Instituto Federal de Educação, Ciência e Tecnologia de Alagoas}
\title[ICSI]{Instalação e Configuração de Serviços de Internet}
\logo{\includegraphics[width=0.2\linewidth]{imagens/ifal-logo.jpg}}
\subtitle{\textit{Samba\\}}

\begin{document}



\begin{frame}
  \titlepage
\end{frame}

% \section{Roteiro}
% \AtBeginSection[]
{\frame{
\frametitle{Roteiro}
\tableofcontents[hidesubsections]
}
}


\section{Introdução}
\subsection{Cenário}
\begin{frame}{Problemática}

 Suponha que desejamos configurar uma rede com as seguintes características
\begin{itemize}
  \item Estações Linux
  \item Estações Windows
  \item Servidores de impressão
  \item Servidores de autenticação
  \item Compartilhamento de recursos
  \end{itemize}
Como deveríamos proceder?
\pause

\textbf{Por que o NFS e NIS juntos não atendem a \linebreak todos os requisitos?}

\end{frame}

\begin{frame}{Limitações da solução NIS+NFS}
 \begin{itemize}
  \item O NFS e NIS oferecem apenas uma solução limitada a ambiente Linux para compartilhamento de recursos e autenticação
\pause
  \item É necessário uma solução que integre terminais nos ambientes Windows e Linux
\pause
  \item O Samba é a solução ideal para os requisitos apresentados
 \end{itemize}

\end{frame}



\subsection{O protocolo SAMBA}
\begin{frame}{Definição}
\begin{block}{O que é?}
 É um servidor e um conjunto de ferramentas que possibilita que máquinas Linux e Windows se comuniquem entre si, compatilhando o acesso a recursos
\end{block}

\pause
 \begin{itemize}
  \item Recursos podem ser arquivos, diretórios ou até mesmo impressoras 
  \item Diferentemente de soluções como o NIS/NFS, o SAMBA possibilita a interligação de redes heterogêneas
  \item Muito mais...
 \end{itemize}

\end{frame}


\begin{frame}{Por que seria preferível utilizar SAMBA no lugar do Windows Server?}
\pause
\begin{itemize}
  \item Menores custos de manutenção (por ser executado em um ambiente mais estável =$>$ Linux)
  \item Oferece melhor performance que o Windows Server (fator de 2 para 1 no WinServer 2K)
  \item Sem custos de licença por ser um \textit{software} livre
\end{itemize}
  
\end{frame}

\subsection{Protocolos e padrões}
\begin{frame}{Qual a relação entre NetBEUI e NetBIOS?}
\begin{block}{NetBIOS -- \textit{Network Basic Input/Outuput Systems}}
  Trata-se de uma abordagem para estruturação de comandos de entrada e saída para ambiente de rede
\end{block}

\pause
 \begin{block}{NetBEUI -- \textit{NetBIOS Extended User Interface}}
   É uma implementação do protocolo de comunicação desenvolvida pela Microsoft para tráfego de mensagens baseadas no padrão NetBIOS
 \end{block}

\end{frame}

\begin{frame}{Qual a relação entre SMB e CIFS?}

\begin{block}{SMB -- \textit{Server Message Block protocol}}
  \begin{itemize}
    \item Implementação em ambiente Unix do protocolo NetBEUI
    \item Possui como sucessor o protocolo CIFS (\textit{Common Internet File System})
  \end{itemize}

\end{block}

\begin{itemize}
 \item Pode ser habilitado no Kernel do Linux em \textbf{File Systems -$>$ Network File Systems -$>$ CIFS suport (advanced network filesystems, SMBFS successor)}
\end{itemize}
 
\end{frame}

\section{História}
\subsection{Princípios}
\begin{frame}{Como surgiu?}
 \begin{itemize}
  \item Foi desenvolvido 1991 por Andrew Tridgell pois precisava montar um volume Unix em sua máquina DOS
  \item Inicialmente era baseado em NFS mas um dos seus aplicativos precisava de suporte ao padrão NetBIOS
  \item Para descobrir como funcionava o protocolo NetBEUI escreveu um \textit{sniffer} de pacotes
  \item Em meados de 1992 escreveu o primeiro código que fazia a máquina Unix aparecer como uma máquina Windows!
 \end{itemize}

\end{frame}

\begin{frame}{Curiosidade I}
\begin{block}{Qual a origem do nome SAMBA?}
\pause
 \begin{itemize}
  \item Não foi possível utilizar o nome ``SMB Server'' (problema de patente)
  \item O autor utilizou o comando ``\textbf{$grep -i 's.*m.*b' /usr/dict/words$}'' para exibir um conjunto de palavras do dicionário, obtendo entre elas a palavra \textbf{samba}
 \end{itemize}


\end{block}

\end{frame}

\begin{frame}{Curiosidade II}
  Qual o objetivo de se utilizar um \textit{sniffer} de pacotes para analisar um protocolo?
    \pause
      \begin{itemize}
	\item Mecanismo de engenharia reversa para determinar o funcionamento do pacotes	
	\item Tem como foco inspecionar protocolos ``fechados''
	\item Monitora a troca de pacotes na rede identificando a ordem e a sequência de bits de cada pacote transmitido
	\item A ideia é identificar a sequencia de pacotes que serão transmitidos para cada comando e poder ``remontar'' o protocolo
      \end{itemize}
\end{frame}




\section{Características}
\subsection{Recursos}
\begin{frame}[allowframebreaks]{Recursos}
Uma das características fundamentais do SAMBA é sua grande flexibilidade, oferendo inúmeras opções de configuração como:
 \begin{itemize}
  \item Compartilhamento de arquivos entre máquinas Win e Linux ou de máquinas Linux (sendo o servidor Samba) com outro SO que tenha um cliente NetBEUI
  \item Montar um servidor de compatilhamento de impressão Linux
  \item Controle de acesso aos recursos compatilhados no servidor através de diversos métodos
  \item Controle de acesso leitura/gravação por compartilhamento 
  \item Controle de acesso leitura/gravação por usuário compartilhado
  \item Possibilidade de definir contas \textit{guest}
  \item Possibilidade do uso de diferentes base de dados de autenticação como: ``/etc/passwd'', arquivo de dados criptografado, LDAP, PAM etc
  \item Controle de cache e opções \textit{tunnig} por compartilhamento 
  \item Permite ocutar o conteúdo de determinados diretórios que não devem ser visualizados de maneira direta pelos usuários
  \item Suporte a configuração de codificação de caracteres entre máquinas servidores e clientes
  \item Suporte completo ao WINS
  \item Permite montar unidades mapeadas de sistemas Windows ou outros servidores Linux como um diretório Linux
  \item Permite a criação de ambientes de auditoria de modo a monitorar a utilização de recursos, inclusive em tempo real
 \end{itemize}

\end{frame}

\section{Instalação}
\subsection{}
\begin{frame}{Pacotes necessários}
Para configuração do servidor e cliente SAMBA, os seguintes pacotes são necessários:

\begin{itemize}
  \item \textbf{samba}: servidor samba
  \item \textbf{smbclient}: cliente samba
  \item \textbf{smbfs}: utilitários do sistema de arquivos smbfs
\end{itemize}
Se for necessário apenas o mapeamento de compartilhamentos deve-se instalar apenas os dois últimos pacotes

\begin{block}{Instalação}
 \textit{apt-get install samba smbclient smbfs}
\end{block}
\end{frame}

\begin{frame}{Inicialização do \textit{daemon}}
  \begin{block}{Como inicializar o serviço samba?}
   A inicialização do serviço samba, no Ubuntu, é realizada a partir do comando \textbf{service}, indicando o serviço \textbf{smbd}:
  \begin{itemize}
    \item service smbd \textbf{start}
    \item service smbd \textbf{stop}
    \item service smbd \textbf{restart}
  \end{itemize}

  \end{block}
Dependendo da distribuição a forma de inicialização pode variar (Ex.: /etc/init.d/samba *, no \textbf{Gentoo})
\end{frame}

\section{Configuração}
\subsection{smb.conf}
\begin{frame}
  \begin{itemize}
    \item Configuração baseada no arquivo smb.conf (normalmente armazenado em \textbf{/etc/samba/smb.conf})
    \item Armazena toda a configuração relacionada a nomes, grupos de trabalho, tipo de servidor, log, compartilhamentos de arquivos e impressão
  \end{itemize}
\pause
\begin{block}{Como é estruturado o arquivo smb.conf}
 O arquivo smb.conf é estruturado em \textit{seções} e \textit{parâmetros}, onde cada seção especifica uma configuração específica. As seções são definidas entre colchetes (``[]'') e os parâmetros por conjunto de chaves-valor
\end{block}
\pause
\begin{itemize}
 \item Os valores podem ser \textbf{0} ou \textbf{1}, \textbf{yes} ou \textbf{no}, \linebreak \textbf{true} ou \textbf{false}
\end{itemize}


\end{frame}

\begin{frame}{Seções especiais do arquivo smb.conf}

Algumas seções do arquivo smb.conf já são predefinidas. São elas:
\pause
  \begin{itemize}
  \item \textbf{$[$global$]$}: Define configurações que afetam o servidor samba como um todo, fazendo efeito em todos os compartilhamento. Podem ser sobrescritas por outro compartilhamento

  \item \textbf{$[$homes$]$}: Especifica opções padrões para compartilhamento de diretório de usuário
  \item \textbf{$[$printers$]$}: Define configurações gerais para controle de impressoras
  \item \textbf{$[$profile$]$}: Define um perfil quando o servidor é usado como PDC
  \end{itemize}
\end{frame}

\subsection{Seções do smb.conf}
\begin{frame}{Seção [global]}
 \begin{itemize}
  \item Ações configuradas nesse servidor tem efeito em todo o servidor
  \item Se o parâmetro especificado for novamente definido em um compartilhamento, vale o valor do compartilhamento
 \end{itemize}
\begin{block}{Exemplo}
 Se a opção \textit{guest user = nobody} for definido na seção \textit{[global]} e após isso, essa mesma opção for utilizada no compartilhamento \textbf{foo} com outro valor, então o usuário utilizado para acesso público será o \textbf{nobody} exceto para o compartilhamento \textbf{foo}
\end{block}


\end{frame}

\begin{frame}[allowframebreaks]{Opções de configuração}
Diversas opções estão disponíveis para configuração do servidor samba na seção [global], tais como:

\begin{itemize}
 \item \textbf{netbios name} -- Nome primário do servidor samba
  \item \textbf{workgroup} -- Nome do grupo de trabalho
  \item \textbf{server string} -- Identificador enviado pelo servidores
  \item \textbf{name resolve order} -- Define a ordem de resolução de nomes. Tem impacto na quantidade de tráfego na rede
  \item \textbf{guest account} -- Conta local de acesso sem senha
  \item \textbf{invalid users} -- Usuários sem acesso. Por segurança o acesso pelo usuário \textbf{root} deve ser banido
  \item \textbf{valid users} -- Especifica quais usuários tem acesso
  \item \textbf{announce as} -- Define como o servidor Samba irá aparecer para as demais máquinas da rede (valores: \textbf{NT Server, NT Workstation ou Win95})
\end{itemize}

 
\end{frame}

\begin{frame}{Seção [homes]}
  \begin{itemize}
    \item Compartilhamento especial para o diretório home do usuário
    \item Usa como diretório de compartilhamento o definido em /etc/passwd, se não for definido nada em contrário
  \end{itemize}

 
\end{frame}

\begin{frame}{Exemplo de configuração do diretório home}
 \begin{example}{}
  [homes]\\
  comment = Diretório home de usuários\\
  writable = yes\\
  public = no\\
  invalid users = root nobody @adm\\
  follow symlinks = no\\
  create mode = 0640\\
  directory mode = 0750
 \end{example}

\begin{block}{}
 Adicionar o usuário a base de informações através do comando \textbf{smbpasswd -a $<$usuário$>$}
\end{block}

\end{frame}

\begin{frame}{Seção [printers]}
 \begin{itemize}
  \item Tem por objetivo disponibilizar as impressoras existentes no sistema, definidas em /etc/printcap
  \item Configuração é identica ao de um compartilhamento de pasta, mas a opção \textbf{printable = yes} DEVE estar definida
 \end{itemize}

\end{frame}

\begin{frame}{Exemplo de compartilhamento de impressoras}
 \begin{example}{}
   [printers]\\
   comment = All Printers\\
   browseable = no\\
   path = /var/spool/samba\\
   printable = yes\\
   guest ok = no\\
   read only = yes\\
   create mask = 0700\\
 \end{example}

\end{frame}

\subsection{Personalizando compartilhamentos}

\begin{frame}{Criando novos compartilhamentos}
\begin{itemize}
 \item Além das seções preexistentes, é possível configurar novos compartilhamentos

\item As mesmas opções dos compartilhamentos padrões podem ser utilizados para novos compartilhamentos
 
\end{itemize}

 
\end{frame}



\section{Atividades}
\subsection*{Preparando a Máquina Virtual}
% 
% \section{Atividade}
\begin{frame}{Preparando a Máquina Virtual}
\begin{enumerate}
 \item Importar \textit{appliance}
 \item Duplicar a máquina virtual renomeando para \textbf{ubuntu-server-samba}
 \item Configurar o adaptador para modo Bridge 
 \item Iniciar a máquina virtual
\end{enumerate}

\end{frame}

\begin{frame}[fragile]{Criando usuários}
 \begin{lstlisting}
#Logar como root
usuario@host1:~$ sudo su
[sudo] senha para usuario: 
root@host1:/home/usuario#  
 
#criação do usuário 'usuario2'
root@host1:/home# adduser usuario2

#criação do usuário 'usuario3'
root@host1:/home# adduser usuario3

\end{lstlisting}

\end{frame}

\begin{frame}[fragile]{Instalação do Samba e adição de usuários à base do Samba}
 \begin{lstlisting}
#Adição dos usuários 'usuario', 'usuario2' e 'usuario3' à base do samba
root@host1:/home# smbpasswd -a usuario
New SMB password:
Retype new SMB password:
Added user usuario.

root@host1:/home# smbpasswd -a usuario2
New SMB password:
Retype new SMB password:
Added user usuario2.

root@host1:/home# smbpasswd -a usuario3
New SMB password:
Retype new SMB password:
Added user usuario3.
  
 \end{lstlisting}

\end{frame}
\subsection{Ex 1: compartilhando o diretório home}
\begin{frame}[fragile]{Ex 1: compartilhando o diretório home}
\begin{lstlisting}
#Compartilhamento do diretório homes
/etc/samba/smb.conf
[homes]
   comment = Home Directories 
   browseable = no
   writeable = yes
   valid users = %S
   guest ok = yes


#Reiniciar o samba
/etc/init.d/samba restart
 
\end{lstlisting}

\end{frame}
\subsection{Ex 2: compartilhando diretórios com permissões distintas}
\begin{frame}{Ex 2: compartilhando diretórios com permissões distintas}
 \begin{itemize}
  \item Vamos compartilhar 3 diretórios:
  \begin{itemize}
   \item instaladores
   \item arquivosgerais
   \item direcao
  \end{itemize}
  \item No primeiro, todos poderão ler e escrever e não é necessária autenticação
  \item No segundo diretório, todos poderão ler mas apenas os usuários do grupo 'func' poderão escrever
  \item No terceiro diretório, apenas os usuários do grupo 'direcao' poderão ler e escrever

 \end{itemize}

\end{frame}
\begin{frame}[fragile]{Passo 1: configuração da estrutura de diretórios}
\begin{lstlisting}
#Mover para diretório raiz
root@host1:/# cd /

#Criar diretório samba
root@host1:/# mkdir samba

#entrar no diretório criado
root@host1:/# cd samba/

#Criar 3 diretórios distintos
root@host1:/samba# mkdir instaladores
root@host1:/samba# mkdir arquivosgerais
root@host1:/samba# mkdir direcao 
\end{lstlisting}

\end{frame}

\begin{frame}[fragile]{Passo 2: Criação dos grupos func e direcao}
\begin{lstlisting}
#Criação dos grupos 'func' e 'direcao'

root@host1:/samba# addgroup func
Adicionando grupo `func' (GID 1003) ...
Concluído.
root@host1:/samba# addgroup direcao
Adicionando grupo `direcao' (GID 1004) ...
Concluído.
root@host1:/samba# 

\end{lstlisting}

\end{frame}

\begin{frame}[fragile, allowframebreaks]{Passo 3: Adição dos usuários aos respectivos grupos}
 \begin{itemize}
  \item Adicionando usuários aos grupos
  \begin{itemize}
   \item `usuario' não pertence a nenhum grupo
   \item `usuario2' pertence ao grupo func
   \item `usuario3' pertence ao grupo direcao
  \end{itemize}

 \end{itemize}

 \begin{lstlisting}
root@host1:/samba# adduser usuario2 func
Adicionando o usuário `usuario2' ao grupo `func' ...
Adding user usuario2 to group func
Concluído.
root@host1:/samba# adduser usuario3 direcao
Adicionando o usuário `usuario3' ao grupo `direcao' ...
Adding user usuario3 to group direcao
Concluído.
  
 \end{lstlisting}

\end{frame}

\begin{frame}[fragile]{Passo 4: Modificação de permissões nos diretórios}
\begin{lstlisting}
#Adição da permissão de leitura, escrita e execução no diretório 'instaladores' para todos os usuários
root@host1:/samba# chmod 777 instaladores

#Adição da permissão de escrita para os usuários do grupo func e de leitura para os demais usuários
root@host1:/samba# chown root.func arquivosgerais
root@host1:/samba# chmod 775 arquivosgerais/

#Adição da permissão de escrita para os usuários do grupo direcao e nada para os demais
root@host1:/samba# chown root.direcao direcao/
root@host1:/samba# chmod 770 direcao/
 
\end{lstlisting}

\end{frame}

\begin{frame}[fragile]{Passo 5: Configuração do diretório instaladores}
\begin{lstlisting}
[instaladores]
   comment = Instaladores
   browseable = yes
   path = /samba/instaladores
   guest ok = yes
   writeable = yes
   create mask = 766
   
#Reiniciando o servidor samba
root@host1:/samba# /etc/init.d/samba restart
   
\end{lstlisting}

\end{frame}

\begin{frame}[fragile]{Passo 6: Configuração do diretório Arquivos gerais}
\begin{lstlisting}
[Arquivos Gerais]
   comment = Diretório para arquivos gerais
   browseable = yes
   path = /samba/arquivosgerais
   guest ok = yes
   write list = @func

#Reiniciando o servidor samba
root@host1:/samba# /etc/init.d/samba restart
 
\end{lstlisting}

\end{frame}

\begin{frame}[fragile]{Passo 7: Configuração do diretório direcao}
\begin{lstlisting}
##Configuração do Samba para o diretório direcao
[direcao]
   comment = Diretório voltado para arquivos da direção
   browseable = no
   path = /samba/direcao
   writeable = yes
   valid users = @direcao

\end{lstlisting}

\end{frame}

\begin{frame}[fragile]{Ocultando extensões de arquivos}
 \begin{itemize}
  \item É possível impedir a criação de alguns diretórios específicos a partir da opção veto files
 \end{itemize}
 
 \begin{lstlisting}
#Ocultando extensões de arquivos
veto files = *.tttxt

 \end{lstlisting}


\end{frame}

\subsection*{Atividade para casa}
\begin{frame}{Atividades para casa}
\begin{enumerate}
 \item Configurar o cliente samba do linux para acesso a compartilhamentos
 \item Configurar o Samba para servir como controlador de domínio na rede Windows
\end{enumerate}

  
\end{frame}

\end{document}