SAMBA: Instalação no FreeBSD

Preparando o Ambiente para Instalação

Passo 1: Devemos realizar a configuração de rede do sistema FreeBSD para que o mesmo possa se conectar a Internet. A configuração de rede pode ser feita de duas maneiras no FreeBSD: Estaticamente ou Dinamicamente.

Obtendo configurações de endereçamento IP manualmente:

Para definirmos as configurações de endereçamento IP ao host de maneira manual, devemos inserir os parametros desejado dentro do arquivo de configuração do sistema /etc/rc.conf, conforme exemplo abaixo:

# ee /etc/rc.conf

Obs.: Ao invés do editor ee, você pode usar qualquer outro que desejar como o vi, por exemplo.

ifconfig_em0=”inet 192.168.1.10 netmask 255.255.255.0”
defaultrouter=”192.168.1.254”

Explicando:
  • ifconfig_em0=”inet 192.168.1.10 netmask 255.255.255.0”: Comando utilizado para definir o endereço IP e Mascara de Sub-Rede do Host em questão;
  • defaultrouter=”192.168.1.254”: Comando utilizado para definir o Default Gateway do Host em questão;
Feito isso, basta salvar o arquivo e sair. Para que as alterações feitas no arquivo /etc/rc.conf entrem em funcionamento, basta reiniciar o sistema (comando reboot, init 6, shutdown -r now) ou executar o script /etc/netstart, conforme exemplo abaixo:

# sh /etc/netstart

Devemos tambem configurar os Servidores de Nomes (DNS) que o Host irá utilizar. Como na maioria dos sistemas BSD e Linux, essa configuração é feita no arquivo de configuração /etc/resolv.conf. Segue abaixo exemplo do arquivo:

# ee /etc/resolv.conf

#Conteudo do Arquivo:

search localdomain.my.domain
nameserver 208.67.222.222
nameserver 208.67.220.220
nameserver 8.8.8.8

Explicando:
  • search localdomain.my.domain: Determina que caso seja solicitada a resolução de algum nome sem dominio, automaticamente será incluido o dominio “localdomain.my.domain”;
  • nameserver 208.67.222.222: Especifica o Endereço IP do Servidor DNS que resolverá os nomes para o Host. Várias entradas podem existir, uma em cada linha;
  • Obtendo configurações de endereçamento IP automaticamente: Uma maneira mais simples de obter as configurações de rede é atraves de um Servidor DHCP. Caso em sua rede local possua um Servidor DHCP, basta seguir o procedimento abaixo para obter as configurações necessárias:
# ifconfig

Analisando a saída do comando ifconfig abaixo, devemos identificar qual o prefixo ou codigo de nossa Interface de Rede. No meu caso é “em0”, conforme destacado abaixo:

em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&lgt; metric 0 mtu 1500
options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
ether 08:00:27:d4:a6:1e
inet 192.168.1.20 netmask 0xffffff00 broadcast 192.168.1.255
media: Ethernet autoselect (1000baseT )
status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=3<RXCSUM,TXCSUM>
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
nd6 options=3<PERFORMNUD,ACCEPT_RTADV>

Feito isso, vamos utilizar o utilitário “dhclient” (Cliente DHCP) para podermos obter as configurações de rede:

# dhclient <Prefixo ou Codigo da Interface>
# dhclient em0


Observação: Caso deseje, as configurações de rede tambem podem ser alteradas atraves do utilitário “sysinstall”, no caminho indicado abaixo:

# sysinstall > Configure > Networking > Selecionar a opção Interfaces

Após isso, basta inserir as configurações desejadas e sair.

Iniciando a Instalação do SAMBA

Passo 2: Devemos realizar a instalação do SAMBA e suas dependências no FreeBSD. Vamos fazer isso atraves do Ports. Para isso, tenha certeza que sua máquina FreeBSD tenha acesso a Internet, pois a mesma necessitara se comunicar com os Servidores do Ports para realizar o download dos pacotes necessários. Isso pode ser visto atraves do comando:

# ifconfig

Tendo endereçamento em nossa Interface de Rede, podemos testar a conectividade de nosso FreeBSD com algo na Internet, atraves do comando abaixo:

# ping <FQDN, URL ou Endereço IP Publico>

Por exemplo:

# ping www.google.com

ou

# ping 8.8.8.8 (Servidor DNS da Google)

PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=49 time=177.144 ms
64 bytes from 8.8.8.8: icmp_seq=1 ttl=49 time=173.513 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=50 time=175.319 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=49 time=176.265 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=49 time=180.066 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=50 time=175.247 ms
64 bytes from 8.8.8.8: icmp_seq=6 ttl=48 time=178.116 ms
64 bytes from 8.8.8.8: icmp_seq=7 ttl=49 time=173.474 ms
64 bytes from 8.8.8.8: icmp_seq=8 ttl=50 time=172.755 ms
64 bytes from 8.8.8.8: icmp_seq=9 ttl=50 time=172.672 ms
64 bytes from 8.8.8.8: icmp_seq=10 ttl=50 time=176.656 ms
64 bytes from 8.8.8.8: icmp_seq=11 ttl=50 time=173.601 ms
--- 8.8.8.8 ping statistics ---
12 packets transmitted, 12 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 172.672/175.402/180.066/2.227 ms

Observação: Caso tenha obtido (Reply) resposta no teste de ping, sua conexão está estabelecida com a Internet, caso não verifique as configurações de rede de seu FreeBSD pois algum problema ainda existe. Revise a etapa 1 (passo 1) para maiores detalhes.

Vamos acessar o diretorio do Ports que contem o SAMBA3:

# cd /usr/ports/net/samba3

Dentro do diretório do SAMBA3, vamos realizar a instalação dos pacotes, atraves do comando abaixo:

# make install clean

Explicando:
  • make: Realiza a compilação do programa, dependências necessárias, etc;
  • install: Instala o programa;
  • clean: Apaga ou limpa arquivos/dependências usados no processo de compilação do mesmo;

Nota: Basta aguardar alguns minutos para que o mesmo seja instalado. Lembrando que o mesmo deve ser instalado com as opções padrões (default), por isso, durante o processo de instalação você poderá ser perguntando sobre a instalação de algumas bibliotecas/aplicativos. Somente instale se por padrão a opção de seleção estiver marcada, caso contrário não.

Habilitando a execução do daemon do SAMBA

Passo 3: Depois de instalado no sistema, devemos habilitar a execução do daemon do SAMBA no arquivo de configuração /etc/rc.conf. A linha baixo deve ser inserida no arquivo /etc/rc.conf respeitando os caracteres maisculos e minusculos:

samba_enable=”YES”

Para que a configuração entrem em vigor, basta executar o script abaixo:

# sh /etc/netstart

ou

Reiniciar o sistema:

# shutdown -r now


Manipulando o daemon do SAMBA



Passo 4: Como todo serviço de sistema, o SAMBA pode ser iniciado ou pausado caso desejado. Os daemons do SAMBA (smnd e nmbd) podem ser inicializados, pausados, restartados ou mesmo obter o status dos mesmsos atraves dos comandos abaixo:

# /usr/local/etc/rc.d/samba start – Inicia o serviço;
# /usr/local/etc/rc.d/samba stop – Pausa o serviço;
# /usr/local/etc/rc.d/samba restart – Reinicia o serviço;
# /usr/local/etc/rc.d/samba status – Mostra o status do serviço;


Nota: Os daemons do SAMBA significam, basicamente:
  • smbd: O acronimo de smbd é “Server Message Block Daemon” é tem a função de fornecer serviços de compartilhamento de arquivos e impressoras para clientes Windows, originalmente Windows 95/98, Windows NT, Windows for Workgroups. Nas versões mais atuais dos sistemas Windows, o protocolo utilizado para essa finalidade é o CIFS, mas o suporte ao SMB ainda é mantido.
  • nmbd: NetBIOS name server to provide NetBIOS over IP naming services to clients, esse é o significado de “nmbd”. Esse daemon prove suporte a serviços de nome e navegação para o protocolo NetBIOS.

Preparando o arquivo de configuração: /usr/local/etc/smb.conf

Passo 5: Agora, precisamos editar o arquivo de configuração do SAMBA e inserir as opções desejadas no mesmo. Por default, o arquivo principal de configuração do SAMBA fica localizado no caminho abaixo:

# cd /usr/local/etc/
# ee smb.conf


Um exemplo do arquivo “smb.conf” pode ser observado abaixo:

[global]
workgroup = WORKGROUP
netbios name = firewall
server string = FreeBSD Samba Server
smb ports = 139
# log file = /var/log/samba/log.%m
max log size = 100
local master = yes
os level = 100
preferred master = yes
preserve case = no
default case = lower
encrypt passwords = yes
security = user
hosts allow = 192.168.1. 127.
[homes]
path = /usr/home/%u/share
valid users = %S
read only = no
create mask = 1700
directory mask = 1700
browseable = no
[arquivos]
comment = Arquivos Compartilhados pelo Samba Server
path = /arquivos_samba
valid users = danilo danilo2
public = no
printable = no
writeable = yes
browseable = yes
create mask = 644
vfs objects = recycle
recycle:keeptree = yes
recycle:versions = yes
recycle:repository = /var/spool/samba/trash/%U
recycle:exclude = *.tmp, *.log, *.obj, ~*.*, *.bak, *.iso
recycle:exclude_dir = tmp, cache

[financeiro]
comment = Arquivos Departamento Financeiro
path = /financeiro
valid users = user user2
public = no
printable = no
writeable = yes
browseable = yes
create mask = 644

Breve explicação sobre as opções (Comentário sobre a mesma):

O SAMBA é dividido em duas sessões: Uma area de configurações “Globais” e outra area onde inserimos informações sobre os compartilhamentos de diretórios, impressoras, etc. Na sessão Global, inserimos configurações que afetam todo o funcionamento do SAMBA, ou seja, afetam todos os compartilhamentos providos por ele. Já na sessão dos compartilhamentos, podemos definir configurações que só terão impacto especificamente em um determinado compartilhamento e não em todos.

[global]
# Nome do dominio ou grupo de trabalho em que o host faz parte;
workgroup = WORKGROUP

# Nome NetBIOS da máquina (o mesmo nome que é definido na instalação do FreeBSD). Essa entrada é opcional;
netbios name = firewall

# Descrição para a função da máquina ou algo desejado pelo Administrador;
server string = FreeBSD Samba Server

# Porta lógica default que o SAMBA utiliza. Essa entrada é opcional, já que esse valor é default;
smb ports = 139

# Define em qual arquivo serão armazenados os log's do SAMBA. Por default, na instalação do SAMBA já são criados dois arquivos para essa função. Os mesmos ficam armazenados em /var/log/samba. Observe que essa linha não está em uso, apenas para exemplo;
# log file = /var/log/samba/log.%m

# Tamanho (em KB) máximo do arquivo de log do SAMBA;
max log size = 100

# Em redes Windows, uma das máquinas fica sempre responsavel por montar e atualizar uma lista dos compartilhamentos disponiveis eenvia-las aos demais, conforme solicitado.O host que executa essa função é chamado de “Master Browser”. O cargo de Master Browser em uma rede é disputado atraves de uma eleição, onde os parametros “os level” e “preferred master” são analisado e comparados entre as máquinas competidoras. Com isso basta definir as opções abaixo para que nosso host consiga entrar nessa disputa, já que o mesmo ira fornecer compartilhamentos de arquivos e impressão:
os level = 100
preferred master = yes
local master = yes

# Faz com que todos os arquivos que sejam inseridos nos compartilhamentos sigam um padrão, ou seja, os nomes de todos os arquivos serão armazenados em caixa baixo (letra minuscula):
preserve case = no
default case = lower

# Opção default do SAMBA. Habilita a criptografia de senhas;
encrypt passwords = yes

# Define o modo de segurança em que o SAMBA irá operar. Todos os modos possíveis são: share, user, server, domain e ads, onde cada um possui sua particularidade e deve ser inserido tendo isso em mente. No caso, user significa que deve existir usuário no sistema e também no SAMBA;
security = user

# Nesse caso, estamos permitindo a conexão com o servidor maquinas presentes na rede Classe C e a Interface de Loopback. Essa entrada poderia ser também como: 192.168.1.0/24 e 127.0.0.0/8;
hosts allow = 192.168.1. 127.

# Ativa o uso do sistema CUPS em conjunto com o SAMBA. Na verdade, nas versões mais novas do SAMBA o CUPS já é o sistema de gerenciamento de impressão padrão. Tenha em mente que o CUPS é mais uma opção para o gerenciamento de impressão. Em muitos casos, o próprio SAMBAsozinho pode compartilhar as impressoras sem problema algum;
printing = cups

# Opção necessária que faz com que o SAMBA carregue as impressoras por padrão, quando a mesma está configurada no arquivo /usr/local/etc/smb.conf;
load printers = yes

# Uma vantagem da utilização de usuários reais no servidor SAMBA, é a vantagem de poder compartilhar os diretórios “home” de cada usuário cadastrado no sistema, através da seção [homes], conforme mostrada abaixo. Lembre-se: O usuário deve existir no sistema, no SAMBA e possuir um diretório home para que isso funcione;
[homes]

# Caminho do diretório a ser compartilhado localizado no FileSystem do FreeBSD. Nesse caso, muita atenção. Os diretórios home de cada usuário do sistema ficam localizados no diretório /usr/home. A variavel “%u” utilizada significa nome do usuário cadastrado no sistema, ou seja, cadastrado no FreeBSD. Já o diretório “share” foi criado justamente para que ele possa ser compartilhado, ao inves do diretório home “raiz” de cada usuário. O objetivo é fazer com que os demais arquivos (incluse arquivos de configuração do usuário) não apareçam para o usuário, o que em muitos casos pode confundir o mesmo ou o mesmo excluir algo por engano ;-).
path = /usr/home/%u/share

Para usuários que já existam no sistema, é possível criar um Shell Script onde o mesmo fará a criação do diretório “share”, ajustará as permissões conforme desejado e tornará o usuário em questão dono do diretório. Segue abaixo como criar o Shell Script:

Entrando no diretório home dos usuários:

# cd /usr/home

Criando o arquivo “cria_share.sh” com o editor de texto padrão, no meu caso o ee:

# ee cria_share.sh

Segue abaixo o conteudo que deve existir no arquivo a ser criado chamado “cria_share.sh”:

#!/bin/sh
# Script utilizado para criar o diretorio de nome share dentro do HOME de
# cada usuario no sistema;
echo " "
echo "..:: Iniciando a execucao do script, por favor aguarde ..."
echo " "
cd /usr/home
for i in *; do
mkdir $i/share 2> /dev/null
chmod -R 1700 /usr/home/$i/share 2> /dev/null
chown -R $i /usr/home/$i/share 2> /dev/null
done
echo " ..:: Tarefas realizadas com sucesso ::.. "

Observação: Lembrando que as entradas iniciadas com o caractere “#” trata-se de um comentário e não será interpretado pelo shell no sistema.

Após inserir o conteudo, basta salvar o arquivo e executa-lo, conforme exemplo abaixo:

# sh /usr/home/cria_share.sh

# Após criada a pasta share que será compartilhada para cada usuário, a linha abaixo especifica (garante) que a pasta somente ficara acessivel apenas para o próprio usuário, ou seja, somente o usuário com as credências do dono da pasta poderá acessa-la e mais ninguém (exceto o usuário root, que tem permissões em tudo ;-));
valid users = %S

# Habilita a permissão de escrita;
read only = no

# Opções que ajustam as permissões dos arquivos e diretórios inseridos/criados dentro do compartilhamento em questão. Vale lembrar que a permissão mais restritiva (geralmente a imposta no FileSystem do sistema) tem precedência sobre essas entradas do SAMBA:
create mask = 1700
directory mask = 1700

# Em conjunto com a opção “valid users”, especifica que o compartilhamento somente será visivel e acessivel pelo usuário dono em questão;
browseable = no

[arquivos]
# Comentário para o compartilhamento;
comment = Arquivos Compartilhados pelo Samba Server

# Caminho do diretorio a ser compartilhado localizado no FileSytem do FreeBSD;
path = /arquivos_samba

# Usuários válidos ou que terão permissão para acesso ao compartihamento em questão. Atenção, esse usuário deve estar cadastrado no sistema e tambem na base de dados do SAMBA. Devem obrigatoriamente terem o mesmo nome de usuário:
valid users = danilo danilo2

# Especifica que o compartilhamento não é publico e exige credencias para poder acessa-lo. Essa é uma opção importante e deve ser configurada para restringir o acesso ao compartilhamento em questão;
public = no
printable = no

# Autoriza a leitura e gravação no compartilhamento. Note que essa é apenas uma permissão concedida pelo SAMBA. Caso o diretorio que esteje sendo compartilhado não possua permissões de gravação e escrita para um usuário especifico, a escrita ou leitura do mesmo não será possível;
writeable = yes

# Faz com que o compartilhamento esteja visivel. Caso o valor “no” seja inserido, o compartilhamento ira desaparecer, ou seja, ficara indisponivel para acesso (utel em casos de manutenção ou alteração de configuração em um único compartilhamento);
available = yes

# Opção que faz com que o compartilhamento fique oculto ou não. Quando com o valor “yes” define que o compartilhamento ficara vizivel e, quando com o valor “no” significa que o mesmo ficara oculto, porem acessivel atraves de seu nome de compartilhamento;
browseable = yes

# Permissões que os novos arquivos que forem inseridos nesse compartilhamento terão. Tenha em mente que as configurações de permissão do Filesystem tem privilegios sobre essa configuração do SAMBA, ou seja, se a configuração de permissão do Filesystem for mais restritiva que a do SAMBA, a do Filesystem tem privilegio e será utilizada;
create mask = 644

# Proibe que sejam inseridos arquivos com as extensões listadas abaixo nesse compartilhamento;
veto files = /*.bat/*.exe/*.msi/

# Essa opção adiciona um modulo a mais ao servidor SAMBA. Com ela, podemos ativar o uso de uma lixeira no SAMBA, ou seja, um local para onde arquivos excluídos do compartilhamento irão ser armazenados. Detalhe: Essas opções sobre a lixeira podem ser inseridas na seção Global no arquivo de configuração do SAMBA (para que todos os compartilhamentos tenham uma pasta de lixeira), ou inserido em um único compartilhamento em especifico (para que somente o mesmo tenha uma lixeira – nesse caso, vou utilizar essa segunda opção).
vfs objects = recycle

# Essa opção da lixeira, faz com que os arquivos que forem deletados não fiquem misturados no diretório raiz da lixeira. Com essa opção, os arquivos são organizados de uma forma que facilita a identificação do mesmo, caso necessário;
recycle:keeptree = yes

# A opção da lixeira “recycle:versions = yes”, faz com que o SAMBA mantenha diferentes versões de um arquivo excluído, em vez de manter a ultima versão do mesmo. Os arquivos repetidos passarão a ter uma nomenclatura conforme exemplo abaixo:
“Copy #1 Samba.sxw”;
“Copy #2 Samba.sxw”; Etc...
recycle:versions = yes

# Podemos organizar e centralizar todas as lixeiras em uma única partição de disco ou em um único diretório. Nesse caso, estamos configurando para que as lixeiras dos usuários sejam armazenadas no diretório /var/spool/samba/trash. A variavel do SAMBA “%U” que aparece no final do caminho absoluto do arquivo significa que será criado uma pasta com o nome de cada usuário do sistema, com o objetivo de que cada usuário tenha sua pasta de lixeira e apenas o mesmo consiga acessa-la (ou seja, os demais usuários não conseguirão acesso a mesma).
recycle:repository = /var/spool/samba/trash/%U

Observação: O diretório /var/spool/samba/trash não existe por default. Com isso, é necessário realizar a criação da mesma manualmente e definir as permissões de modo que todos os usuários tenham permissões de escrita na pasta “Trash” para que possam manipular seus arquivos na lixeira, como excluir, etc. Segue abaixo respectivamente, como criar o diretório e como definir as devidas permissões ao mesmo:

# mkdir /var/spool/samba/trash
# chmod -R 1777 /var/spool/samba/trash


Observação 2: Após criado o diretório e definida as devidas permissões, é necessário criar um outro compartilhamento no SAMBA, especificando o caminho onde a lixeira (ou melhor, onde o diretório que servirá de lixeira está localizado). Segue abaixo como deve ser criado o compartilhamento no arquivo de configuração do SAMBA:

[lixeira]
comment = Lixeira do SAMBA para o compartilhamento arquivos
path = /var/spool/samba/trash/%U
writable = yes

Observação 3: Não esquecer de inserir a variavel “%U” no compartilhamento, pois é ela quem vai criar as pastas de cada usuário dentro do diretório /var/spool/samba/trash.

# Ambas as entradas servem para especificar que determinadas extensões de arquivos e nomes de diretórios não devem ficar gravados na lixeira, como no caso são extensões de arquivos e diretórios de arquivos temporários, que podem ser gerados com as movimentações de leitura e escrita nos diretórios. Com isso, esses tipos de arquivos e diretórios serão excluídos da lixeira;
recycle:exclude = *.tmp, *.log, *.obj, ~*.*, *.bak, *.iso
recycle:exclude_dir = tmp, cache

Para que todas as alterações entram em funcionamento, salve o arquivo de configuração do SAMBA (/usr/local/etc/smb.conf) e reinicie o daemon do SAMBA. 
 
 

Adicionando usuários para acesso aos Recursos



Passo 6: Agora, para que funcione devemos adicionar os usuários no sistema e também na base de dados do SAMBA. Segue abaixo procedimentos necessários:

Adicionado usuário no sistema e definindo uma senha para o mesmo:

# pw useradd -n joao -u 1005 -g 1005 -c Usuário para acesso a compartilhamentos -d /home/joao -s /bin/sh

# passwd joao


Nota: Usuários podem ser adicionados no sistema com auxilio do utilitário “sysinstall”. Adicionado um usuário no SAMBA:

# smbpasswd -a joao (Depois, definir a senha)

Pronto. Basta a partir de uma estação Windows tentar o acesso ao compartilhamento. Isso pode ser feito atraves do caminho UNC. Por exemplo:

\\192.168.1.20\arquivos onde: IP do Servidor SAMBA + Compartilhamento chamado “arquivos”.

Observação: Para verificar se os daemons do SAMBA estão em execução, versão do SAMBA e demais informações uteis, podemos utilizar os comandos abaixo:

# /usr/local/etc/rc.d/samba status
# smbstatus
# top
# ps -aux | grep smbd nmbd


Observação 2: A maiora das alterações realizadas no arquivo de configuração do SAMBA (/usr/local/etc/smb.conf) para que as mesmas entrem em funcionamento, é necessário “restartar” o serviço do SAMBA. Isso pode ser feito atraves do comando abaixo:

# /usr/local/etc/rc.d/samba restart

Compartilhando e Gerenciando Impressoras

Passo 7: O lpd é o antigo daemon de spooler de impressão utilizado no FreeBSD e na maioria dos sistemas baseados em Unix. Ele é um protocolo que está definido na RFC 1179 e é capaz de lidar com solicitações de impressões de entrada de rede ou localmente e armazena-las no diretório onde o mesmo utiliza para fazer “spool”, e em seguida envia-los para as respectivas impressoras. O daemon lpd utiliza o arquivo de configuração /etc/printcap para poder se comunicar com as impressoras. Por esse arquivo ser complicado de se trabalhar, existe um utilitário que pode ser instalado via Ports chamado “apsfilter”, localizado em /usr/ports/print/apsfilter.

Para habilitar a execução do daemon, basta inserir a entrada abaixo no arquivo de configuração /etc/rc.conf:

lpd_enable=”YES”

# sh /etc/netstart # /etc/rc.d/lpd start

Observação: Esse sistema de impressão é obsoleto, e não é muito utilizado atualmente. Em substituição a esse sistema, foi lançado o CUPS.

O CUPS é o acrônimo de Common Unix Printing System. É um sistema para gerenciamento e controle de impressoras, com uma interface muito mais amigavel e simples em comparação ao daemon lpd. Além de suportar o próprio protocolo lpd, o CUPS possui suporte nativo aos seguintes protocolos de impressão:
  • IPP (Internet Printing Protocol);
  • SMB;
  • Protocolo HP JetDirect;
Podemos dizer que a “grosso” modo o CUPS é um super melhoramento do sistema lpd. Além dos vários protocolos suportados, o CUPS suporta Controle de Acesso, Encriptação e Autenticação.

Instalando o CUPS

O CUPS pode ser instalado via Ports, conforme os passos abaixo:

# cd /usr/ports/print/cups
# make install clean


Basta aguardar alguns minutos que o CUPS ira ser instalado. Durante a instalação pode ser lhe perguntando sobre a instalação de bibliotecas e itens adicionais. Apenas siga com a instalação padrão (default).

Nota: Opcionalmente, nas opções da biblioteca “GhostScript8” você pode selecionar a primeira opção para definir o tamanho default da página como A4 e não Letter.

Habilitando a execução do daemon do CUPS

Para habilitar a execução do daemon, basta inserir a entrada abaixo no arquivo de configuração /etc/rc.conf:

cupsd_enable=”YES”

# sh /etc/netstart

ou

Reiniciarlizar o sistema:

# shutdown -r now

Manipulando o daemon do CUPS

Assim como qualquer serviço de sistema, o daemon do CUPS (cupsd) pode ser iniciado, pausado e reiniciado, através dos comandos abaixo:

# /usr/local/etc/cups/cupsd.conf start
# /usr/local/etc/cups/cupsd.conf stop
# /usr/local/etc/cups/cupsd.conf restart


Opcional (para ver o status do daemon):

# /usr/local/etc/cups/cupsd.conf status

Preparando o arquivo de configuração: /usr/local/etc/cups/cupsd.conf

Após a instalação do CUPS, necessitamos configurar (ajustar) seu arquivo de configuração para que possamos acessa-lo via Browser para poder realizar as configurações/gerenciamento de impressoras e jobs (trabalhos). O arquivo de configuração, deve possuir o conteudo abaixo:

# ee /usr/local/etc/cups/cupsd.conf

Inicio do arquivo de configuração:

# Log general information in error_log - change "warn" to "debug"
# for troubleshooting...
LogLevel warn
# Administrator user group...
SystemGroup
# Only listen for connections from the local machine.
Port 631
#Listen localhost:631
Listen /var/run/cups.sock
# Show shared printers on the local network.
Browsing On
BrowseOrder allow,deny
BrowseAllow all
BrowseAddress @LOCAL
BrowseLocalProtocols CUPS
# Default authentication type, when authentication is required...
DefaultAuthType Basic
DefaultEncryption IfRequested
# Restrict access to the server...

Order deny,allow
Deny From All
Allow From 127.
Allow From 192.168.1.
</Location>
# Restrict access to the admin pages...

Order deny,allow
Deny From All
Allow From 127.
Allow From 192.168.1.
</Location> # Restrict access to configuration files...

AuthType Default
Require user @SYSTEM
Order deny,allow
Allow From 127.
Allow From 192.168.1.
</Location>
# Set the default printer/job policies...

# Job-related operations must be done by the owner or an administrator...
<Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job CUPS-Move-Job CUPS-Get-Document>
Require user @OWNER @SYSTEM
Order deny,allow
</Limit>
# All administration operations require an administrator to authenticate...
<Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default CUPS-Get-Devices>
AuthType Default
Require user @SYSTEM
Order deny,allow
</Limit>
# All printer operations require a printer operator to authenticate...
<Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After CUPS-Accept-Jobs CUPSReject-
Jobs>
AuthType Default
Require user @SYSTEM
Order deny,allow
</Limit>
# Only the owner or an administrator can cancel or authenticate a job...
<Limit Cancel-Job CUPS-Authenticate-Job>
Require user @OWNER @SYSTEM
Order deny,allow
</Limit>
<Limit All>
Order deny,allow
</Limit>

# Set the authenticated printer/job policies...

# Job-related operations must be done by the owner or an administrator...
<Limit Create-Job Print-Job Print-URI>
AuthType Default
Order deny,allow
</Limit>
<Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications
Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job CUPS-Move-Job CUPS-Get-Document>
AuthType Default
Require user @OWNER @SYSTEM
Order deny,allow </Limit> # All administration operations require an administrator to authenticate...
<Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default>
AuthType Default
Require user @SYSTEM
Order deny,allow
</Limit>
# All printer operations require a printer operator to authenticate...
<Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer
Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After CUPS-Accept-Jobs CUPSReject-Jobs>
AuthType Default
Require user @SYSTEM
Order deny,allow
</Limit>
# Only the owner or an administrator can cancel or authenticate a job...
<Limit Cancel-Job CUPS-Authenticate-Job>
AuthType Default
Require user @OWNER @SYSTEM
Order deny,allow
</Limit>
<Limit All>
Order deny,allow
</Limit>


Observação: O arquivo já está com comentários (em Inglês) descrevendo a funcionalidade básica de cada opção inserida no arquivo. Basta reiniciar o serviço do CUPS para que as configurações entrem em funcionamento.
  

Acessando o CUPS através de um host da Rede Local



Atraves de uma máquina da rede, podemos acessar o painel de gerenciamento do CUPS via Browser (Navegador). Não recomendo o IE para o acesso ;-). Segue abaixo o endereço que devo acessar:

http://192.168.1.20:631/

Nota: Por default, o CUPS “escuta” na porta lógica 631. Se não estiver conseguindo o acesso, revise o arquivo de configuração do CUPS (provavelmente está sem acesso lá no arquivo), e tente checar se a porta lógica está sofrendo algum tipo de bloqueio (Firewall, etc). Atraves de um programa PortScan (como o NMAP, por exemplo), podemos checar se a porta está aberta e aceitando conexões, atraves do comando abaixo:

# nmap -sS -p 631 localhost

Será retornado a mensagem abaixo, indicando que a porta está aberta (open):

Starting Nmap 5.21 ( http://nmap.org ) at 2011-03-03 23:59 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000066s latency).
PORT STATE SERVICE
631/tcp open ipp
Nmap done: 1 IP address (1 host up) scanned in 1.19 seconds

Compartilhando impressoras com o SAMBA

O CUPS é uma poderosa ferramenta para:
  • Instalação Impressoras;
  • Gerenciamento de Impressoras;
  • Gerenciamento de Jobs (Trabalhos de Impressão);
  • Separação de impressoras por Classes (Organização);
  • Visualização do seu próprio arquivo de log/job;
  • Edição de seu próprio arquivo de configuração;
  • Etc;

Enfim, possui muita funcionalidade que são utilizadas mediante a necessidade de um ambiente em especifico. Para podermos compartilhar essas impressoras com os usuários, fazemos isso atraves do SAMBA.

Para isso, podemos inserir uma sessão adicional chamada “Printers” ao arquivo de configuração só SAMBA, fazendo com que todas as impressoras instaladas no CUPS sejam mapeadas para todos os usuários, sejam eles cadastrados no sistema e/ou no SAMBA. Segue abaixo o conteudo que deve ser inserido no arquivo de configuração do SAMBA (/usr/local/etc/smb.conf):

[printers]
comment = Compartilhamento de todas as impressoras
path = /var/spool/samba
print ok = yes
guest ok = yes
browseable = yes
hosts allow = 192.168.1.

Explicando opções relevantes:

# Diretorio utilizado para o spool de impressão (Area temporária);
path = /var/spool/samba

# Faz com que o compartilhamento da impressora este ativo e operante;
print ok = yes

# Permite que qualquer usuário possa imprimir, seja ele cadastrado no SAMBA ou não;
guest ok = yes

# Define quais hosts poderão utilizar as impressoras. No caso todos os hosts de minha rede local;
hosts allow = 192.168.1.

Afinando as configurações de impressoras no SAMBA

É possível também especificar o compartilhamento individual de cada impressora, o que é muito util quando o servidor compartilha várias impressoras diferentes e diferentes permissões precisam ser aplicadas a cada uma delas. Para criarmos um compartilhamento especifico de uma impressora já instalada no CUPS (por exemplo, uma HPC3180), devemos inserir a entrada abaixo no final do arquivo de configuração do SAMBA:

[hpc3180]
path = /var/spool/samba
print ok = yes
guest ok = yes
browseable = yes
hosts allow = 192.168.1.
invalid users = joao, maria, pedro

Explicando:

Nesse caso estou compartilhando a impressora de nome hp3180 (nome do compartilhamento definido no momento da instalação da impressora no CUPS) com algumas permissões diferentes, onde todos os usuários de minha rede local podem imprimir, menos os usuários joao, maria e pedro, independente da máquina que estejam. Isso é possível atraves das opções abaixo:

hosts allow = 192.168.1.
invalid users = joao, maria, pedro

Nota: Sempre, após alguma alteração para que a mesma possa entrar em vigor reinicie o daemon do SAMBA para que as mesmas entram em funcionamento.

Observação: Tenha em mente que o CUPS também pode ser utilizado para compartilhar as impressoras, mas o SAMBA é utilizado para fazer isso devido a flexibilidade que pode fornecer.

Observação 2: No exemplo do compartilhamento das impressoras, tenha em mente também que o driver não é fornecido. Com isso, caso esteja adicionando essa impressora em ambiente Windows, você deve possuir o driver correto da impressora para que a mesma possa funcionar corretamente.

Usando e Habilitando o SWAT para editar a configuração do SAMBA

SWAT:

Podemos realizar toda a configuração do SAMBA atraves de um navegador WEB, através de uma interface de menus gráfica. Para muito administradores, a melhor maneira é editar o arquivo diretamente via linha de comando, mas o SWAT (SAMBA Web Administration Tool) é uma boa ferramenta para que está começando e deseja aprimorar mais suas habilidades e conhecimentos. Para poder utiliza-lo, não é necessário a instalação de nenhum servidor WEB de terceiros, pois ele possui seu próprio manipulador de solicitações WEB.

Habilitando o SWAT no arquivo /etc/inetd.conf:

O daemon inetd é considerado um serviço de Internet “Super-Server”. Basicamente, ele é responsavel por escutar por certas conexões a alguns sockets configurados no servidor em questão. Apenas receber uma solicitação, o mesmo analisa qual programa o socket necessita e o invoca para poder ser executado e atender a solicitação em questão. Após o programa ser utilizado, o inetd continua a escutar o socket para aguardo de novas conexões/solicitações.

Para habilitar o SWAT no arquivo de configuração do daemon inetd, basta descomentar a ultima linha do arquivo que diz respeito ao SWAT, conforme segue a mesma abaixo:

swat stream tcp nowait/400 root /usr/local/sbin/swat swat

Explicando:

Editar o arquivo de configuração do daemon inetd:

# ee /etc/inetd.conf

Descomentar ou inserir (caso não exista) a linha abaixo referente ao “socket” do SWAT:

swat stream tcp nowait/400 root /usr/local/sbin/swat swat

Habilitando a execução do daemon do Inetd

Para habilitar a execução do daemon, basta inserir a entrada abaixo no arquivo de configuração /etc/rc.conf:

inetd_enable=”YES”

# sh /etc/netstart

Feito isso, basta agora iniciarmos o serviço do inetd para podermos acessar a interface de configuração do SWAT. Segue comando abaixo:

# /etc/rc.d/inetd start

Agora, a partir de uma máquina da rede, acesse via Browser a interface de configuração do SWAT, atraves do seguinte endereço:

http://ipdoservidor:901/

Explicando:
  • ipdoservidor: Deve ser o endereço IP do servidor SAMBA;
  • 901: Porta default utilizada pelo SWAT. Certifique de que a mesma não está bloqueada no Firewall ou dispositivo de segurança da máquina do de sua rede local (LAN).

Nota: Tenha em mente que as configurações deitas atraves do SWAT, serão aplicadas diretamente no arquivo de configuração do SAMBA (/usr/local/etc/smb.conf). Com isso, muito cuidado com as alterações realizadas.

Dica: Caso queira testar o SWAT, faça antes uma cópia do arquivo de configuração do SAMBA, para que possa voltar ao normal caso alguma configuração saia errado ou não esteja satisfeito com alto e não consiga reverter depois. Essa cópia pode ser feita para o seu diretório HOME, como por exemplo para o usuário João:

# mkdir /home/joao/backup
# cp /usr/local/etc/smb.conf /home/joao/backup/smb.conf.backup


Explicando:
  • mkdir /home/joao/backup: Criando um diretório para armazenar o backup do arquivo do SAMBA;
  • cp /usr/local/etc/smb.conf /home/joao/backup/smb.conf.backup: Copiando o arquivo principal de configuração do SAMBA para o diretorio criado anteriormente;

Referências

  • Livro: Servidores Linux (Guia Pratico) – Carlos E. Morimoto;
  • Livro: Network Administration with FreeBSD 7 – Babak Farrokhi;
  • Meus conhecimentos/Experiência;
Close Menu