Apache гуакамоле создать пользователя, используя postgres - PullRequest
0 голосов
/ 22 января 2020

Я использую apache гуакамоле последний из docker концентратор и postgres 12 в качестве базы данных, я хочу создать пользователя для входа в систему, используя postgres, но он не работает.

Это как создать user from docs:

-- Generate salt
SET @salt = UNHEX(SHA2(UUID(), 256));

-- Create user and hash password with salt
INSERT INTO guacamole_user (username, password_salt, password_hash)
     VALUES ('myuser', @salt, UNHEX(SHA2(CONCAT('mypassword', HEX(@salt)), 256)));

Но здесь первая команда выдает мне ошибку:

guacamole_db=# SET @salt = UNHEX(SHA2(UUID(), 256));
ERROR:  syntax error at or near "@"
LINE 1: SET @salt = UNHEX(SHA2(UUID(), 256));
            ^

Из документов вот как они создали пользователя по умолчанию в postgres: "guacadmin"

INSERT INTO guacamole_entity (name, type) VALUES ('guacadmin', 'USER');
INSERT INTO guacamole_user (entity_id, password_hash, password_salt, password_date)
SELECT
    entity_id,
    decode('CA458A7D494E3BE824F5E1E175A1556C0F8EEF2C2D7DF3633BEC4A29C4411960', 'hex'),  -- 'guacadmin'
    decode('FE24ADC5E11E2B25288D1704ABE67A79E342ECC26064CE69C5B3177795A82264', 'hex'),
    CURRENT_TIMESTAMP
FROM guacamole_entity WHERE name = 'guacadmin' AND guacamole_entity.type = 'USER';

-- Grant admin permission to read/update/administer self
INSERT INTO guacamole_user_permission (entity_id, affected_user_id, permission)
SELECT guacamole_entity.entity_id, guacamole_user.user_id, permission::guacamole_object_permission_type
FROM (
    VALUES
        ('guacadmin', 'guacadmin', 'READ'),
        ('guacadmin', 'guacadmin', 'UPDATE'),
        ('guacadmin', 'guacadmin', 'ADMINISTER')
) permissions (username, affected_username, permission)
JOIN guacamole_entity          ON permissions.username = guacamole_entity.name AND guacamole_entity.type = 'USER'
JOIN guacamole_entity affected ON permissions.affected_username = affected.name AND guacamole_entity.type = 'USER'
JOIN guacamole_user            ON guacamole_user.entity_id = affected.entity_id;

Как я могу перевести это, чтобы создать нового пользователя, "test" с паролем "123456" и только READ REMSION?

так выглядят связанные таблицы:

guacamole_entity:

 entity_id |   name    | type
-----------+-----------+------
         1 | guacadmin | USER

guacamole_user:

 user_id | entity_id |                           password_hash                            |                           password_salt                            |        pass
word_date         | disabled | expired | access_window_start | access_window_end | valid_from | valid_until | timezone | full_name | email_address | organization | organiza
tional_role
---------+-----------+--------------------------------------------------------------------+--------------------------------------------------------------------+------------
------------------+----------+---------+---------------------+-------------------+------------+-------------+----------+-----------+---------------+--------------+---------
------------
       1 |         1 | \xca458a7d494e3be824f5e1e175a1556c0f8eef2c2d7df3633bec4a29c4411960 | \xfe24adc5e11e2b25288d1704abe67a79e342ecc26064ce69c5b3177795a82264 | 2020-01-13
09:10:56.73947+00 | f        | f       |                     |                   |            |             |          |           |               |              |

guacamole_user_permission:

 entity_id | affected_user_id | permission
-----------+------------------+------------
         1 |                1 | READ
         1 |                1 | UPDATE
         1 |                1 | ADMINISTER

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Я закончил тем, что создал пользователя с помощью POST-запроса в python: Первая часть заключается в том, что нам нужно получить токен для всех запросов, которые мы хотим отправить в guacamole api:

запросы на импорт

url = "http://guacamoleipornginx/api"
headers ={
    'Accept': 'application/json',
    'Content-Type': 'application/x-www-form-urlencoded'}
res = requests.post(url + "/tokens", headers=headers, data={'username': 'guacadmin', 'password': 'guacadmin'})
authToken = res.json()['authToken']

И с помощью этого токена мы можем отправить запрос на создание пользователя: заполните значения USERNAME nad USERPASSWORD своими значениями.

headers ={
        'Accept': 'application/json',
        'Content-Type': 'application/json;charset=UTF-8'}

uri = "session/data/postgresql/users?token=" + authToken
data = {
        "username": $USERNAME,
        "password": $USERPASSWORD,
        "attributes":{"disabled":"","expired":"","access-window-start":"","access-window-end":"","valid-from":"","valid-until":"","timezone":None}}
res = requests.post(url + "/" + uri, headers=headers, json=data)

Последняя часть здесь дает пользователю, которого вы создали выше разрешения. чтобы увидеть соединение, вам не нужно использовать его, если вам не нужно. для этого запроса нам понадобится идентификатор соединения, которое вы создали. мой гуакамоле это docker гуакамоле, который я получил здесь: https://github.com/boschkundendienst/guacamole-docker-compose

И он использует nginx + гуакамоле и postgreSql, поэтому в postgrs вы можете увидеть идентификатор соединения под guacamole_connection. и затем вы можете добавить разрешение подключения для созданного пользователя:

uri = "session/data/postgresql/users/" + $USERNAME+ "/permissions?token=" + authToken
ID = 52 # here is the connection id of some connection created in guoacamole psql db.
data = [
            {"op":"add",
            "path": '/connectionPermissions/' + str(ID),
            "value":"READ"}]
res = requests.patch(url + "/" + uri, headers=headers, json=data)

Вы можете добавить подключение также к гуакамоле, используя этот метод. вам нужно будет просто открыть F12 и посмотреть значения, которые он посылает при создании соединения, и использовать его с тем же методом, что и выше.

Я добавлю еще одну интересную вещь - вот как вы можете видеть активные соединения:

url = "http://guacamoleipornginx/api"
uri = "/session/data/postgresql/activeConnections?token=" + authToken
res = requests.get(url + "/" + uri)

Надеюсь, это поможет, у меня было много проблем с получением всей этой информации.

0 голосов
/ 26 января 2020

Пример, на который вы ссылаетесь, сделан для MySql. Функция для генерации пароля использует MySql Speci c функции, поэтому вы должны найти соответствующие замены в PostgreSQL.

. Быстрый поиск обнаружил следующие потенциальные замены:

UNHEX - Эквивалент MySQL HEX () и UNHEX () в Postgres?

SHA2 - возможно, некоторые функции из модуля pgcrypto, https://www.postgresql.org/docs/8.3/pgcrypto.html

UUID - возможно, uuid_generate_v1 () или uuid_generate_v4 ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...