PL/Access Control List: Difference between revisions
mNo edit summary |
|||
Line 8: | Line 8: | ||
==Zrozumienie ACL== | ==Zrozumienie ACL== | ||
Lista ACL ma dwa główne składniki: grupy i listy ACL. Pojawiają się jako sekcje '' '<group name = "">' '' i '' '<acl name = "" />' ''. Ich celem jest: | Lista ACL ma dwa główne składniki: grupy i listy ACL. Pojawiają się jako sekcje '''<group name = "">''' i '''<acl name = "" />'''. Ich celem jest: | ||
<br \> | <br \> | ||
'''1.''' Przyznanie użytkownikom uprawnień do kontrolowania serwera i używania poleceń dotyczących zasobów. Przykłady:''<br \> | '''1.''' Przyznanie użytkownikom uprawnień do kontrolowania serwera i używania poleceń dotyczących zasobów. Przykłady:''<br \> |
Revision as of 15:37, 7 December 2020
MTA zawiera pełną listę kontroli dostępu (ACL), która pozwala na zabezpieczenie i ograniczenie dostępu do serwera, jego funkcji i zasobów na wiele różnych sposobów.
Kluczową koncepcją ACL w MTA (i ogólnie list ACL) jest to, że nadajesz określonemu obiektowi zestaw praw. W przypadku MTA obiekty to jedna z dwóch rzeczy - zasoby lub użytkownicy. W MTA dostępnych jest wiele praw - dotyczą one głównie funkcji skryptowych po stronie serwera.
Zasadniczo oznacza to, że lista ACL pozwala dokładnie wybrać funkcje, które może wykonywać zasób lub użytkownik. Może to być oczywiście nieocenione - na przykład uniemożliwianie wszystkim graczom na serwerze możliwości blokowania się nawzajem lub uniemożliwienie tym samym nowym, nieprzetestowanym zasobom.
Oczywiście „z wielką mocą wiąże się wielka odpowiedzialność” i bardzo łatwo jest całkowicie zniszczyć zasoby - na przykład wyłączenie spawnPlayer dla wszystkich zasobów byłoby złą rzeczą. Aczkolwiek są sytuacje, w których możesz to zrobić - jeśli chcesz na przykład zmusić wszystkie swoje zasoby do korzystania z zasobu menedżera odradzania, ale nawet To jest nieco drakońskie.
Zrozumienie ACL
Lista ACL ma dwa główne składniki: grupy i listy ACL. Pojawiają się jako sekcje <group name = ""> i <acl name = "" />. Ich celem jest:
1. Przyznanie użytkownikom uprawnień do kontrolowania serwera i używania poleceń dotyczących zasobów. Przykłady:
- Zezwalanie tylko administratorom na używanie funkcji giveweapon zasobu Freeroam
- Zezwalanie wszystkim użytkownikom na uruchamianie zasobu
2. Przyznaj zasobom uprawnienia do korzystania z funkcji skryptów i funkcji innych zasobów. Przykłady:
- Zezwalanie zasobowi na używanie funkcji restartResource
- Zezwalanie zasobowi na użycie wywołania (call) w celu użycia funkcji wyeksportowanych z innego skryptu
Domyślne grupy
MTA dostarcza do listy ACL domyślne grupy z rosnącymi uprawnieniami. Te grupy to:
- Everyone
- Moderator
- SuperModerator
- Admin
- Console - Kontroluje uprawnienia osób, które używają konsoli poprzez <object name = "user.Console" />
- RPC - Zdalne wywołanie procedury. W szczególności przyznaje dostęp tylko do callRemote i wyłącza polecenia zasobów domyślnych. Sprawdź funkcję, aby uzyskać szczegółowe informacje.
Aby dokładniej wyjaśnić, użyję grupy 'Everyone' jako przykładu. Domyślnie wygląda to tak:
<group name="Everyone"> <acl name="Default" /> <object name="user.*" /> <object name="resource.*" /> </group>
Najpierw zauważysz nazwę ACL wewnątrz grupy. Określa ona, jakie uprawnienia ma dana grupa. Użytkownicy i zasoby w tej grupie będą mieć uprawnienia określone na liście nazw ACL „Default”.
Uwaga: Zauważysz, że ta grupa jest wyjątkowa, ponieważ obejmuje każdego użytkownika i każdy zasób za pomocą symbolu wieloznacznego (*), co oznacza każdy element w danym podtypie.
Teraz przewiń listę ACL dalej w dół, a zobaczysz listę <acl name = "Default" />. Uwaga: Drastycznie przyciąłem tę listę ze względu na jej długość.
<acl name="Default"> <right name="command.start" access="false" /> <right name="command.stop" access="false" /> <right name="command.stopall" access="false" /> ... <right name="function.executeCommandHandler" access="false" /> <right name="function.setPlayerMuted" access="false" /> <right name="function.restartResource" access="false" /> ... <right name="general.adminpanel" access="false" /> <right name="general.tab_players" access="false" /> <right name="general.tab_resources" access="false" /> ... <right name="command.freeze" access="false" /> <right name="command.shout" access="false" /> <right name="command.spectate" access="false" /> ... </acl>
- Functions (Funkcje) są domyślnymi funkcjami skryptowymi MTA. Na przykład, jeśli zasób wymagałby użycia restartResource i znajdował się tylko w grupie „Everyone” (z listą „Default”), odmówiono by mu dostępu do restartResource i nie działałby poprawnie.
- Commands (Komendy) są tworzone, gdy zasób używa funkcji addCommandHandler. Przykładem może być wpisanie /createvehicle [pojazd] w oknie czatu dla zasobu freeroam. Określa, czy użytkownicy w grupie używającej tej listy ACL mogą używać tej komendy.
Uwaga: polecenia nie mają wpływu na zasoby w grupie. Komendy dotyczą tylko użytkowników.
- General (Ogólne) to niestandardowa grupa nazw utworzona przez zasób administracyjny, ale działa na tych samych zasadach. Skrypt współpracuje z nimi za pomocą hasObjectPermissionTo
Zauważysz, że niektóre grupy, takie jak admin, mają wiele sekcji <acl name = "" />. Przykładem jest grupa administracyjna (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>
W ten sposób uzyskujesz wszystkie permisje zdefioniowane w każdej sekcji <acl name="" /> w kolejności umieszczenia na liście. Na przykład grupa administratorów (Admin) sprawdza czy wszystkie uprawnienia są nadane członkom grupy Administratorzy (Admin) korzystając ze wszystkich list. W przypadku konfliktów wygrywa najniższy wpis. Załóżmy na przykład, że te 2 listy ACL znajdują się w grupie w następującej kolejności:
1. <acl name="Default"> ustawia <right name="general.ModifyOtherObjects" access="false" />
2. <acl name="Admin"> ustawia <right name="general.ModifyOtherObjects" access="true" />
3. Dla wszystkich użytkowników i zasobów w grupie administratorskiej: <right name="general.ModifyOtherObjects" access="true" />
Grupy zasobów i listy ACL
Zauważysz, że istnieją jeszcze inne wbudowane grupy. Zostały one zdefiniowane przez zasoby dostarczone z MTA. Jeśli zasób chce wyznaczyć określone prawa ACL, które nie są dostarczane przez domyślne grupy, może utworzyć własną nazwę ACL i grupę, która będzie z niej korzystać. Jako przykład pokażę grupę AMX. AMX jest przeznaczony do emulacji skryptów SA-MP i potrzebuje określonego zestawu uprawnień, który nie pasuje dobrze do grup domyślnych. Jest to pokazane poniżej:
<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" /> ... <right name="command.kick" access="false" /> <right name="command.freeze" access="false" /> <right name="command.mute" access="false" /> ... </acl>
Prawa dostępu zasobów do innych zasobów
Aby zezwolić na dostęp do dowolnego innego zasobu, musisz zezwolić na to w pliku ACL. Reguła general.ModifyOtherObjects
przyznaje pełny dostęp do dowolnego zasobu na serwerze. Zobacz przykład w ostatniej sekcji, jak powinien on wyglądać.
Jeśli nie chcesz nadawać zasobowi pełnego dostępu do każdego zasobu na serwerze, możesz dołączyć nazwę zasobu poprzedzoną kropką (.) do reguły general.ModifyOtherObjects
:
<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>
Powyższe definicje ACL przyznają każdemu zasobowi z listą ACL "Custom" dostęp do zasobów "resourceName", "admin", "runcode" i "mapmanager”.
Modyfikowanie listy ACL
Istnieją trzy sposoby modyfikowania listy ACL - sposób, w jaki to robisz, zależy od tego, kim jesteś.
Interfejs HTTP
Możesz użyć interfejsu HTTP webadmin, aby zmodyfikować ACL w swojej przeglądarce internetowej. Jest to zdecydowanie najłatwiejszy sposób. Po prostu upewnij się, że zasób webadmin jest uruchomiony na twoim serwerze i przejdź na stronę http://ipSerwera:portHTTP/. Następnie możesz użyć dwóch sekcji - list ACL i grup. Listy ACL umożliwiają tworzenie list kontroli dostępu - list praw. Grupy umożliwiają grupowanie kolekcji użytkowników i przypisywanie im list ACL. Na przykład sekcja ACL umożliwia określenie, że grupa ACL - Admin - ma dostęp do polecenia konsoli start. Możesz przejść do sekcji Grupy i utworzyć grupę administracyjną, która ma dostęp do administracyjnej listy acl. Następnie możesz dodać użytkowników do grupy administratorskiej.
Plik XML
Możesz również ręcznie zmodyfikować plik ACL.xml. Ma to dość prostą składnię, ale czasami może być nieco zagmatwana. Jeśli zrobisz to, gdy serwer jest uruchomiony, nie zapomnij użyć funkcji aclReload w konsoli serwerowej ("start runcode", "run aclReload ()"), aby nowa lista ACL została załadowana lub w inny sposób zatrzymaj serwer przed zmodyfikowaniem listy ACL. Zapobiega to również przypadkowemu nadpisaniu zmian przez serwer.
Funkcje skryptów
Do modyfikowania listy ACL można również użyć wielu funkcji skryptowych ACL. Oczywiście możesz (i naprawdę powinieneś!) ograniczyć dostęp do funkcji ACL za pomocą tej listy. Zauważ, że zasób Admin, który jest dostarczany z MTA, może być używany do zarządzania listą ACL z karty zasobów. Aby korzystać z panelu administracyjnego, musisz być skonfigurowany jako administrator.
Kliknij tutaj, aby uzyskać instrukcje konfiguracji administratora.
Zobacz także
- aclCreate
- aclCreateGroup
- aclDestroy
- aclDestroyGroup
- aclGet
- aclGetGroup
- aclGetName
- aclGetRight
- aclGroupAddACL
- aclGroupAddObject
- aclGroupGetName
- aclGroupList
- aclGroupListACL
- aclGroupListObjects
- aclGroupRemoveACL
- aclGroupRemoveObject
- aclList
- aclListRights
- aclReload
- aclRemoveRight
- aclSave
- aclSetRight
- hasObjectPermissionTo
- isObjectInACLGroup