Configurando GPO em maquinas linux através de playbooks do Ansible com Keepup no ubuntu 18.04


Este artigo demonstra como administrar várias maquinas Linux em uma rede através de playbooks do Ansible com uma ferramenta cliente servidor (Keepup).


Recentemente tive que migrar centenas de maquinas dos usuários de windows para linux, o problema e que comecei a ter dificuldades em gerenciar todas elas sem um sistema de GPO.. tentei utilizar o Ansible porem nunca conseguia rodar o playbook em todas as maquinas, sempre tinham varias desligadas e eu tinha que ta tentando executar toda hora, virou uma bagunça, logo eu percebi que precisava de uma ferramenta cliente-server que fizesse isso pra mim.. então desenvolvi um pequeno programa em Python que roda playbooks do Ansible e realiza consultas no AD para aplicar politicas nas maquinas linux.. vem me ajudando bastante e gostaria de compartilhar com vocês.. caso estejam passando pelo mesmo problema. Então essa ferramenta que nomeei de Keepup com certeza vai te ajudar.


Ao final do artigo, tem alguns links do youtube mostrando como instalar e configurar.


Como Funciona:


Após a instalação, primeiramente criaremos nossas GPOs (Playbooks-Ansible).

O Sistema está dividido entre GPOs de usuário e maquina.

GPOs de maquina executa regras de maquina (obviamente..)

GPOs de usuário executa apenas para o usuário específico, sendo necessário criar um grupo no nosso AD com o mesmo nome da GPO e adicionar os usuários dentro.

Cada maquina linux da sua rede terá duas aplicações rodando:
keepup-usr
keepup-maq

O keepup-maq será a aplicação que iniciará junto com a maquina e irá buscar atualizações de GPOs de maquina no servidor, enviando um arquivo CSV com as gpos e versões atualmente configuradas nele.

O keepup-usr será a aplicação que iniciará assim que o usuario logar, no ambiente do usuário, ou seja o processo(daemon) roda no ambiente do usuário, e irá buscar atualizações de GPOs de do usuário em questão no servidor, enviando um arquivo CSV que está no home do usuário com as gpos e versões atualmente configuradas para ele.

O servidor roda o keepup que ira receber solicitações dos clientes. 

Quando o servidor recebe uma requisição do keepup-maq ele verifica as GPOS e Versoes da maquina de acordo com as GPOS e Versoes cadastradas nele, caso houver alguma atualização necessária, será executado as gpos(playbooks) que estão no diretorio de maquina em /etc/ansible/gpo/maq.

Quando o servidor recebe uma requisição do keepup-usr, ele verifica quais grupos o usuário pertence, em seguia compara o CSV que recebeu com o do servidor e executa as gpos(playbooks) que estão no diretório de usuario em /etc/ansible/gpo/usr.

Se você ainda ficou um pouco confuso, não se preocupe, após a instalação nos iremos realizar alguns testes com GPOs de Maquina e Usuário, e você verá que na prática e bem fácil, só precisamos aprender a criar os playbooks do Ansible.

Então vamos praticar?


Realizando Instalação:


Para realizar a instalação disponibilizei o download através deste link: Baixar Keepup


Após baixar, iremos descompactar: 

1. tar -zvxf keepup.tar.gz 

Acessar o diretório: 

2. cd keepup 

3. Executar o script de instalação: 

sudo ./install.sh 


Após terminar toda instalação, verificar se não foi exibido nenhum erro.

4. Instalar o pacote ldap-utils: 

apt-get update && apt-get install ldap-utils 

5. Configurar seu Samba4 PDC: 

nano /usr/local/samba/etc/smb.conf 

Adicionar linha em [global] 

ldap server require strong auth = no 

Salvar e reiniciar serviço samba no pdc.

Alterações Necessárias no SSH:

nano /etc/ssh/ssh_config
Inserir abaixo de Host * 

StrictHostKeyChecking no
UserKnownHostsFile=/dev/null




Realizar Configuração:


0. Criar um usuário no seu servidor LDAP para realizar consultas.. 

1. Ajustar configurações em: /etc/keepup.cfg 


2. CONFIGURE /etc/ansible/gpo/maq/files/keepup-usr.py & keepup-maq.py 

Ajustar as linhas nos dois arquivos: 

HOST = 'ip_servidor_keepup' 
PORT = 'porta_servidor_keepup' 


3. Adicionar os clientes linux da sua rede em /etc/ansible/hosts abaixo de [linux-clients] Exemplo: [linux-clients] host01 host02 


4. CONFIGURAR CHAVE SSH CLIENTE E SERVIDOR Você deve gerar um par de chave ssh como ROOT. e copiar a chave publica para cada cliente da rede que usara o app 

Exemplo: ssh-keygen -t rsa 
*Pressione enter para todas as perguntas 

5. Copie o conteúdo de /root/.ssh/id_rsa.pub 

Acesse a maquina do cliente, dentro do diretório /root/.ssh/authorized_keys e cole o conteúdo da chave. 
* Se o client nao tiver ssh deve instalar. * se não existir a estrutura de pasta e arquivo, criar com mkdir e touch. 

Feito isso só salvar e sair. 

6. Verificar se o servidor acessa o cliente sem pedir senha (Use root):
 Exemplo: :# ssh root@host01

Talvez precise digitar yes apenas.. 

7.Iniciando: systemctl start keepup 

8. Para instalar nos clientes configurados em [linux-clients] 

Rode: ansible-playbook /etc/ansible/gpo/maq/maq_gpo_configure_client.yml 

9. Verificar Log: tail /var/log/keepup.log


Configurando GPOS:


GPO USUARIO:

- As GPOS de Usuario serão executadas sempre que o usuário logar na maquina, e checa por updates a cada 15 minutos.

- Todo YML de usuario deve estar no diretorio /etc/ansible/gpo/usr/ e terminar com .yml:
Exemplo:
    /etc/ansible/gpo/usr/criararquivo.yml

- Um Grupo no AD deve ser criado com o mesmo nome da gpo , e apenas os usuarios que estiverem nesse grupo rodara a respectiva gpo.

Exemplo nome grupo ad:
    criararquivo

Exemplo para outro tipo de gpo:
    arquivo: config_proxy.yml
    nome grupo ldap: config_proxy


OBS: Para mantar as gpos organizadas no AD, e sensato inciar todos arquivos yml com gpo_ sendo assim todos grupos no AD ficarão organizados, ex:
arquivos:
gpo_proxy.yml
gpo_dns.yml
grupos no ad:
gpo_proxy
gpo_dns

- Todo YML de usuario deve receber as variaveis target e username como parametro, e executar remoto como root, ex:

---
- hosts: '{{ target }}'
  remote_user: root
  vars:
    user: '{{ username }}'

* A Variavel target armazena o IP da maquina que executou.
* A Variavel user armazena o nome do usuario que executou.

Exemplo, Criando um arquivo no home do usuario que executou o ansible:

---
- hosts: '{{ target }}'
  remote_user: root
  gather_facts: no
  vars:
    user: '{{ username }}'
  tasks:
  - name: Criando um Arquivo de teste.
    file: 
      path: /home/{{ user }}/arquivoteste.txt
      state: touch


Resumo: Para criar um arquivo no home do usuario joao:
1. Criar gpo: criararquivo.yml
2. Criar grupo ad: criararquivo
3. Adicionar Joao no grupo criararquivo.


GPO MAQUINA:

- As GPOS de Maquina serão executadas sempre que o computador for ligado, e checa por updates a cada 30 minutos.

- Todo YML de maquina deve iniciar deve estar no diretorio /etc/ansible/gpo/maq e terminar com .yml:
Exemplo:
        /etc/ansible/gpo/maq/criararquivo.yml

- Todo YML de maquina deve receber a variavel target e executar remoto como root, exemplo:


---
- hosts: '{{ target }}'
  remote_user: root


* A Variavel target armazena o IP da maquina que executou

Exemplo, Criando uma gpo para criar um arquivo de texto no tmp das maquinas:

---
- hosts: '{{ target }}'
  gather_facts: no
  remote_user: root
  tasks:
  - name: Criando arquivo no tmp das maquinas.
    file:
      path: /tmp/novoarquivo.txt
      state: touch

Resumo: Para criar um arquivo no tmp da maquina:

1. Criar gpo: criararquivo.yml
2. Inserir em: /etc/ansible/gpo/maq/criararquivo.yml
3. Conferir as variáveis target em hosts.

Obs: A GPO de maquina e executada em todos os computadores, enquanto a de usuario executa apenas nos usuarios que foram definidos no grupo do AD.


FILAS DE GPO:

Algumas vezes precisamos que uma gpo seja executada antes de outra, ou estabelecer algum tipo de ordem, por exemplo atraves do uso do "import_playbook" do ansible..
Para fazer isso devemos criar as gpos iniciando com o nome fila.. e a gpo que vai chamar com qualquer nome.. 
gpos que iniciam com o nome fila nao sao cadastradas no arquivo csv.. logo so serao executadas se forem chamadas por outra gpo, exemplo:


Arquivo que chama gpos em ordem:

Nome: gpo_chama_fila.yml
Conteudo:
---
- import_playbook: fila_rodaprimeiro.yml
- import_playbook: fila_rodaporultimo.yml


Arquivo de gpo que roda primeiro:
Nome: fila_rodaprimeiro.yml
Conteudo:
---
- hosts: '{{ target }}'
  gather_facts: no
  remote_user: root
  tasks:
  - shell: echo "Rodei primeiro..."
      warn=False


Arquivo de gpo que roda por ultimo:
Nome: fila_rodaultimo.yml
---
- hosts: '{{ target }}'
  gather_facts: no
  remote_user: root
  tasks:
  - shell: echo "Rodei por ultimo..."
      warn=False


Considerações Finais:

Em Breve estarei postando várias GPOs como exemplo, para dar uma força a quem ainda está iniciando com Ansible.

Tenho alguns videos no youtube que mostram na pratica:

Instalando:
Parte 1:
https://youtu.be/0WTZOSaxm5Y

Parte 2:
https://youtu.be/Ruhqs545DWw

Configurando GPO Maquina:
https://youtu.be/BO_xaE0WUXs

Configurando GPO Usuario:
https://youtu.be/aX8nBxtrzUg


Comentários

Postar um comentário