terça-feira, 29 de setembro de 2015

GERENCIANDO LAN (LAN HOUSE OU CYBER-CAFÉ) COM SOFTWARE LIVRE (OPENASB)



Uma funcionária responsável por uma biblioteca pediu-me uma solução para seu problema:


Dentro de uma biblioteca, existem 6 máquinas disponíveis para acesso a internet, sendo assim, estudantes que necessitam fazer pesquisas podem usá-los, desde que, utilizem por apenas 30 minutos e; não possuam permissões dentro do sistema operacional para alterar qualquer item do mesmo. As máquinas funcionam com Ubuntu para não ter problemas com "vírus".


Com o intuito de descascar esse abacaxi, pesquisei diversas forma de criação de script (em ShellScript) que encerrasse a sessão do usuário. Mas, deparei-me com a possibilidade de atrapalhar algum cadastro de algum visitante, pois encerrando a sessão, todos aplicativos iram fechar automaticamente. Em outra tentativa, fiz um script que bloqueasse a sessão do usuário. Contudo, outro problema surgiu: como estabelecer o tempo de acesso, corretamente para cada estudante.


Foi então que conheci o OpenASB, um aplicativo para Lan House, de código livre, desenvolvido em Gambas3 (linguagem de programação). Desta forma, conseguimos suprir nossas principais necessidades, estabelecendo o tempo de acesso, apresentando uma página de bloqueio que pode ser personalizada, possui ainda, diversas formas de bloqueio para usuário comum. Contudo, outras opções de segurança tivemos que fazer manualmente, como: bloquear acesso terminal (usermod -s /bin/false usuário); retirar a permissão de sudoers do usuário corrente (gpasswd -d  usuário sudo); bloquear papel de parede para manter o mesmo padronizado para todas as máquinas, até porque usuário comum adora modificar (chmod 555 -R ~/.config/dconf).


OpenASB Servidor:




O OpenASB precisa de um servidor para controlar as demais máquinas, esse mesmo servidor precisa estar configura com as seguintes características:

- IP fixo;

- Ubuntu 15.04 (no 14.10 não funcionou direito);

- Gambas3 (o OpenASB só funciona com o Gambas3 instalado);

- Xvnc (para acesso remoto).


OpenASB Client:



O módulo cliente terá que ser configurado com as seguintes características:

- OpenASB apontar para o Servidor;

- Ubuntu 15.04;

- Gambas3;

- Xvnc;


- O cliente precisa de dois usuários, um para permissão de "sudo" e outro com permissão padrão ou remover do grupo de sudoers (gpasswd -d usuário sudo);

- Bloquear acesso terminal (usermod -s /bin/false usuário);

- Para manter um trabalho com um bom acabamento, foi padronizado os papeis de paredes das máquinas dos clientes, e em seguida bloqueado (chmod 555 -R ~/.config/dconf). 



Referências:


CORRIGIR "ERRO DE SISTEMA 85" - NÃO CARREGA CORRETAMENTE PERFIL DO USUÁRIO DO DOMÍNIO

Ao logar com meu usuário do AD, não consegui as permissões liberada para mim por exemplo: todos os usuários do meu setor estão com permissões para acessar o youtube. Contudo, no perfil não foi possível.

Para resolução deste problema foi executado os seguintes procedimento:

1º - Corrigir o "o erro de sistema 85"


Esse comportamento é causado por uma configuração de 1 na seguinte valor do registro:

HKLM\System\CurrentControlSet\Control\SessionManager\ProtectionMode

Se a configuração for 1, o problema ocorre. Se você alterar a configuração para 0 e reinicie o servidor, o problema desaparece.

2º - Forçar a atualização do perfil do usuário:


Abra o CMD e digite:

gpupdate /force


segunda-feira, 21 de setembro de 2015

COMO INGRESSAR LINUX (UBUNTU 15.04) NO AD

Precisei ingressar meu Ubuntu 15.04 no AD, como sei que vou precisar desse artigo de vez em quando, estou postando no meu blog, mas todo conteúdo é do VIVAOLINUX, o endereço completo desse artigo encontra-se nas referencias deste post


PRÉ-REQUISITOS E FINALIDADE DE CADA UM PARA O TRABALHO



Antes de começar a trabalhar, é necessário saber quais são os serviços que o desktop com o sistema GNU/Linux precisa ter rodando para ingressar no domínio. Abaixo descrevo os serviços:
  • Kerberos
  • Winbind
  • Samba
Kerberos é um protocolo de rede usado para autenticação de usuários e/ou serviços de rede, como o Active Directory. utilizando um sistema criptografado, permitindo comunicações seguras e identificadas em redes, fazendo uso de tickets (chaves criptografadas).

O Active Directory faz uso deste serviço para autenticação em rede, logo, as máquinas clientes terão que ter informações do KDC (Centro de Distribuição de Chaves) para autenticar-se no Active Directory.

O Winbind é um daemon usado pelo PAM, NSSWITCH, Samba e podendo ser usado por outros serviços de rede e/ou sistema, fazendo a interface entre o PDC e o computador cliente rodando o serviço Winbindd, permitindo que máquinas com o sistema GNU/Linux comuniquem-se com DC Active Directory.

O Samba até a versão 3, que é a que será usada nesse artigo, é um serviço cuja principal função é disponibilizar recursos compartilhados em uma rede, tais como arquivos e impressoras. Mas será usado para autenticação de usuários no servidor onde está rodando devido o winbind depender do mesmo.

O mesmo faz uso de dois serviços, são NMB e SMB.

O serviço NMB tem a principal finalidade de resolução de nomes NetBIOS para que o servidor Samba possa enxergar e ser enxergado pelas outras máquinas. Então, este serviço permite a navegação pela rede, usando os hostnames das máquinas e o acesso às mesmas em rede.

O serviço SMB permite compartilhar tais recursos e autenticar os usuários no servidor Samba local, ou repassa as solicitações de autenticação para outro computador, como um servidor controlador de domínio com o Active Directory.

CONSIDERAÇÕES DE AMBIENTE DE REDE


No ambiente proposto no artigo, já existem os servidores DNS em execução na rede, pois, para a autenticação ser feita, é necessário o uso do DNS e o servidor com Active Directory configurado como controlador de domínio principal já instalado e funcionando.

Veja a disposição dos servidores na rede para explicação do artigo:
  • Domínio → adm.pi.empresa.br
  • Servidor DNS primário → 10.0.0.2
  • Servidor DNS Secundário → 10.0.0.13
  • Servidor DHCP → 10.0.0.2
  • Servidor controlador de domínio → 10.0.0.2 adm.pi.empresa.br

Como os clientes serão configurados pelo serviço DHCP, só especificarei o nome da máquina cliente:
  • Desktop cliente → ubuntu

======================================================

Agora será abordada a parte técnica do trabalho.

ARQUIVO /ETC/HOSTS, INSTALAÇÃO DE PRÉ-REQUISITOS E KERBEROS

ARQUIVO /ETC/HOSTS

Nesta parte iremos editar o arquivo /etc/hosts incluindo uma alias para o endereço do controlador de domínio e alterar o hostname do desktop cliente (mintvirt), acrescentando o fqdn, ou seja, o nome do domínio junto ao hostname da máquina cliente.

No entanto, substitua os nomes abaixo pelos correspondentes na sua rede.

# vim /etc/hosts

Conteúdo a ser acrescentado:

127.0.0.1 ubuntu.adm.pi.empresa.br localhost ubuntu 
10.0.0.2 server

Observe que "server" é nome do controlador de domínio usado no artigo, troque pelo nome do controlador de domínio de sua rede. Execute o comando abaixo para ver o nome da máquina completo, ou seja, o hostname com o nome do domínio da máquina cliente:

# hostname -f

INSTALAÇÃO DE PACOTES NECESSÁRIOS


Para que o desktop GNU/Linux possa migrar no domínio, é necessário fazer a instalação dos seguintes pacotes descritos a seguir, lembrando que os pacotes abaixo, são para distros Debian like:

# apt-get install krb5-user krb5-config winbind samba samba-common smbclient cifs-utils libpam-krb5 libpam-winbind libnss-winbind

Durante a instalação do kerberos, vai ser apresentado algumas telas com perguntas referentes ao KDC, mas pode dá um ENTER e seguir com a instalação dos pacotes, pois a configuração do kerberos será abordada mais a frente.

SERVIÇO NTP - SICRONIZANDO DATA E HORA COM O SERVIDOR


Para que a máquina cliente possa comunicar-se sem problemas com o controlador de domínio Windows Server, é necessário que o horário e data de ambas as máquinas estejam sincronizadas. Para isso, teremos que configurar o cliente NTP para atualizar data e hora pelo servidor Active Directory.

Edite o arquivo de configuração do serviço NTP usando o Vim:

# vim /etc/ntp.conf

Nas linhas do arquivo onde o conteúdo começa com a palavra "server", comente estas linhas com uma cerquilha "#", e adicione o seguinte conteúdo:

# Controlador de domínio #

server 10.0.0.2
restrict 10.0.0.2

Veja que ambos os endereços são do controlador de domínio. Agora, reinicie o serviço de data e hora:

# /etc/init.d/ntp stop
# /etc/init.d/ntp start

O Ubuntu usa o Upstart, então, para reiniciar o serviço é diferente. Para uma leitura mais abrangente, leia o conteúdo desse link:


O ambiente proposto pelo artigo, existe um servidor DHCP, então, não é necessário configurar o DNS, já que esse trabalho é feito pelo serviço DHCP. No entanto, se não estiver usando um serviço DHCP, edite o arquivo /etc/resolv.conf indicando os endereços dos servidores de nome, como mostrado abaixo:

# vim /etc/resolv.conf

search adm.pi.empresa.br
nameserver 10.0.0.2
nameserver 10.0.0.13

Substitua os endereços acima e o nome do domínio informado pelos endereços de seus servidores DNS e o nome do seu domínio na rede onde está configurando a máquina cliente.

KERBEROS


Para um usuário autenticar-se no Active Directory, é necessário editar o arquivo /etc/krb5.conf e incluir informações sobre o servidor KDC (controlador de domínio kerberos). Nesse caso, o controlador de domínio com o Active Directory possui um KDC. Use o Vim para editar o arquivo e inclua as seguintes linhas no arquivo:

# vim /etc/krb5.conf

Conteúdo acrescentado:


[libdefaults]

default_realm = PI.EMPRESA.BR

[realms]

PI.EMPRESA.BR = {

kdc = winactive.pi.empresa.br

default_domain = PI.EMPRESA.BR

admin_server = winactive.pi.empresa.br

}

[domain_realm]

.adm.pi.empresa.br = ADM.PI.EMPRESA.BR

EXPLICAÇÃO DA CONFIGURAÇÃO


Este arquivo é organizado em seções. As seções inclusas para autenticação no domínio são listadas abaixo junto com suas sub-seções:

[libdefaults] → Seção que contém valores padrão para o Kerberos V5, nessa seção só deixei uma única sub-seção, explicada a seguir.

default_realm → Esta sub-seção identifica o domínio padrão a ser usado pelo cliente kerberos.

[realms] → O kerberos divide a rede em domínios seguros, chamados de "realms", então esta seção contém sub-seções informando nomes de "realms" do Kerberos, informando onde encontrar os servidores Kerberos para domínios seguros específicos e outras informações.

Neste caso, criei uma sub-seção chamada de "ADM.PI.EMPRESA.BR", que é referente ao domínio seguro no qual a máquina irá ingressar. E dentro, criei as seguintes sub-seções:
kdc → Aqui se configura o nome da máquina que está executando o controlador de domínio do kerberos mestre, como o controlador de domínio rodando o Active Directory está executando o KDC, então inclui o nome completo da máquina aqui.

default_domain → Nesta sub-seção se especifica o domínio seguro padrão.

admin_server → Esta sub-seção identifica o host onde o servidor que faz administração do kerberos está sendo executado.

[domain_realm] → Seção que indica os mapas de domínios e sub-domínios.

Depois de configurar o kerberos, vamos testar a comunicação entre o servidor e desktop. Execute o comando abaixo, no exemplo estou usando o nome "fulando", que é um usuário do domínio criado, mas substitua pelo nome do usuário que estiver cadastrado no servidor.

# kinit fulano

Se o comando não retornar nenhuma saída, é porque a comunicação está sendo realizada com sucesso. Agora vamos listar o ticket obtido nessa comunicação usando o comando:

# klist

O comando klist deverá retornar uma saída como a que está abaixo:

Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: fulano@pi.empresa.br

Valid             starting    Expires                        Service principal
13-11-2012  15:48:35  14-11-2012 01:49:08   krbtgt/ADM.PI.EMPRESA.BR@ADM.PI.EMPRESA.BR
renew until 16-11-2012 15:48:35

======================================================

CONFIGURANDO SAMBA, INGRESSANDO MÁQUINA NO DOMÍNIO E ARQUIVO /ETC/NSSWITCH.CONF


CONFIGURANDO O SAMBA


Antes de colocar a máquina no domínio, é necessário configurar o Samba para que seja possível à máquina ingressar no domínio. Toda configuração é feita no /etc/samba/smb.conf, o Winbind não precisa configurar pois o mesmo é um daemon usado pelo Samba. Edite o arquivo /etc/samba/smb.conf com Vim: # vim /etc/samba/smb.conf Inclua as seguintes linhas no arquivo "smb.conf", caso algumas dessas linhas já estejam dentro do arquivo, edite e deixa-as como está abaixo. O arquivo está bem comentado com explicações dos principais parâmetros:

[global]

security = ads # O modo de operação ADS faz com que o Samba se comporte como um membro (cliente) de um domínio Windows

realm= ADM.PI.EMPRESA.BR # Informa o domínio que controlador de domínio Kerberos que será usado

workgroup = ADM # Informa o grupo de trabalho, nesse caso informa o domínio

idmap uid = 10000-15000 # Especifica o intervalo de IDs de usuários que serão mapeados para o sistema local, coloquei um intervalo de cinco mil, mas pode colocar menor ou maior número

idmap gid = 10000-15000 # Especifica o intervalo de GIDs de grupos que serão mapeados para o sistema local
winbind enum users = yes # Permiti o winbind enumerar usuários

winbind enum groups = yes # Permiti o winbind enumerar grupos

template homedir = /home/%D/%U # Informa aonde será criado o diretório home de cada usuário após logar no sistema, o parâmetro %D informa o nome do domínio e %U o nome do usuário

template shell = /bin/bash # Informa qual shelll será atribuído ao usuário, você pode incluir /bin/false para impedir que o usuário faça uso do shell, mas irá ser usado por todos usuários do domínio

client use spnego = yes # Este parâmetro controla se smbclient irá usar negociação simples e protegido na autenticação, essa opção permite usar o Kerberos

winbind use default domain = yes # Parâmetro usado para não incluir o nome do domínio a ser usado junto ao nome do usuário no sistema, por exemplo: DOMINIO\usuário. Habilitando esse parâmetro, somente o nome do usuário será usado para identificar o mesmo

restrict anonymous = 2

winbind refresh tickets = yes # Este parâmetro é usado para controlar se o winbind deve atualizar os tickets do Kerberos usando o módulo pam_winbind

Observe que nem todos os parâmetros são necessários para ingressar a máquina no domínio. Depois de editar, salve as alterações e reinicie os serviços do Samba e Winbind.

# service winbind restart

# service samba restart

No Ubuntu, reinicie da seguinte forma:

# service winbind restart

# restart smbd

# restart nmbd


INGRESSANDO A MÁQUINA NO DOMÍNIO


Depois de configurar o Samba, é hora de ingressar a máquina no domínio com o comando net. Execute o comando abaixo como root:

# net ads join -U Administrador

Veja que usei a opção "-U" no comando net, seguido do nome do usuário com permissão de ingressar máquinas no domínio, o usuário Administrador foi usado. Após a execução do comando, deverá retornar uma mensagem como que está abaixo:

Using short domain name - ADM
Joined 'UBUNTU' to realm 'ADM.PI.EMPRESA.BR'

Agora, faça o teste e liste os grupos e usuários do domínio com o comando wbinfo. Para listar usuários execute:

# wbinfo -u

Para listar os grupos execute:

# wbinfo -g

Caso não retorne nenhum nome de usuário ou grupo, reinicie o Winbind.

ARQUIVO NSSWITCH.CONF


Depois ingressar a máquina no domínio, vamos configurar o arquivo /etc/nsswitch.conf para que o sistema possa saber onde buscar informações de login dos usuários que estão se autenticando. É neste arquivo que iremos comunicar ao sistema que ele deve procurar nossas informações de login usando o Winbind. Edite o arquivo usando o Vim e deixando as linhas abaixo como demonstrado. Em seguida, salve as alterações:

# vim /etc/nsswitch.conf

Conteúdo alterado:

passwd: compat winbind

group: compat winbind

Veja que, como estamos lidando com usuários, grupos e senhas, apenas alteramos as linhas que correspondem aos mesmos, estamos informando ao sistema que ele deve procurar nossas informações de login usando o Winbind nas linhas:

"passwd: compat" para senha

"group: compat" para group

======================================================

CONCLUINDO O TRABALHO


ALGUNS DETALHES E ESCLARECIMENTOS

Muitos howtos encontrados na Internet mostram configurações adicionais desnecessárias, fazendo alterações em vários arquivos de autenticação do PAM. Mas a maioria destas configurações não são necessárias, pois ao instalar os pacotes Winbind e o pacote que contém as bibliotecas do kerberos, o próprio sistema se encarrega de alterar os arquivos sem qualquer intervenção dos usuários, com exceção de um arquivo.

O único arquivo que se faz necessário a intervenção do usuário é o /etc/pam.d/common-session (em distros Debian like).

Então, edite o arquivo /etc/pam.d/common-session e após linha abaixo:

session required pam_unix.so

Inclua esta:

session required pam_mkhomedir.so umask=0022 skel=/etc/skel

A linha mencionada anteriormente faz o diretório home de cada usuário ser criado automaticamente no inicio de cada sessão após a autenticação do usuário, setando as permissões para os arquivos e diretórios com a "umask 0022" e obtendo do diretório /etc/skel seus sub-diretórios e arquivos padrões. Caso esta linha não esteja adicionada, provavelmente será apresentado a seguinte mensagem após o login:




SOLUCIONANDO O PROBLEMA AO TROCAR SENHAS DURANTE O LOGIN NO UBUNTU


Todo o trabalho feito até então fará os usuários logarem nos desktops GNU/Linux sem problemas nas distros Debian e Linux Mint Debian Edition. No Ubuntu 12.04, no entanto, haverá um problema quando for solicitado para o usuário trocar a senha no momento do login. Normalmente o administrador da rede mantém um diretiva interna que indica o tempo que uma senha será válida, após esse período, a senha expira. As imagens abaixo indicam onde acontece o erro quando se tenta trocar a senha na tela de login. Quando digita-se a senha, o gerenciador de login pede para repetir a senha atual e em seguida, pede a repetição da senha atual. Depois de digitar e dar um ENTER, não é pedido para entrar com a nova senha e a mesma não é trocada, e volta em seguida para tela de login.



A solução para poder alterar senha quando solicitada e autenticar-se, é editar o arquivo /etc/pam.d/common-account alterando as duas linhas abaixo:


account[sucess=2new_authtok_reqd=donedefault=ignore]pam_unix.so account[sucess=1new_authtok_reqd=donedefault=ignore]pam_winbind.so

Deixando-as assim:


account[sucess=2new_authtok_reqd=donedefault=ignore]pam_winbind.so account[sucess=1new_authtok_reqd=donedefault=ignore]pam_unix.so

Veja que somente inverti a ordem dos módulos, colocando o módulo "pam_winbind.so" antes do módulo "pam_unix.so". Assim, após a alteração da senha e confirmação da autenticação, a classe de módulos "account" irá primeiro consultar o módulo "pam_winbind.so", permitindo o acesso e não dando o erro de antes. Veja nas imagens abaixo como fica a solicitação de alteração de senha. Digitando nome de usuário senha atual:



Solicitando a repetição da senha atual:



Pedindo para repetir outra vez a senha atual:



Solicitando a nova senha:



Pedindo para confirmar a nova senha:



TELA DE LOGIN NO UBUNTU

Uma dica para quem usa o Ubuntu, é alterar a tela de login do mesmo fazendo com que seja possível logar com qualquer usuário, e não somente o usuário criado na instalação do sistema, informando nome e senha. Para isso, edite o arquivo /etc/lightdm/lightdm.conf incluindo as alterações mencionadas abaixo, no final do arquivo. OBS:. No ubuntu versão 15.04 crie o arquivo, pois o mesmo não se encontra no path informado acima.


[SeatDefaults]

allow-guest=false

greeter-show-manual-login=true

greeter-hide-users=true

Depois de todas estas etapas, reinicie a máquina e ao logar, use somente o nome do usuário cadastrado no domínio. Este detalhe é interessante por causa da configuração usada no arquivo /etc/samba/smb.conf, não é necessário colocar o nome do domínio junto com o nome do usuário que irá logar no domínio, coloque somente o nome de usuário e informe a senha.

REFERÊNCIAS




Quem é Almir JR