===== Procedimento para instalar guacamole no FreeBSD autenticando em uma Base Postgres + TOTP two-factor authentication ===== Links de auxílio:\\ https://guacamole.apache.org/doc/0.9.12-incubating/gug/jdbc-auth.html\\ https://wiki.freebsd.org/Ports/www/guacamole-client\\ https://dlcdn.apache.org/guacamole/1.5.0/binary/\\ https://guacamole.apache.org/doc/gug/jdbc-auth.html\\ http://guacamole.incubator.apache.org/releases/1.5.0/\\ === 1 - Atualizar o pkg e ports, vamos vão ser usados nesta instalação: === # pkg update # portsnap fetch extract === 2 - Após atualizá-los vamos instalar todo o pacote do guacamole client e guacamole server pelo ports: === -- GuacamoleClient # cd /usr/ports/www/guacamole-client/ # make install clean BATCH=yes -- GuacamoleServer # cd /usr/ports/net/guacamole-server/ # make install clean BATCH=yes **OBS: Caso receba uma mensagem de erro no final da instalação tanto do guacamole cliente, quando do guacamole server informando que já existe uma versão deles 1.4 instalados, efetue a atualização da instalação com o comando make reinstall, pois essa instalação pelo ports está instalando a versão 1.5, que é superior a 1.4.** === 3 - Após a instalação do passo 2, vamos ativar os serviços no /etc/rc.conf: === # # /usr/local/etc/rc.d/guacd enable guacd enabled in /etc/rc.conf # /usr/local/etc/rc.d/tomcat9 enable tomcat9 enabled in /etc/rc.conf # /usr/local/etc/rc.d/guacd start Starting guacd. guacd[97574]: INFO: Guacamole proxy daemon (guacd) version 1.4.0 started # /usr/local/etc/rc.d/tomcat9 start Starting tomcat9. === 4 - Agora vamos precisar instalar o Banco de Dados Postgres, caso ainda não tenha instalado, pode clicar no link e seguir as instruções abaixo: === LINK: [[instalacao_do_bd_postgres|Instalação do Postgres]] === 5 - Após o passo 4, vamos entrar no diretório /usr/local/etc/guacamole-client/ e criar dois novos diretórios : === # cd /usr/local/etc/guacamole-client/ # mkdir lib # mkdir extensions === 6 - Agora vamos entrar no diretório extensions e fazer o download do guacamole-auth-jdbc do nosso banco, que no caso é o Postgres: === Link para download:\\ https://guacamole.apache.org/releases/\\ https://dlcdn.apache.org/guacamole/\\ # cd extensions # fetch https://dlcdn.apache.org/guacamole/1.5.0/binary/guacamole-auth-jdbc-1.5.0.tar.gz guacamole-auth-jdbc-1.5.0.tar.gz 30 MB 231 MBps 00s === 7 - Vamos extrair e executar alguns passos. Segue abaixo: === # tar -jxvf guacamole-auth-jdbc-1.5.0.tar.gz # cd guacamole-auth-jdbc-1.5.0 # cd postgresql/ # ll total 10537 -rw-r--r-- 1 1000 1000 10774697 Feb 13 21:17 guacamole-auth-jdbc-postgresql-1.5.0.jar drwxr-xr-x 3 1000 1000 5 Jul 21 2021 schema/ === 8 - Vamos copiar o arquivo guacamole-auth-jdbc-postgresql-1.5.0.jar, para o diretório /usr/local/etc/guacamole-client/extensions: === # cp guacamole-auth-jdbc-postgresql-1.5.0.jar /usr/local/etc/guacamole-client/extensions/ === 9 - Copie o driver JDBC do seu banco de dados para o diretório /usr/local/etc/guacamole-client/lib. Primeiro vamos ter que fazer o download no seguinte link: === Link para download: https://jdbc.postgresql.org/download/ # cd /usr/local/etc/guacamole-client/lib/ # fetch https://jdbc.postgresql.org/download/postgresql-42.6.0.jar postgresql-42.6.0.jar 1056 kB 3940 kBps 00s === 10 - Depois de todos os passos acima, vamos criar o banco do guacamole. Siga os passos abaixo: === -- Entre no banco : # su - postgres $ -- Entre no diretório /usr/local/etc/guacamole-client/extensions/guacamole-auth-jdbc-1.5.0/postgresql/ : $ cd /usr/local/etc/guacamole-client/extensions/guacamole-auth-jdbc-1.5.0/postgresql/ $ -- Liste o diretório schema e veja se os arquivos abaixo estão no seu interior: $ ls -l schema/ total 22 -rw-r--r-- 1 1000 1000 21749 Jul 21 2021 001-create-schema.sql -rw-r--r-- 1 1000 1000 2699 Jul 21 2021 002-create-admin-user.sql drwxr-xr-x 2 1000 1000 10 Jul 21 2021 upgrade -- Crie o banco e após a criação do banco: $ createdb guacamole_db $ --vamos popular a base: $ cat schema/*.sql | psql -d guacamole_db -f - CREATE INDEX CREATE TABLE CREATE INDEX INSERT 0 1 INSERT 0 1 INSERT 0 6 INSERT 0 3 $ -- Vamos entrar no banco criado: $ psql -d guacamole_db psql (15.1) Type "help" for help. guacamole_db=# --Vamos criar o acesso ao bando do Guacamole: guacamole_db=# CREATE USER guacamole_user WITH PASSWORD 'some_password'; CREATE ROLE guacamole_db=# GRANT SELECT,INSERT,UPDATE,DELETE ON ALL TABLES IN SCHEMA public TO guacamole_user; GRANT guacamole_db=# GRANT SELECT,USAGE ON ALL SEQUENCES IN SCHEMA public TO guacamole_user; GRANT guacamole_db=# \q $ === 11 - Vamos configurar o Guacamole para autenticação ao banco. Vamos criar o arquivo guacamole.properties dentro de /usr/local/etc/guacamole-client: === # cd /usr/local/etc/guacamole-client # cp guacamole.properties.sample guacamole.properties --Vamos editar o arquivo guacamole.properties e acrescentar as linhas abaixo: # ee guacamole.properties # PostgreSQL properties postgresql-hostname: localhost postgresql-database: guacamole_db postgresql-username: guacamole_user postgresql-password: some_password === 12 - Após isto, vamos reiniciar os três serviços instalados e efetuar os testes: === --Postgres # /usr/local/etc/rc.d/postgresql restart 2023-03-31 23:17:48.347 -03 [99440] LOG: ending log output to stderr 2023-03-31 23:17:48.347 -03 [99440] HINT: Future log output will go to log destination "syslog". --Guacd # /usr/local/etc/rc.d/guacd restart Stopping guacd. Waiting for PIDS: 97576. Removing stale pidfile. Starting guacd. guacd[99473]: INFO: Guacamole proxy daemon (guacd) version 1.4.0 started --Tomcat9 # /usr/local/etc/rc.d/tomcat9 restart Stopping tomcat9. Waiting for PIDS: 97590. Starting tomcat9. === 13 - Após todos esses passos, vamos testar o serviço. Abra seu navegador com o seu ip, porta 8080/guacamole. Segue exemplo abaixo: === http://SEU_IP_AQUI:8080/guacamole/#/ -- Irá abrir a tela de login do serviço: {{ :1.jpg?400 |}} -- **Login e senha padrão:** **Login: guacadmin**\\ **Senha: guacadmin**\\ === 14 - Agora vamos ativar o serviço SSL/TLS para adicionar mais uma camada de segurança: === -- O primeiro passo é gerar um keystore, exemplo abaixo: # keytool -genkey -keystore /usr/local/etc/guacamole_keystore -alias tomcat -keyalg RSA -keysize 4096 -validity 720 **Esse comando é usado para gerar um novo par de chaves de criptografia e criar um arquivo de armazenamento de chaves, também conhecido como keystore, que será usado para configurar o HTTPS no servidor Guacamole.** --Aqui está o que cada parte do comando faz: **keytool**: é o utilitário de linha de comando Java que permite gerenciar certificados, chaves e keystores.\\ **-genkey**: indica que você deseja gerar um novo par de chaves de criptografia.\\ **-keystore**: especifica o nome e local do arquivo de armazenamento de chaves que será criado.\\ **/usr/local/etc/guacamole_keystore**: é o caminho e o nome do arquivo de armazenamento de chaves a ser criado.\\ **-alias**: especifica o nome que será usado para identificar a chave no keystore.\\ **tomcat**: é o nome do alias escolhido para identificar a chave no keystore.\\ **-keyalg**: especifica o algoritmo de criptografia a ser usado para gerar a chave.\\ **RSA**: é o algoritmo de criptografia escolhido para gerar a chave.\\ **-keysize**: especifica o tamanho da chave em bits.\\ **4096**: é o tamanho da chave escolhido para a chave.\\ **-validity**: especifica o período de validade da chave em dias.\\ **720**: é o período de validade escolhido para a chave, em dias.\\ === 15 - Você precisará fornecer uma senha no início e no final do procedimento Nr 14, fora que será necessário fornecer algumas informações. Segue o exemplo que eu fiz: === Enter keystore password: Re-enter new password: What is your first and last name? [Unknown]: SALADECOMANDO What is the name of your organizational unit? [Unknown]: SALADECOMANDO What is the name of your organization? [Unknown]: SALADECOMANDO What is the name of your City or Locality? [Unknown]: Macapa What is the name of your State or Province? [Unknown]: Amapa What is the two-letter country code for this unit? [Unknown]: AP Is CN=SALADECOMANDO, OU=SALADECOMANDO, O=SALADECOMANDO, L=Macapa, ST=Amapa, C=AP correct? [no]: yes Enter key password for (RETURN if same as keystore password): Re-enter new password: Warning: The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore /usr/local/etc/guacamole_keystore -destkeystore /usr/local/etc/guacamole_keystore -deststoretype pkcs12". === 16 - Vamos configurar o arquivo server.xml que fica localizado em "/usr/local/apache-tomcat-9.0/conf/", incluir as informações do keystore e alterar as configurações do servidor. Segue abaixo: # cd /usr/local/apache-tomcat-9.0/conf/ # ee server.xml -- Vamos acrescentar as configurações do servidor: -- Após adicionar as linhas de configurações, **comente ou apague** as linhas da configuração anterior: -- No meu caso, eu só comentei. Feche e salve as alterações: === 17 - Após isto, vamos reiniciar os dois serviços instalados e efetuar os testes: === --Guacd # /usr/local/etc/rc.d/guacd restart Stopping guacd. Waiting for PIDS: 97576. Removing stale pidfile. Starting guacd. guacd[99473]: INFO: Guacamole proxy daemon (guacd) version 1.4.0 started --Tomcat9 # /usr/local/etc/rc.d/tomcat9 restart Stopping tomcat9. Waiting for PIDS: 97590. Starting tomcat9. -- Verifique em qual porta o tomcat9 está ouvindo, agora tem que estar na 8443: # sockstat -4l USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS www jsvc 4161 56 tcp4 10.0.0.100:8443 *:* guacamole guacd 4141 4 tcp4 10.0.0.100:4822 *:* postgres postgres 3783 6 tcp4 10.0.0.100:5432 *:* === 18 - Vamos abrir pelo navegador e ver se está tudo correto: === http://SEU_IP_AQUI:8443/guacamole/#/ -- Irá abrir a tela de login do serviço, igual ao passo 13: === 19 - Agora vamos ativar a extensão TOTP two-factor authentication. Com ela ativaremos um segundo método de autenticação. Baixe a extensão e vamos descompactá-la dentro do diretório /usr/local/etc/guacamole-client/extensions/: === # cd /usr/local/etc/guacamole-client/extensions/ # fetch https://dlcdn.apache.org/guacamole/1.5.0/binary/guacamole-auth-totp-1.5.0.tar.gz # tar -jxvf guacamole-auth-totp-1.5.0.tar.gz # cd guacamole-auth-totp-1.5.0 # cp guacamole-auth-totp-1.5.0.jar /usr/local/etc/guacamole-client/extensions/ === 20 - Depois que você colocou o arquivo guacamole-auth-duo-1.5.0.jar dentro do diretório /usr/local/etc/guacamole-client/extensions/, vamos configurar o arquivo guacamole.properties com as configurações da extensão (não é obrigatória essa configuração, mas eu fiz no meu ambiente): === # cd /usr/local/etc/guacamole-client # ee guacamole.properties -- Adicione as seguintes linhas no seu arquivo, lembrando que isso não é obrigatório, caso não faça isso irá funcionar normalmente: # Configurações TOTP totp-issuer: SALA DE COMANDO totp-digits: 6 totp-period: 60 totp-mode: sha1 -- Função das linhas de configuração: **Essas linhas de configuração se referem à extensão TOTP (Time-based One-Time Password) do Guacamole, que fornece autenticação de dois fatores baseada em tempo. As configurações especificam:** **totp-issuer**: o nome legível pelo usuário da entidade que emite as contas de usuário.\\ **totp-digits**: o número de dígitos que devem ser incluídos em cada código TOTP gerado. Os valores legais são 6, 7 ou 8. Por padrão, são gerados códigos de 6 dígitos.\\ **totp-period**: a duração que cada código gerado deve permanecer válido, em segundos. Por padrão, cada código permanece válido por 30 segundos.\\ **totp-mode**: o algoritmo hash que deve ser usado para gerar códigos TOTP. Os valores legais são "sha1", "sha256" e "sha512". Por padrão, "sha1" é usado.\\ === 21 - Após isto, reinicie o guacd e o tomcat, e tente efetuar o login: === # /usr/local/etc/rc.d/guacd restart && /usr/local/etc/rc.d/tomcat9 restart === 22 - Após a primeira tela de LOGIN, irá você irá logar com seu nome de usuário e senha, e depois irá aparecer uma tela para escanear um qrcode para poder usar o token: === **-- Primeira tela de login padrão:** {{ :1.jpg?400 |}} **-- Segunda tela de login, da extensão Duo two-factor authentication:** {{ :2.jpg?400 |}} -- Se você fez todos os passos (que são muitos), de forma correta, tudo irá funcionar corretamente: ==== OBS MUITO IMPORTANTE: Para usar essa extensão para autenticação, você terá que manter seu servidor no mesmo fuso horário do seu celular, com a hora correta em ambos, se não ocorrerá problemas na hora de efetuar o login: ==== ----------------- ~~DISCUSSION|Deixe sua contribuição~~