Lösung für Rechtevergabe im Synology Chat
Hallo zusammen!
Da es wohl immer noch keine Lösung für die Rechtevergabe auf der Synology-Chat-Oberfläche gibt
, habe ich mir mal die Datenbanken des Chat-Servers genauer angeschaut und habe festgestellt, dass es tatsächlich Rechteprivilegientabellen gibt.
Diese beschränken sich zwar nur auf vier Gruppen (System-Admin, Normaler-Benutzer, Gast und Gastmanager), aber immerhin kann man dadurch verhindern, dass beispielsweise Nicht-Administratoren einen Kanal löschen bzw. archivieren (und vieles mehr) können, was meiner Meinung nach schon etwas gefährlich ist / war. Zudem man diese ja nicht mehr aus dem Archiv wiederherstellen kann.
Im Einzelnen können folgende Rechte vergeben werden:
acl_id | acl_name | Meine tolle Beschreibung |
1 | channel_kick | *** Rechte für das Entfernen von Personen aus Kanälen |
2 | channel_set | *** Rechte für das Bearbeiten des Kanalnamens / der Kanalbeschreibung |
3 | channel_invite | *** Rechte für das Einladen von Personen in Kanäle |
4 | channel_join | * (keine Ahnung) |
5 | channel_create | *** Rechte für das Erstellen von Kanälen |
6 | channel_close | *** Rechte für das Schließen / Löschen von Kanälen |
7 | channel_archive | *** Rechte für das Archivieren von Kanälen |
8 | channel_anonymous | ** Wenn man diese Berechtigung nicht hat, scheint die Standard-Konversation "Mein Speicherplatz" nicht verfügbar zu sein und die Navigation sich auf das zu beschränken worauf man auch wirklich Zugriff hat - ähnlich wie die Ansicht eines Gastes. (Bitte mit Vorsicht verwenden) |
9 | channel_disjoin | *** Rechte für das Verlassen eines Kanals |
10 | channel_public | *** Rechte für das Einsehen öffentlicher Kanäle |
11 | channel_encryption | ** (verbuggt) |
50 | webhook_create | *** Rechte für das Erstellen eines neuen Webhooks |
51 | webhook_read | *** Rechte für das Verwenden von Webhooks |
100 | guest_manage | ** Rechte für das Einladen eines neuen Gasts (Gast-Manager) (Diese Berechtigung besser in Ruhe lassen, da sie auch in der Obfläche der Chat Admin Konsole konfiguriert werden kann!) |
*** getestet und funktionsfähig
** Achtung
* ???
Um die Rechte-Tabellen bearbeiten zu können, ist es wichtig, dass ihr eine SSH-Verbindung/Telnet-Verbindung zu eurer Disk-Station aufbauen könnt und bei besonderen Anforderungen SQL-Kenntnisse habt. Das Grundlegende werde ich allerdings hier erklären:
1. Wie gerade erwähnt, muss zuerst eine SSH-Verbindung/Telnet-Verbindung (z. B. mithilfe von PuTTY) zur Disk-Station aufgebaut werden. Wichtig ist sich hierbei mit einem Konto der Administratoren-Gruppe (im DSM die Gruppe "administrators") anzumelden. (Sollten beim nächsten Schritt Probleme auftretten, kann man es mal mit dem User root versuchen)
2. Danach kann man sich mithilfe des folgenden Befehls als Datenbank-User "postgres" anmelden (das Passwort sollte, standardmäßig das sein, was man beim Einrichten seiner Synology DS angegeben hat):
3. Wenn alles geklappt hat, sollte so etwas in der Art vor dem Cursor stehen: "postgres=#" , wodurch man sich auf dem PSQL-Komandozeilen-Interface befindet.
4. Nun verbinden wir uns mit der Chat-Datenbank:
Folgendes sollte als Bestätigung erscheint worden sein: "You are now connected to database "synochat" as user "postgres"."
5. Jetzt können wir bereits Änderungen in der Datenbanktabelle vornehmen. Hierfür verwendet man einfach normale SQL-Statements.
Für uns ist die Tabelle "acl_permissions" besonders wichtig, da hier den Berechtigungen (in der oberen Tabelle - ^^siehe oben^^) die Bentzergruppen (System-Admin, Normaler-Benutzer, Gast und Gastmanager) zugeordnet werden.
(Eigentlich werden die Gruppen - wie ich sie genannt habe - in der Datenbanktabelle "Rollen" (role / roles) genannt - also nicht wundern. Ich denke man kann sich besser etwas unter "Gruppen" als unter "Rollen" vorstellen.)
roles (Gruppen):
role_id (Guppen-Id) | role_name (Gruppen-Name) | Beinhaltet? |
1 | System-Admin | Alle Benutzer die im DSM der Gruppe "administrators" zugeordnet sind. |
2 | Normaler Benutzer | Alle Benutzer (außer Gäste) |
3 | Gast | Alle Gäste |
4 | Gastmanager | Eine Person, die zum Gastmanager ernannt worden ist. |
In der Datenbanktabelle "acl_permissions" wird die "role_id" der "acl_id" (^^siehe Tabelle oben^^) zugeordnet!
Beispiel 1:
Vorhaben:
Ich möchte allen Nicht-Administratoren das Löschen und Archivieren von Kanälen verbieten.
Theoretische Umsetzung:
Die Berechtigungen für das Löschen und Archivieren von Kanälen statt allen "normalen Benutzern" nun nur "System-Admins" zuordnen
Praktische Umsetzung:
Mithilfe des folgenden SQL-Befehls die der Berechtigungs-Id (acl_id) zugewiesenen Gruppen-Id (role_id) von 2 (wie sie standardmäßig gesetzt ist) auf 1 ändern:
Für das Einschränken der Löschfunktion:
Rich (BBCode):
UPDATE acl_permissions SET role_id = 1 WHERE acl_id = 6;
Für das Einschränken der Archivierungsfunktion:
Rich (BBCode):
UPDATE acl_permissions SET role_id = 1 WHERE acl_id = 7;
Das war's schon. In der Browserversion sollte nun bei Nicht-Admins in den Kanaleinstellungen der Reiter "Kanalverwaltung" verschwunden sein und in der Chat-App ein Fehler beim Löschen oder Archivieren eines Kanals kommen. Wenn nur die Löschfunktion oder die Archivierungsfunktion eingeschränkt worden ist, sollte die jeweilige Option ausgeblendet worden sein statt dem Verschwinden des Reiters "Kanalverwaltung".
__________________________________________________
Beispiel 2:
Vorhaben:
Ich möchte allen Nicht-Administratoren das Erstellen von neuen Kanälen und das Ändern von Kanalnamen und Kanalbeschreibungen verbieten.
Theoretische Umsetzung:
Die Berechtigungen für das Erstellen und Ändern von Kanälen statt allen "normalen Benutzern" nun nur "System-Admins" zuordnen.
Praktische Umsetzung:
Mithilfe des folgenden SQL-Befehls die der Berechtigungs-Id (acl_id) zugewiesenen Gruppen-Id (role_id) von 2 (wie sie standardmäßig gesetzt ist) auf 1 Ändern:
Erstellen von Kanälen einschränken:
Rich (BBCode):
UPDATE acl_permissions SET role_id = 1 WHERE acl_id = 5;
Ändern (Name und Beschreibung) von Kanälen einschränken:
Rich (BBCode):
UPDATE acl_permissions SET role_id = 1 WHERE acl_id = 2;
Das war's schon. Nicht-Admins sollten nun keinen neuen Kanal mehr erstellen können bzw. nicht mehr den Namen oder die Beschreibung eines bereits existierenden Kanals ändern können.
__________________________________________________
Um das Ganze vielleicht besser zu verstehen, kann man sich auch einfach mal die ganzen Datenbank-Tabellen anzeigen lassen, um nachvollziehen zu können wie ich auf die Befehle oben gekommen bin:
Alle Datenbanktabellen in einer Datenbank anzeigen:
Inhalt einer Datenbanktabelle ausgeben:
Rich (BBCode):
SELECT * FROM <TABELLENNAME>;
Tabellenname ohne <>
__________________________________________________
Ich hoffe ich konnte hiermit dem einen oder anderen etwas weiterhelfen. Bei Fragen einfach melden.
Viele Grüße
Philipp