|
|
| Line 1: |
Line 1: |
| MTA включает в себя полноценный Access Control List (ACL, список контроля доступа), позволяющий вам обезопашивать и ограничивать доступ к серверу, его функциям и ресурсам любыми способами, которыми вы пожелаете.
| |
|
| |
|
| Ключевая концепция MTA'шного ACL (и ACL в целом) - то, что вы даете определенному объекту набор прав. В случае с MTA, объекты - это одно из двух: либо ресурсы, либо пользователи. В MTA доступно множество ''прав'' - они в основном сфокусированы на скриптинговых функциях серверной стороны.
| |
|
| |
| По сути это значит, что ACL позволяет вам выбирать к использованию каких в точности функций могут иметь доступ ресурс или игрок. Очевидно, что эта возможность бесценна - например, можно не допустить возможность рядовых игроков сервера банить друг друга, или не дать вашим новым непротестированным ресурсам это делать.
| |
|
| |
| Конечно, ''большая сила влечет за собой большую ответственность'', и очень легко можно сломать ресурсы полностью - например, отключение [[spawnPlayer]] для всех ресурсов будет ОЧЕНЬ плохой идеей. В то же время, есть ситуации, когда вам может захотеться это сделать - если вы хотите принудить все свои ресурсы использовать ресурс spawn manager, например, но даже это несколько драконовские меры.
| |
|
| |
| ==Понимание ACL==
| |
| ACL состоит из двух важных компонентов: групп и ACL-списков. Они фигурируют как узлы '''<group name="">''' и '''<acl name="" />'''. Их назначение:<br \>
| |
| '''1.''' Предоставить пользователям полномочия контролировать сервер и пользоваться командами ресура. Примеры:''<br \>
| |
| *Позволить только админам использовать функцию giveweapon мода freeroam
| |
| *Позволить всем пользователям запускать ресурс
| |
| '''2.''' Предоставить ресурсам полномочия использовать функции скриптинга и функции других ресурсов. Примеры:<br \>
| |
| *Позволить ресурсу использовать функцию restartResource
| |
| *Позволить ресурсу использовать функцию call для использования экспортированных из другого скрипта функций
| |
|
| |
| ===Группы по умолчанию===
| |
| MTA предоставляет некоторые группы по умолчанию, в списке они по возрастанию полномочий. Эти группы:
| |
| *'''Everyone'''
| |
| *'''Moderator'''
| |
| *'''SuperModerator'''
| |
| *'''Admin'''
| |
| *'''Console''' - Эта контролирует полномочия людей, которые используют консоль, через '''<object name="user.Console" />'''
| |
| *'''RPC''' - Remote Procedure Call (Удаленный Вызов Процедуры). Конкретно эта предоставляет доступ только к [[callRemote]] и отключает команды ресурсов по умолчанию. Для подробностей смотрите саму функцию.
| |
| <br \>
| |
|
| |
| Для дальнейших объяснений, я воспользуюсь группой Everyone в качестве образца. По умолчанию это выглядит так:
| |
| <syntaxhighlight lang="lua"> <group name="Everyone">
| |
| <acl name="Default" />
| |
| <object name="user.*" />
| |
| <object name="resource.*" />
| |
| </group>
| |
| </syntaxhighlight>
| |
| <br \>
| |
| Сначала вы заметите имя ACL-списка внутри группы. Он обозначает, какие у группы полномочия. Пользователи и ресурсы, принадлежные данной группе, будут иметь полномочия, указанные в acl-списке с названием "Default". ''Заметка: Вы увидите, что эта группа - особенная, в нее входит любой пользователь и ресурс, это благодаря использованию '''шаблона (*)''' на месте, где должно быть название пользователя или ресурса.''
| |
|
| |
| Теперь прокрутите далее вниз ACL'а и вы увидите acl-список '''<acl name="Default" />'''. Заметьте, что я значительно обрезал данный список из-за его длины.
| |
|
| |
| <syntaxhighlight lang="lua"> <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>
| |
| </syntaxhighlight>
| |
| <br \>
| |
| *'''Function'''-записи регулируют скриптинговые функции MTA. Например, если ресурсу понадобилось воспользоваться restartResource, а он лишь в группе 'Everyone' (с acl-списком 'Default'), ему будет отказано в доступе к restartResource и он откажется полноценно работать.
| |
| *'''Command'''-записи регулируют использование команд, которые создаются при использовании ресурсом [[addCommandHandler]]'ов. Примером использования команды служит ввод в чате '''/createvehicle [vehicle]''' при ресурсе freeroam. Данные записи контролируют, могут ли пользователи группы, использующей данный ACL-список, использовать эту команду. ''Заметка: команды не влияют на ресурсы внутри группы. Команды связаны только с пользователями.''
| |
| **''General - самостоятельно придуманная группа записей, созданная ресурсом admin, хотя она работает по схожим принципам. Скрипт работает с ними через использование [[hasObjectPermissionTo]]''
| |
|
| |
|
| |
| Вы заметите, что некоторые группы, такие как Admin, имеют несколько узлов '''<acl name="" />'''. Образцом далее служит группа Admin:
| |
| <syntaxhighlight lang="lua">
| |
| <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.Ransom" />
| |
| </group>
| |
| </syntaxhighlight>
| |
|
| |
| Это дает все полномочия, описанные в каждом из узлов '''<acl name="" />''', по порядку списка. Так что, например, группа Admin благодаря использованию всех ACL-списков удостоверяется, что администраторам даются все полномочия. Если получается слишком много конфликтов, приоритет отдается самой нижней записи. В образце выше:
| |
|
| |
| '''1.''' '''<acl name="Default">''' устанавливает <right name="general.http" access="false" /> <br\>
| |
| '''2.''' '''<acl name="Admin">''' устанавливает <right name="general.ModifyOtherObjects" access="true" /> <br\>
| |
| '''3.''' Для всех пользователей и ресурсов в группе admin будет: <right name="general.ModifyOtherObjects" access="true" /><br\>
| |
| <br\>
| |
|
| |
| === Группы и ACL ресурсов ===
| |
| Вы заметите, что вместе с использованием MTA появляются и некоторые другие группы. Они определены ресурсами, которые идут вместе с MTA. Если ресурс хочет обозначить собственные ACL-права, не предоставляемые группами MTA по умолчанию, он может создать ACL со своими собственными названием и группой и использовать его. Я покажу это на примере AMX. AMX предназначен для эмуляции SA-MP скриптов, и ему нужен определенный набор полномочий, который, в том числе, не входит в рамки групп по умолчанию. Он покан ниже:
| |
|
| |
| <syntaxhighlight lang="lua">
| |
| <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>
| |
| </syntaxhighlight>
| |
|
| |
| ==Изменение ACL==
| |
| Есть три способа изменения ACL - как это делать зависит от вас.
| |
|
| |
| ===HTTP-интерфейс===
| |
| Вы можете воспользоваться http-интерфейсом [[RU/Resource:Webadmin|webadmin]] для изменения ACL через ваш веб-браузере. Это наиболее легкий способ. Просто удостоверьтесь, что на сервере запущен ресурс ''webadmin'' и посетите ''<nowiki>http://IPсервера:Httpпорт/</nowiki>''. Затем вам будут доступны две секции - ACLs и Groups. ACLs позволяет вам создавать ваш Access Control List - список прав. Groups позволяет вам вместе группировать скопления пользователей и назначать им ACL-список. Например, секция ACLs позволяет вам указывать, что пользователи группы с ACL-списком Admin имеет доступ к консольной команде ''start''. Затем вы можете зайти в секцию Groups и создать ''группу'' Admin, имеющую доступ к вашему ''acl-списку'' Admin. Потом вы сможете добавлять в вашу ''группу'' Admin пользователей.
| |
|
| |
| ===XML-файл===
| |
| Вы можете вручную изменять файл ACL.xml. Он обладает довольно простым синтаксисом, но может временами немного вводить в заблуждение. Если вы редактируете его, когда сервер запущен, либо потом не забудьте вызвать скриптинговую функцию [[aclReload]] ("start runcode", "run aclReload()"), чтобы новый ACL загрузился, либо перед внесением изменений остановите сервер. Это также предотвратит случайную перезапись ваших изменений сервером.
| |
|
| |
| ===Функции скриптинга===
| |
| Вы можете использовать огромное количество скриптинговых ACL-функций для его изменения "на лету". Конечно, можно (и на самом деле нужно!) ограничивать доступ к ACL-функциям через сам ACL. Заметьте, что '''ресурс admin''', идущий вместе с MTA, может использоваться для распоряжения ACL (из вкладки "resources"). Вы должны быть админом сервера для использования этого. [http://wiki.multitheftauto.com/wiki/Admin Нажмите здесь для инструкций по установке admin].
| |
|
| |
| ==Также смотрите==
| |
| {{ACL functions}}
| |
| [[Category:Понятия скриптинга]]
| |
| [[en:Access Control List]]
| |