Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
docpublic:systemes:remotelabsguacamole [2020/06/17 10:10]
procacci@tem-tsp.eu [build]
docpublic:systemes:remotelabsguacamole [2020/06/18 15:25] (current)
procacci@tem-tsp.eu [packages repositories]
Line 6: Line 6:
   * https://www.byteprotips.com/?p=2391   * https://www.byteprotips.com/?p=2391
  
 +
 +==== environement ====
 +
 +installation faite en centos 8 et tomcat 9 (tar.gz dans /opt/tomcat) 
 ==== packages repositories ==== ==== packages repositories ====
  
Line 18: Line 22:
 <code> <code>
 [root@rlab ~]# dnf install --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-8.noarch.rpm [root@rlab ~]# dnf install --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-8.noarch.rpm
-[root@rlabw ~]# yum install dnf-plugins-core +[root@rlab ~]# yum install dnf-plugins-core 
-[root@rlabw ~]# dnf config-manager --enable PowerTools+[root@rlab ~]# dnf config-manager --enable PowerTools
 </code> </code>
  
Line 952: Line 956:
 docs  examples  guacamole-1.1.0  guacamole-1.1.0.war  host-manager  manager  ROOT docs  examples  guacamole-1.1.0  guacamole-1.1.0.war  host-manager  manager  ROOT
 </code> </code>
 +
 +==== guacd ====
 +
 +demarer (manuellement pour l'instant) le daemon guacd 
 +
 +<code>
 +[root@rlab ~]# /etc/init.d/guacd start
 +Starting guacd: guacd[27813]: INFO: Guacamole proxy daemon (guacd) version 1.1.0 started
 +SUCCESS
 +[root@rlab ~]# /etc/init.d/guacd status
 +guacd is running with PID=27815.
 +
 +[root@rlab ~]# ps auwx |grep guacd
 +root     27815  0.0  0.6  85292 10028 ?        S    14:36   0:00 /usr/local/sbin/guacd -p /var/run/guacd.pid
 +
 +</code>
 +
 +==== reverse-proxy ====
 +
 +le support de proxy-ajp n'est pas compatible avec les websocket guacamole (force un retour a http) et apache 2.4.3 ne support pas la method HTTP PATCH ce qui rend inoperant l'interface de management de guacamole , on va donc utiliser le mod_proxy sous apache . 
 +
 +avant tout s'assurer de mettre URIEncoding="UTF-8" dans la configuration du serveur tomcat afin d'assurer le transit de noms d'application et/ou pearametre contenant des carateres non-latin, cyrilic etc ... 
 +
 +<code>
 +[root@rlab conf]# vim /opt/tomcat/conf/server.xml 
 +
 + <Connector port="8080" protocol="HTTP/1.1"
 +               connectionTimeout="20000"
 +               URIEncoding="UTF-8"
 +               redirectPort="8443" />
 +</code>
 +
 +=== remote IP ===
 +
 +par defaut quand tomcat est derriere un proxy , il voit les requetes clientes venir de l'IP du proxy, in convient pour les logs et potentiels controles d'acces a base d'IP de transporter par le proxy le vrai IP source du client, cela se fait avec le header HTTP X-Forwarded-For en configurant le Valve RemoteIpValve dans server.xml 
 +
 +<code>
 +[root@rlab conf]# vim /opt/tomcat/conf/server.xml 
 +
 + <!--  https://guacamole.apache.org/doc/gug/proxying-guacamole.html
 +                Configuring Tomcat to pass through the remote IP address provided by the reverse proxy in the X-Forwarded-For header
 +                requires the configuration of what Tomcat calls a Valve. 
 +                In this case, it is the RemoteIpValve and is configured in the conf/server.xml file, in the <Host> section
 +        -->
 +         <Valve className="org.apache.catalina.valves.RemoteIpValve"
 +               internalProxies="127.0.0.1"
 +               remoteIpHeader="x-forwarded-for"
 +               remoteIpProxiesHeader="x-forwarded-by"
 +               protocolHeader="x-forwarded-proto" />
 +
 +      </Host>
 +</code>
 +
 +
 +=== apache proxy ===
 +
 +les directives ProxyPass et ProxyPassReverse fournis par le mod_proxy assure le lien de proxy entre apache et tomcat
 +
 +<code>
 +[root@rlab conf.d]# vim /etc/httpd/conf.d/ssl.conf 
 +
 +#https://guacamole.apache.org/doc/gug/proxying-guacamole.html
 +<Location /guacamole/>
 +    Order allow,deny
 +    Allow from all
 +    ProxyPass http://127.0.0.1:8080/guacamole-1.1.0/ flushpackets=on
 +    ProxyPassReverse http://127.0.0.1:8080/guacamole-1.1.0/
 +    ProxyPassReverseCookiePath /guacamole-1.1.0/ /guacamole/ #because location diffrences from apache to tomcat, cookies need to match
 +</Location>
 +</code>
 +
 +=== apache log ===
 +
 +il est inutile de loger toutes les requetes http de courte durée du aux steams dans le http-tunnel (si pas de websockets) 
 +
 +<code>
 +[root@rlab conf.d]# vim /etc/httpd/conf.d/ssl.conf
 +
 +<VirtualHost _default_:443>
 +
 +
 +SetEnvIf Request_URI "^/guacamole/tunnel" dontlog
 +CustomLog  /var/log/httpd/guac.log common env=!dontlog
 +</code>
 +
 +
 +==== database ====
 +
 +afin de permettre a plusieurs utilisateurs de se conencter et enregistrer des preferences il convient de definir une database
 +
 +=== arborescence extension ===
 +
 +la database ou autre modules d'authentification (ldap, cas ) sont fournit sous forme de module quil faut deployer dans une arborescence specifique que nous créons dans /usr/share/tomcat/.guacamole
 +
 +<code>
 +[root@rlab etc]# mkdir -p /usr/share/tomcat/.guacamole/{extensions,lib}
 +</code>
 +
 +=== modules ===
 +
 +recuperation et deploiement des modules pour la database 
 +
 +<code>
 +[root@rlab ~]# wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.20-1.el8.noarch.rpm
 +[root@rlab ~]# yum install mysql-connector-java-8.0.20-1.el8.noarch.rpm
 +[root@rlab ~]# cp /usr/share/java/mysql-connector-java.jar /usr/share/tomcat/.guacamole/lib/
 +</code>
 +
 +<code>
 +[root@rlab ~]# wget https://downloads.apache.org/guacamole/1.1.0/binary/guacamole-auth-jdbc-1.1.0.tar.gz
 +[root@rlab ~]# tar xvfz guacamole-auth-jdbc-1.1.0.tar.gz ^C
 +[root@rlab ~]# cp guacamole-auth-jdbc-1.1.0/mysql/guacamole-auth-jdbc-mysql-1.1.0.jar /usr/share/tomcat/.guacamole/extensions/
 +</code>
 +
 +==== mariaDB ====
 +
 +apres installation de mariadb-server , on va le securiser 
 +
 +<code>
 +[root@rlab ~]# systemctl start mariadb.service 
 +[root@rlab ~]# mysql_secure_installation 
 +Set root password? [Y/n] Y
 +New password: 
 +Re-enter new password: Secret Pa U g... S.. ip5 d Da
 +Password updated successfully!
 +Reloading privilege tables..
 + ... Success!
 +Remove anonymous users? [Y/n] y
 + ... Success!
 +Normally, root should only be allowed to connect from 'localhost' This
 +ensures that someone cannot guess at the root password from the network.
 +Disallow root login remotely? [Y/n] y
 + ... Success!
 +Remove test database and access to it? [Y/n] y
 + - Dropping test database...
 + ... Success!
 + - Removing privileges on test database...
 + ... Success!
 +Reload privilege tables now? [Y/n] y
 +Thanks for using MariaDB!
 +</code>
 +
 +<code>
 +[root@rlab ~]# mysql -u root -p
 +
 +MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS guacdb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
 +Query OK, 1 row affected (0.000 sec)
 +MariaDB [(none)]> GRANT SELECT,INSERT,UPDATE,DELETE ON guacdb.* TO 'guacuser'@'localhost' IDENTIFIED BY 'secretUg...G...d' WITH GRANT OPTION;
 +Query OK, 0 rows affected (0.000 sec)
 +MariaDB [(none)]> flush privileges;
 +Query OK, 0 rows affected (0.000 sec)
 +MariaDB [(none)]> quit
 +</code>
 +
 +creation des table et user : 
 +
 +<code>
 +[root@rlab ~]# cat /root/guacamole-auth-jdbc-1.1.0/mysql/schema/001-create-schema.sql | mysql -u root -p guacdb
 +[root@rlab ~]# cat /root/guacamole-auth-jdbc-1.1.0/mysql/schema/002-create-admin-user.sql | mysql -u root -p guacdb
 +</code>
 +
 +=== configuration / properties ===
 +
 +<code>
 +[root@rlab ~]# mkdir -p /etc/guacamole/ && vi /etc/guacamole/guacamole.properties
 +[root@rlab ~]# cat /etc/guacamole/guacamole.properties
 +# MySQL properties
 +mysql-hostname: localhost
 +mysql-port: 3306
 +mysql-database: guacdb
 +mysql-username: guacuser
 +mysql-password: secret
 +#Additional settings
 +mysql-default-max-connections-per-user: 0
 +mysql-default-max-group-connections-per-user: 0
 +</code>
 +
 +=== permissions ===
 +
 +<code>
 +[root@rlab ~]# chmod 0400 /etc/guacamole/guacamole.properties
 +[root@rlab ~]# chown tomcat:tomcat /etc/guacamole/guacamole.properties
 +[root@rlab ~]# ln -s /etc/guacamole/guacamole.properties /usr/share/tomcat/.guacamole/
 +
 +[root@rlab ~]# chown tomcat:tomcat /opt/tomcat/webapps/guacamole-1.1.0.war 
 +</code>
 +
 +==== GUACAMOLE_HOME ====
 +
 +Tres imprtant pour la configurations des plugins/modules , il faut s'assurer que tomcat charge bien les paremtrages definit dans guacamole.properties. ceci se fait grace à la variable  GUACAMOLE_HOME qui est fixé par defaut a /etc/guacamole/ 
 +
 +comme ci-dessus nus avons definit les propriété dans /usr/share/tomcat/.guacamole/ avec un jeux de liens, et que le homedir du user tomcat dans mon installation est ici dans /opt/tomcat, il convient egalement de créé un lien depuis /opt/tomcat/.guacamole vers  /usr/share/tomcat/.guacamole
 +
 +cf https://guacamole.apache.org/doc/gug/configuring-guacamole.html Overriding GUACAMOLE_HOME => Creating a directory named .guacamole, within the home directory of the user running the servlet container. This directory will automatically be used for GUACAMOLE_HOME if it exists.
 +
 +
 +<code>
 +[root@rlab /opt/tomcat]# ln -s /usr/share/tomcat/.guacamole .guacamole
 +</code>
 +
 +Apres redemarrage de tomcat , on peut enfin se connecter avec la compte guacadmin (cf fichier d'import sql : 002-create-admin-user.sql) et ainsi changer le password de cet administrateur
 +
 +https://rlab.domain.top/guacamole/#/settings/preferences
 +
 +
  
  
docpublic/systemes/remotelabsguacamole.1592388643.txt.gz · Last modified: 2020/06/17 10:10 by procacci@tem-tsp.eu
[unknown link type]Back to top
CC Attribution-Noncommercial-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0