RU/Access Control List: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
mNo edit summary
(Blanked the page)
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]]

Revision as of 16:16, 31 March 2016