DE/Access Control List

From Multi Theft Auto: Wiki
Jump to navigation Jump to search

MTA enthält eine vollständige Zugriffskontrollliste (Access Control List, ACL), mit der Sie den Zugriff auf den Server, seine Funktionen und Ressourcen auf vielfältige Weise sichern und einschränken können.

Das Schlüsselkonzept der ACL von MTA (und ACLs im Allgemeinen) besteht darin, dass Sie einem bestimmten Objekt eine Reihe von Rechten zuweisen. Im Fall von MTA ist ein Objekt eines von zwei Dingen - Ressourcen oder Benutzer. In MTA gibt es zahlreiche "Rechte", die sich hauptsächlich auf serverseitige Skriptfunktionen beziehen.

Das bedeutet im Wesentlichen, dass Sie mit der ACL genau festlegen können, welche Funktionen eine Ressource oder ein Benutzer ausführen darf. Dies kann natürlich von unschätzbarem Wert sein - zum Beispiel, um zu verhindern, dass alle Spieler Ihres Servers sich gegenseitig bannen können, oder um zu verhindern, dass Ihre neuen, noch nicht getesteten Ressourcen dasselbe tun können.

Natürlich kommt "mit großer Macht auch große Verantwortung" und es ist sehr leicht möglich, Ressourcen komplett zu zerstören - zum Beispiel wäre es eine schlechte Sache, spawnPlayer für alle Ressourcen zu deaktivieren. Natürlich gibt es Situationen, in denen man dies tun möchte - wenn man z.B. alle Ressourcen dazu zwingen möchte, eine Spawn-Manager-Ressource zu verwenden, aber selbst dies ist etwas drakonisch.

Understanding the ACL

Die ACL besteht aus zwei Hauptkomponenten: Gruppen und ACL-Listen. Sie erscheinen als <group name="">-Knoten und <acl name="" /> Knoten. Ihr Zweck ist es:
1. Erteilen Sie Benutzern die Berechtigung, den Server zu steuern und Ressourcenbefehle zu verwenden. Beispiele:

  • Nur Admins dürfen die Giveweapon-Funktion von Freeroam nutzen
  • Alle Benutzer können eine Ressource starten

2. Erteilen Sie Ressourcen die Erlaubnis, Skriptfunktionen und Funktionen anderer Ressourcen zu verwenden. Beispiele:

  • Zulassen, dass eine Ressource die Funktion restartResource verwendet
  • Erlauben, dass eine Ressource die Aufruffunktion verwendet, um exportierte Funktionen aus einem anderen Skript zu verwenden

Default Groups

MTA hat einige Standardgruppen mit zunehmenden Berechtigungen eingerichtet. Diese Gruppen sind:

  • Everyone
  • Moderator
  • SuperModerator
  • Admin
  • Console - Dies steuert die Berechtigungen der Personen, die die Konsole über <object name="user.Console" />
  • RPC - Remote Procedure Call. Gewährt insbesondere nur Zugriff auf callRemote und deaktiviert die Befehle der Standardressourcen. Prüfen Sie die Funktion für Details.


Zur weiteren Erläuterung werde ich die Gruppe "Alle" als Beispiel verwenden. Standardmäßig sieht sie wie folgt aus:

    <group name="Everyone">
        <acl name="Default" />
        <object name="user.*" />
        <object name="resource.*" />
    </group>


Als erstes fällt Ihnen der acl-Name innerhalb der Gruppe auf. Er legt fest, welche Berechtigungen die Gruppe hat. Benutzer und Ressourcen in dieser Gruppe haben die Rechte, die in der Liste "Default" acl name angegeben sind. Hinweis: Diese Gruppe ist insofern etwas Besonderes, als sie jeden Benutzer und jede Ressource einschließt, indem sie an der Stelle des Benutzer- oder Ressourcennamens einen wildcard(*) verwendet.

Scrollen Sie nun weiter nach unten in der ACL und Sie werden die <acl name="Default" /> Auflistung sehen. Beachten Sie, dass ich diese Liste aufgrund ihrer Länge drastisch gekürzt habe.

    <acl name="Default">
        <right name="command.start" access="false" />
        <right name="command.stop" access="false" />
        <right name="command.stopall" access="false" />
        ...etc etc...
        <right name="function.executeCommandHandler" access="false" />
        <right name="function.setPlayerMuted" access="false" />
        <right name="function.restartResource" access="false" />
        ...etc etc...
        <right name="general.adminpanel" access="false" />
        <right name="general.tab_players" access="false" />
        <right name="general.tab_resources" access="false" />
        ...etc etc...
        <right name="command.freeze" access="false" />
        <right name="command.shout" access="false" />
        <right name="command.spectate" access="false" />
        ...etc etc...
    </acl>


  • Function'-Einträge sind MTA-Scripting-Funktionen. Wenn zum Beispiel eine Ressource restartResource verwenden müsste und nur in der Gruppe "Everyone" (mit der Liste "Default") wäre, würde ihr der Zugriff auf restartResource verweigert und sie würde nicht richtig funktionieren.
  • 'Commands werden erstellt, wenn eine Ressource addCommandHandler verwendet. Ein Beispiel wäre die Eingabe von /createvehicle [vehicle] in der Chatbox für die Ressource freeroam. Dies steuert, ob Benutzer in der Gruppe, die diese ACL verwendet, den Befehl verwenden können. Hinweis: Befehle haben keine Auswirkungen auf Ressourcen innerhalb der Gruppe. Befehle sind nur auf Benutzer bezogen.
    • General ist eine benutzerdefinierte Rechtegruppe, die von der Admin-Ressource erstellt wird, aber nach den gleichen Prinzipien funktioniert. Das Skript arbeitet mit ihnen durch die Verwendung von hasObjectPermissionTo


Sie werden feststellen, dass einige Gruppen, wie z. B. admin, mehrere <acl name="" />-Knoten. Ein Beispiel dafür ist die Gruppe admin:

    <group name="Admin">
        <acl name="Moderator" />
        <acl name="SuperModerator" />
        <acl name="Admin" />
        <acl name="RPC" />
        <object name="resource.admin" />
        <object name="resource.webadmin" />
        <object name="user.Random" />
    </group>

Hier werden alle in jedem <acl name="" Knoten definierten Berechtigungen /> Knoten in der Reihenfolge der Auflistung. So stellt zum Beispiel die Gruppe "admin" sicher, dass alle Berechtigungen für "admins" vergeben werden, indem sie alle Listen verwendet. Wenn es Konflikte gibt, gewinnt der niedrigste Eintrag. Nehmen wir zum Beispiel an, diese 2 acls wären in einer Gruppe in der folgenden Reihenfolge:

1. <acl name="Default"> sets <right name="general.ModifyOtherObjects" access="false" />
2. <acl name="Admin"> sets <right name="general.ModifyOtherObjects" access="true" />
3. For all users and resources in group admin: <right name="general.ModifyOtherObjects" access="true" />

Resource Groups and ACLs

Sie werden feststellen, dass es einige andere Gruppen gibt, die mit MTA mitgeliefert wurden. Diese wurden von Ressourcen definiert, die mit MTA geliefert wurden. Wenn eine Ressource bestimmte ACL-Rechte festlegen möchte, die nicht von den Standard-MTA-Gruppen bereitgestellt werden, kann sie einen eigenen ACL-Namen und eine Gruppe erstellen, die diesen Namen verwendet. Ich werde den Eintrag von AMX als Beispiel zeigen. AMX wurde entwickelt, um SA-MP-Skripte zu emulieren, und benötigt eine Reihe von Rechten, die nicht gut zu den Standardgruppen passen. Dies ist unten dargestellt:

    <group name="AMX">
        <acl name="AMX" />
        <object name="resource.amx" />
    </group>

    <acl name="AMX">
        <right name="general.ModifyOtherObjects" access="true" />
        <right name="function.startResource" access="true" />
        <right name="function.stopResource" access="true" />
        <right name="general.adminpanel" access="false" />
        ...etc etc...
        <right name="command.kick" access="false" />
        <right name="command.freeze" access="false" />
        <right name="command.mute" access="false" />
        ...etc etc...
    </acl>

Grant resources access to other resources

Um einer Ressource den Zugriff auf eine andere Ressource zu gestatten, müssen Sie sie in Ihrer ACL-Datei ausdrücklich zulassen. Die Regel general.ModifyOtherObjects gewährt vollen Zugriff auf alle Ressourcen des Servers. Das Beispiel im letzten Abschnitt zeigt, wie es aussehen sollte.

Wenn Sie einer Ressource nicht den vollständigen Zugriff auf jede Ressource auf dem Server gewähren wollen, dann können Sie den Namen der veränderbaren Ressource mit einem vorangestellten Punkt (.) an die general.ModifyOtherObjects-Regel anhängen:

    <acl name="Custom">
        <right name="general.ModifyOtherObjects.resourceName" access="true" />
        <right name="general.ModifyOtherObjects.admin" access="true" />
        <right name="general.ModifyOtherObjects.runcode" access="true" />
        <right name="general.ModifyOtherObjects.mapmanager" access="true" />
    </acl>

Die obigen ACL-Definitionen gewähren jeder Ressource mit der ACL Custom Zugriff auf die Ressourcen resourceName, admin, runcode and mapmanager.

Modifying the ACL

Es gibt drei Möglichkeiten, die ACL zu ändern - wie Sie das tun, hängt davon ab, wer Sie sind.

HTTP Interface

Sie können die webadmin HTTP-Schnittstelle verwenden, um die ACL in Ihrem Webbrowser zu ändern. Dies ist bei weitem der einfachste Weg. Stellen Sie einfach sicher, dass die webadmin-Ressource auf Ihrem Server gestartet ist und besuchen Sie http://ServerIP:HttpPort/. Sie können dann die beiden Abschnitte ACLs und Gruppen verwenden. Mit ACLs können Sie Ihre Zugriffskontrolllisten - Listen von Rechten - erstellen. Mit Gruppen können Sie Gruppen von Benutzern zusammenfassen und ihnen ACLs zuweisen. Im Abschnitt ACLs können Sie beispielsweise festlegen, dass die ACL Admin Zugriff auf den Konsolenbefehl start hat. Im Abschnitt "group" können Sie eine Admin-"group" erstellen, die Zugriff auf Ihre Admin-ACL hat. Sie können dann Benutzer zu Ihrer Admin group hinzufügen.

XML file

Sie können die Datei ACL.xml manuell ändern. Die Syntax ist recht einfach, kann aber manchmal etwas verwirrend sein. Wenn Sie dies tun, während der Server läuft, vergessen Sie nicht, die Skriptfunktion aclReload ("start runcode", "run aclReload()") aufzurufen, damit die neue ACL geladen wird, oder stoppen Sie Ihren Server anderweitig, bevor Sie Änderungen vornehmen. Dies verhindert auch, dass Ihre Änderungen versehentlich vom Server überschrieben werden.

Scripting functions

Sie können eine große Anzahl von ACL-Skriptfunktionen verwenden, um die ACL im laufenden Betrieb zu ändern. Natürlich können (und sollten!) Sie den Zugriff auf die ACL-Funktionen mit der ACL beschränken. Beachten Sie, dass die admin resource, die mit MTA geliefert wird, zur Verwaltung der ACL auf der Registerkarte Ressourcen verwendet werden kann. Sie müssen als Administrator eingerichtet sein, um das Admin-Panel zu verwenden. Click here for admin setup instructions.

See Also