webブラウザで画面共有が表示可能となる
本家様 http://guacamole.apache.org/

外部と内部を繋ぐサーバ(gate)があって、外部から内部のwindowsマシンとかLinuxマシンをブラウザから操作できるか確かめてみた

2021y06m30d_075501659.png

フラットファイルにアカウントとパスワード、そして接続先、接続方法(RDP,VNC)を予め定義して使用する方法の他に
データベースにそれら情報を格納してより便利に管理する方法もある。
ここではデータベース方式(PostgreSQL)を使ってみた.

運用設定Guacamole/Setting

下拵え

Guacamoleの構築のために必要なパッケージをあらかじめインストールしておきます

[root@guacamole ~]# cat /etc/redhat-release
Rocky Linux release 8.7 (Green Obsidian)
 
[root@guacamole ~]# getenforce
Enforcing
[root@guacamole ~]# dnf install policycoreutils-python-utils
[root@guacamole ~]# dnf install cairo-devel libjpeg-turbo-devel libjpeg-devel libpng-devel libtool libuuid-devel

これで一応サーバアプリをコンパイルできるけど、GuacamoleでRDP対応とかのために追加のパッケージも入れます
詳細はこちらで確認できます https://guacamole.apache.org/doc/gug/installing-guacamole.html

[root@guacamole ~]# dnf repolist
repo id                                                     repo name
appstream                                                   Rocky Linux 8 - AppStream
baseos                                                      Rocky Linux 8 - BaseOS
extras                                                      Rocky Linux 8 - Extras
 
[root@guacamole ~]# dnf install epel-release yum-utils
[root@guacamole ~]# yum-config-manager --disable epel
 
[root@guacamole ~]# dnf install --enablerepo=powertools,epel freerdp-devel pango-devel libssh2-devel libtelnet-devel \
  libvncserver-devel libwebsockets-devel pulseaudio-libs-devel openssl-devel libvorbis-devel libwebp-devel libgcrypt-devel

*操作内容を録画したいなら「ffmpeg-devel」も必要. ただRockyLinuxリポジトリにもepelリポジトリにもないので
追加で「rpmfusion」リポジトリを入れて、他必要なパッケージを入手します.

[root@guacamole ~]# dnf install --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm
[root@guacamole ~]# yum-config-manager --disable rpmfusion-free-updates 
 
[root@guacamole ~]# dnf install --enablerepo=powertools,epel,rpmfusion-free-updates ffmpeg-devel ffmpeg

Guacamoleサーバアプリの構築

最新版(22.01時点)の1.4.0を取得します。ファイル名は「guacamole-server-1.4.0.tar.gz」となります。
http://guacamole.apache.org/releases/1.4.0/

[root@guacamole ~]# wget -O guacamole-server-1.4.0.tar.gz  https://apache.org/dyn/closer.lua/guacamole/1.4.0/source/guacamole-server-1.4.0.tar.gz?action=download
[root@guacamole ~]# tar xf guacamole-server-1.4.0.tar.gz
[root@guacamole ~]# cd guacamole-server-1.4.0
[root@guacamole guacamole-server-1.4.0]#
[root@guacamole guacamole-server-1.4.0]# ./configure --with-systemd-dir=/etc/systemd/system --prefix=/opt/guacamole
 :
 :
------------------------------------------------
guacamole-server version 1.4.0
------------------------------------------------
 
   Library status:
 
     freerdp2 ............ yes
     pango ............... yes
     libavcodec .......... yes
     libavformat.......... yes
     libavutil ........... yes
     libssh2 ............. yes
     libssl .............. yes
     libswscale .......... yes
     libtelnet ........... yes
     libVNCServer ........ yes
     libvorbis ........... yes
     libpulse ............ yes
     libwebsockets ....... yes
     libwebp ............. yes
     wsock32 ............. no
 
   Protocol support:
 
      Kubernetes .... yes
      RDP ........... yes
      SSH ........... yes
      Telnet ........ yes
      VNC ........... yes
 
   Services / tools:
 
      guacd ...... yes
      guacenc .... yes
      guaclog .... yes
 
   FreeRDP plugins: /usr/lib64/freerdp2
   Init scripts: no
   Systemd units: /etc/systemd/system
 
Type "make" to compile guacamole-server.
 
[root@guacamole guacamole-server-1.4.0]#

っでコンパイル、インストール、起動設定

[root@guacamole guacamole-server-1.4.0]# make && make install
[root@guacamole guacamole-server-1.4.0]# echo /opt/guacamole/lib > /etc/ld.so.conf.d/guacamole.conf
[root@guacamole guacamole-server-1.4.0]# ldconfig
[root@guacamole guacamole-server-1.4.0]# ls -l /etc/systemd/system
 :
-rw-r--r--. 1 root root  990 Feb 15 20:14 guacd.service
 :
[root@guacamole guacamole-server-1.4.0]# ls -lZ /etc/systemd/system/guacd.service
-rw-r--r--. 1 root root system_u:object_r:default_t:s0 990 Feb 16 04:17 /etc/systemd/system/guacd.service
 
[root@guacamole guacamole-server-1.4.0]# restorecon -v /etc/systemd/system/guacd.service
 
[root@guacamole guacamole-server-1.4.0]# ls -lZ /etc/systemd/system/guacd.service
-rw-r--r--. 1 root root system_u:object_r:systemd_unit_file_t:s0 990 Feb 16 04:17 /etc/systemd/system/guacd.service
 
[root@guacamole guacamole-server-1.4.0]# systemctl daemon-reload
[root@guacamole guacamole-server-1.4.0]# systemctl enable guacd.service

servlet container[jetty]の準備

Guacamoleはserver部分とwebコンテンツで構成されています. server部分はこの前段のコンパイルで完了済み.

Guacamoleのwebコンテンツは servlet で提供されていて、動かすには servlet containerが必要となります.
(Guacamoleのwebコンテンツはソースからは作りません. すでに提供されているwarファイルを使います. 面倒なので.)

っでそのservlet containerですが、tomcatとかでもいいのですがここでは軽量の Jetty を使います.

jettyのバージョンは http://www.eclipse.org/jetty/download.php から 9 系列を使います.
jetty9はjava-1.8.0が必要でjreでいいです

[root@guacamole ~]# rpm -qa | grep "^java-"
java-1.8.0-openjdk-headless-1.8.0.352.b08-2.el8_7.x86_64
 
[jetty@guacamole ~]$ java -version
openjdk version "1.8.0_352"
OpenJDK Runtime Environment (build 1.8.0_352-b08)
OpenJDK 64-Bit Server VM (build 25.352-b08, mixed mode)
 
[jetty@guacamole ~]$

次にJettyを組み込みます. 場所は「/opt/jetty」を起点とします.

まずはjettyの稼働ユーザ[jetty]を用意します. system側のユーザなので[-r]を付けてユーザを作ります. そして/opt/jettyは作成せずアカウントのみ作成します

[root@guacamole ~]# useradd -r -s /sbin/nologin -d /opt/jetty -M jetty
[root@guacamole ~]# id jetty
uid=993(jetty) gid=989(jetty) groups=989(jetty)
[root@guacamole ~]#

jettyアプリを取得して/opt/jettyに展開します.

[root@guacamole ~]# cd /opt/
[root@guacamole opt]# curl -O https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/9.4.50.v20221201/jetty-distribution-9.4.50.v20221201.tar.gz
[root@guacamole opt]# tar xf jetty-distribution-9.4.50.v20221201.tar.gz
[root@guacamole opt]# mv jetty-distribution-9.4.50.v20221201 jetty
[root@guacamole opt]# chown -R jetty. jetty
[root@guacamole opt]# ls -l
total 18588
drwxr-xr-x. 10 jetty jetty     4096 Dec  2 07:18 jetty
-rw-r--r--.  1 root  root  19029816 Feb 16 00:27 jetty-distribution-9.4.50.v20221201.tar.gz
[root@guacamole opt]#

起動スクリプトを準備します. rootで操作します

[root@guacamole ~]# cp /opt/jetty/bin/jetty.service /usr/lib/systemd/system/
[root@guacamole ~]# vi /usr/lib/systemd/system/jetty.service
[Unit]
Description=Jetty Web Application Server
After=syslog.target network.target remote-fs.target nss-lookup.target
 
[Service]
Type=forking
PIDFile=/run/jetty/jetty.pid
ExecStart=/opt/jetty/bin/jetty.sh start
ExecStop=/opt/jetty/bin/jetty.sh stop
ExecReload=/opt/jetty/bin/jetty.sh restart
User=jetty
Group=jetty
 
[Install]
WantedBy=multi-user.target
 
[root@guacamole ~]# echo "d /run/jetty  755 jetty jetty" > /etc/tmpfiles.d/jetty.conf
[root@guacamole ~]# /usr/bin/systemd-tmpfiles --create /etc/tmpfiles.d/jetty.conf
 
[root@guacamole ~]# systemctl list-unit-files |grep jetty
jetty.service                                                          disabled
 
[root@guacamole ~]#

次に設定ファイルを用意します. 「/opt/jetty/bin/jetty.sh」から設定ファイルは「/etc/default/jetty」とします

[root@guacamole ~]# vi /etc/default/jetty
JETTY_HOME=/opt/jetty
JETTY_USER=jetty
JETTY_ARGS=jetty.http.port=8080
JETTY_RUN=/run/jetty
JETTY_SHELL=/bin/bash
JETTY_BASE=/opt/jetty
#JETTY_BASE=/opt/jetty/demo-base
 
[root@guacamole ~]#

上記は port 8080 でjettyを動かすことを意味してます.「lsof -i」とかでport 8080が既に使用されていないとかの確認が必要かもしれません。
これでservlet containerの準備は完了で、次にGuacamole webコンテンツをこのjettyに載せます

webコンテンツの導入

作業としてはjettyの「webapps」フォルダ「/opt/jetty/webapps/」に Guacamole の webコンテンツ(warファイル)を置くだけ.
https://guacamole.apache.org/releases/1.4.0/ から「guacamole-1.4.0.war」をダウンロードして「webapps」に入れる

[root@guacamole ~]# cd /opt/jetty/webapps/
[root@guacamole webapps]# wget -O guacamole-1.4.0.war https://apache.org/dyn/closer.lua/guacamole/1.4.0/binary/guacamole-1.4.0.war?action=download
[root@guacamole webapps]# chown jetty. guacamole-1.4.0.war
[root@guacamole webapps]# ls -l
total 12712
-rw-r--r--. 1 jetty jetty 13011205 Dec 29  2021 guacamole-1.4.0.war
-rw-rw-r--. 1 jetty jetty     1444 Dec  2 07:18 README.TXT
[root@guacamole webapps]#

servlet containerのjettyの稼働を確認するため、この段階で試しに動かしてみる.
その前に firewall とかで制限を掛けているなら 8080 ポートを開けてから jetty を起動させます

[root@guacamole ~]# firewall-cmd --add-port=8080/tcp --zone=public --permanent
[root@guacamole ~]# firewall-cmd --reload
[root@guacamole ~]# systemctl start jetty

他のマシンから「http://guacamole:8080」にアクセスすると下記のような画面になる
2023y02m16d_003615000.png
エラー画面ですが、「/guacamole-1.4.0」とあればOK

データベースの準備

OSリポジトリでインストールできるpostgreSQLを使います.
既に別のpostgreSQLがあればそれを使っても大丈夫. 別のマシンで動ているpostgreQLでも可. 既に既設のpostgreSQLがあるならportを別にしたPostgreSQLを用意するか、その既設を使ってもいい. DBが異なるだけなので

[root@guacamole ~]# dnf module list postgresql
Last metadata expiration check: 0:28:48 ago on Thu 16 Feb 2023 12:32:20 AM JST.
Rocky Linux 8 - AppStream
Name                        Stream                  Profiles                           Summary
postgresql                  9.6                     client, server [d]                 PostgreSQL server and client module
postgresql                  10 [d]                  client, server [d]                 PostgreSQL server and client module
postgresql                  12                      client, server [d]                 PostgreSQL server and client module
postgresql                  13                      client, server [d]                 PostgreSQL server and client module
 
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
 
[root@guacamole ~]# dnf module install postgresql:10/server
[root@guacamole ~]# postgresql-setup --initdb --unit postgresql

「/var/lib/pgsql/data/pg_hba.conf」の一部を修正してデータベースアカウントでアクセス可能にします

--- /var/lib/pgsql/data/pg_hba.conf.orig        2023-02-16 01:05:04.812185726 +0900
+++ /var/lib/pgsql/data/pg_hba.conf     2023-02-16 01:06:43.554761256 +0900
@@ -79,7 +79,7 @@
 # "local" is for Unix domain socket connections only
 local   all             all                                     peer
 # IPv4 local connections:
-host    all             all             127.0.0.1/32            ident
+host    all             all             127.0.0.1/32            md5
 # IPv6 local connections:
 host    all             all             ::1/128                 ident
 # Allow replication connections from localhost, by a user with the

そして起動させます

[root@guacamole ~]# systemctl enable postgresql --now

そしてGuacamoleが使うDB「guacamole_db」を用意します

[root@guacamole ~]# su - postgres
[postgres@guacamole ~]$ createdb guacamole_db
[postgres@guacamole ~]$ psql -l
                                   List of databases
     Name     |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
--------------+----------+----------+-------------+-------------+-----------------------
 guacamole_db | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 postgres     | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0    | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
              |          |          |             |             | postgres=CTc/postgres
 template1    | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
              |          |          |             |             | postgres=CTc/postgres
(4 rows)
 
[postgres@guacamole ~]$

データベースに必要なテーブル、コンテンツを組み込む

作成したデータベース「guacamole_db」にスキーマオブジェクト(テーブルとか)を作ります
必要なスキーマオブジェクトは、「https://guacamole.apache.org/releases/1.4.0/」の「guacamole-auth-jdbc-1.4.0.tar.gz」に含まれているので、これを入手して展開します

[postgres@guacamole ~]$ wget -O guacamole-auth-jdbc-1.4.0.tar.gz https://apache.org/dyn/closer.lua/guacamole/1.4.0/binary/guacamole-auth-jdbc-1.4.0.tar.gz?action=download
[postgres@guacamole ~]$ tar xf guacamole-auth-jdbc-1.4.0.tar.gz
[postgres@guacamole ~]$ cd guacamole-auth-jdbc-1.4.0
[postgres@guacamole guacamole-auth-jdbc-1.4.0]$ ls -lF
total 28
drwxr-xr-x. 12 postgres postgres  4096 Feb 16 01:10 bundled/
-rw-r--r--.  1 postgres postgres 17001 Dec 29  2021 LICENSE
drwxr-xr-x.  3 postgres postgres    63 Feb 16 01:10 mysql/
-rw-r--r--.  1 postgres postgres  2695 Dec 29  2021 NOTICE
drwxr-xr-x.  3 postgres postgres    68 Feb 16 01:10 postgresql/
drwxr-xr-x.  3 postgres postgres    67 Feb 16 01:10 sqlserver/
 
[postgres@guacamole guacamole-auth-jdbc-1.4.0]$ cd postgresql/schema/
[postgres@guacamole schema]$ ls -l
total 32
-rw-r--r--. 1 postgres postgres 21749 Jul 21  2021 001-create-schema.sql
-rw-r--r--. 1 postgres postgres  2699 Jul 21  2021 002-create-admin-user.sql
drwxr-xr-x. 2 postgres postgres  4096 Jul 21  2021 upgrade
[postgres@guacamole schema]$

この「001-create-schema.sql」にはGuacamoleに必要なスキーマオブジェクト(テーブル,インデックスとか)が明記されて、
「002-create-admin-user.sql」には作成したテーブルへのデータ(コンテンツ)が明記されている.
これらを「guacamole_db」に反映させます

[postgres@guacamole schema]$ cat *.sql | psql -d guacamole_db -f -

データベースへアクセスできるアカウントを作成

Guacamole から postgreSQL へ接続するためのデータベースアカウントを用意します pg_hba.confの修正でデータベースアカウントでの接続を有効にしたので

[postgres@guacamole schema]$ psql -d guacamole_db
psql (10.23)
Type "help" for help.
 
guacamole_db=# CREATE USER guacamole_user WITH PASSWORD 'some_password';                              <-- ユーザ「guacamole_user」を作ってそのパスワードを「some_password」にしてます
guacamole_db=# GRANT SELECT,INSERT,UPDATE,DELETE ON ALL TABLES IN SCHEMA public TO guacamole_user;    <-- ユーザ「guacamole_user」へ権限譲渡
guacamole_db=# GRANT SELECT,USAGE ON ALL SEQUENCES IN SCHEMA public TO guacamole_user;                <-- ユーザ「guacamole_user」へ権限譲渡その2
guacamole_db=# \q
[postgres@guacamole schema]$

正しく作成できたかのテスト

[root@guacamole ~]# psql -h localhost4 -U guacamole_user -d guacamole_db
Password for user guacamole_user:
psql (10.23)
Type "help" for help.
 
guacamole_db=> \q
[root@guacamole ~]#

ここではpg_hba.confでipv4のみmd5としている. なので「localhost4」か「127.0.0.1」指定が必要. ipv6もmd5とすれば「localhost」でも行ける. あと別のマシンのpostgresqlを使うならpg_hba.confのさらなる設定が必要

Guacamole向けのjdbcドライバ

Guacamole とデータベースとの接続は jdbc が使われる. なのでGuacamole側にjdbcドライバをインストールします
jdbcドライバは先ほど取得した「guacamole-auth-jdbc-1.4.0.tar.gz」に含まれている

[root@guacamole ~]# mkdir -p /etc/guacamole/{extensions,lib}
[root@guacamole ~]# cp ~postgres/guacamole-auth-jdbc-1.4.0/postgresql/guacamole-auth-jdbc-postgresql-1.4.0.jar  /etc/guacamole/extensions/

次に postgreSQL側にも jdbcドライバも用意します

[root@guacamole ~]# dnf install postgresql-jdbc
 
[root@guacamole ~]# cd /etc/guacamole/lib
[root@guacamole lib]# ln -s /usr/share/java/postgresql-jdbc.jar .

guacamole.properties

Guacamoleからデータベースに接続するアカウント・パスワードらを定義します
「guacamole.properties」ファイルは存在しません. 自分で作成します

[root@guacamole ~]# vi /etc/guacamole/guacamole.properties
postgresql-hostname: localhost4                                <-- ipv4のみ許可しているので
postgresql-port: 5432
postgresql-database: guacamole_db
postgresql-username: guacamole_user
postgresql-password: some_password
 
[root@guacamole ~]#

アクセス

以上で基本設定は完了です

guacd(Guacamoleのサーバ)とjetty(Guacamoleのwebサービス)をsystemctlで稼働させて、

[root@gate ~]# systemctl start jetty guacd

jettyが起動できない場合は /opt/jetty 配下の所有者を確認する. すべてユーザjettyの所有者であることが必要です
その後にブラウザで「http://guacamole:8080/guacamole-1.4.0/」へアクセスしてみます. 下図がでたら成功.
2021y06m30d_122632223.png
「ユーザ名」には「guacadmin」、「パスワード」にも「guacadmin」を入力してログインを押下します。
するとログインができて、下記画面になります
2023y02m16d_044109697.png

備考、メモ

最新の60件
2024-12-08 2024-12-05 2024-12-04 2024-11-28 2024-11-23 2024-11-22 2024-11-15 2024-11-14 2024-11-12 2024-11-06 2024-11-05 2024-11-04 2024-11-02 2024-11-01 2024-10-29 2024-10-28 2024-10-27 2024-10-23 2024-10-18 2024-10-17 2024-10-15 2024-10-14 2024-10-13 2024-10-11 2024-10-10 2024-10-09 2024-10-08 2024-10-05 2024-10-04 2024-10-03 2024-10-02 2024-10-01 2024-09-30 2024-09-29 2024-09-28 2024-09-27 2024-09-22 2024-09-20 2024-09-17

edit


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-02-16 (木) 04:46:06