RU/Access Control List: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
(New page: MTA includes a complete Access Control List (ACL) that allows you to secure and limit access to the server, it's functions and resources in any number of ways. The key concept of MTA's AC...)
 
No edit summary
Line 1: Line 1:
MTA includes a complete Access Control List (ACL) that allows you to secure and limit access to the server, it's functions and resources in any number of ways.
MTA включает в себя полноценный Access Control List (ACL, список контроля доступа), позволяющий вам обезопашивать и ограничивать доступ к серверу, его функциям и ресурсам любыми способами, которыми вы пожелаете.


The key concept of MTA's ACL (and ACLs in general) is that you're giving a specific object a set of rights. In MTA's case objects are one of two things - resources or users. There are numerous ''rights'' available in MTA - these mainly focus on server-side scripting functions.  
Ключевая концепция MTA'шного ACL (и ACL в целом) - то, что вы даете определенному объекту набор прав. В случае с MTA, объекты - это одно из двух: либо ресурсы, либо пользователи. В MTA доступно множество ''прав'' - они в основном сфокусированы на скриптинговых функциях серверной стороны.  


What this essentially means is that the ACL allows you to choose exactly what functions a resource or user can perform. This can obviously be invaluable - for example preventing all your server's players from being able to ban each other, or preventing your new untested resources from doing the same.  
По сути это значит, что ACL позволяет вам выбирать к использованию каких в точности функций могут иметь доступ ресурс или игрок. Очевидно, что эта возможность бесценна - например, можно не допустить возможность рядовых игроков сервера банить друг друга, или не дать вашим новым непротестированным ресурсам это делать.  


Of course, ''with great power comes great responsibility'' and it is very easily possible to completely break resources - for example, disabling [[spawnPlayer]] for all resources would be a Bad Thing. Of course, there are situations when you might want to do this - if you want to force all your resources to use a spawn manager resource for example, but even this is somewhat draconian.
Конечно, ''большая сила влечет за собой большую ответственность'', и очень легко можно сломать ресурсы полностью - например, отключение [[spawnPlayer]] для всех ресурсов будет ОЧЕНЬ плохой идеей. В то же время, есть ситуации, когда вам может захотеться это сделать - если вы хотите принудить все свои ресурсы использовать ресурс spawn manager, например, но даже это несколько драконовские меры.


==How it works==
==Понимание ACL==
There are three ways you can modify the ACL - how you do it depends who you are.
ACL состоит из двух важных компонентов: групп и ACL-списков. Они фигурируют как узлы '''<group name="">''' и '''<acl name="" />'''. Их назначение:<br \>
'''1.''' Предоставить пользователям полномочия контролировать сервер и пользоваться командами ресура. Примеры:''<br \>
*Позволить только админам использовать функцию giveweapon мода freeroam
*Позволить всем пользователям запускать ресурс
'''2.''' Предоставить ресурсам полномочия использовать функции скриптинга и функции других ресурсов. Примеры:<br \>
*Позволить ресурсу использовать функцию restartResource
*Позволить ресурсу использовать функцию call для использования экспортированных из другого скрипта функций


===HTTP Interface===
===Группы по умолчанию===
You can use the [[Resource/webadmin|webadmin]] http interface to modify the ACL in your web browser. This is by far the easiest way to do so. Just make sure the ''webadmin'' resource is started on your server and visit ''<nowiki>http://ServerIP:HttpPort/</nowiki>''. You can then use the two sections - ACLs and Groups. ACLs allows you to create your Access Control Lists - lists of rights. Groups allow you to group together collections of users and assign ACLs to them. For example, the ACLs section allows you to specify that the Admin ACL has access to the ''start'' console command. You can the go to the Groups section and create an Admin ''group'' that has access to your Admin ''acl''. You can then add users to your Admin ''group''.
MTA предоставляет некоторые группы по умолчанию, в списке они по возрастанию полномочий. Эти группы:
*'''Everyone'''
*'''Moderator'''
*'''SuperModerator'''
*'''Admin'''
*'''Console''' - Эта контролирует полномочия людей, которые используют консоль, через '''<object name="user.Console" />'''
*'''RPC''' - Remote Procedure Call (Удаленный Вызов Процедуры). Конкретно эта предоставляет доступ только к [[callRemote]] и отключает команды ресурсов по умолчанию. Для подробностей смотрите саму функцию.
<br \>


===XML file===
Для дальнейших объяснений, я воспользуюсь группой Everyone в качестве образца. По умолчанию это выглядит так:
You can modify the ACL.xml file manually. This has a fairly straightforward syntax, but it can get a bit confusing at times. If you do it while the server is running, don't forget to call the scripting function [[aclReload]] ("start runcode", "run aclReload()") so the new ACL is loaded, or otherwise stop your server before modifying. This also prevents your changes from being accidentally overwritten by the server.
<syntaxhighlight lang="lua">    <group name="Everyone">
        <acl name="Default" />
        <object name="user.*" />
        <object name="resource.*" />
    </group>
</syntaxhighlight>
<br \>
Сначала вы заметите имя ACL-списка внутри группы. Он обозначает, какие у группы полномочия. Пользователи и ресурсы, принадлежные данной группе, будут иметь полномочия, указанные в acl-списке с названием "Default". ''Заметка: Вы увидите, что эта группа - особенная, в нее входит любой пользователь и ресурс, это благодаря использованию '''шаблона (*)''' на месте, где должно быть название пользователя или ресурса.''


===Scripting functions===
Теперь прокрутите далее вниз ACL'а и вы увидите acl-список '''<acl name="Default" />'''. Заметьте, что я значительно обрезал данный список из-за его длины.
You can use a large number of ACL scripting functions to modify the ACL on the fly. Of course, you can (and really should!) limit access to the ACL functions with the ACL.


<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-интерфейсом [[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}}
{{ACL functions}}
[[Category:Scripting Concepts]]
[[Category:Scripting Concepts]]
[[en:Access Control List]]

Revision as of 12:11, 18 June 2012

MTA включает в себя полноценный Access Control List (ACL, список контроля доступа), позволяющий вам обезопашивать и ограничивать доступ к серверу, его функциям и ресурсам любыми способами, которыми вы пожелаете.

Ключевая концепция MTA'шного ACL (и ACL в целом) - то, что вы даете определенному объекту набор прав. В случае с MTA, объекты - это одно из двух: либо ресурсы, либо пользователи. В MTA доступно множество прав - они в основном сфокусированы на скриптинговых функциях серверной стороны.

По сути это значит, что ACL позволяет вам выбирать к использованию каких в точности функций могут иметь доступ ресурс или игрок. Очевидно, что эта возможность бесценна - например, можно не допустить возможность рядовых игроков сервера банить друг друга, или не дать вашим новым непротестированным ресурсам это делать.

Конечно, большая сила влечет за собой большую ответственность, и очень легко можно сломать ресурсы полностью - например, отключение spawnPlayer для всех ресурсов будет ОЧЕНЬ плохой идеей. В то же время, есть ситуации, когда вам может захотеться это сделать - если вы хотите принудить все свои ресурсы использовать ресурс spawn manager, например, но даже это несколько драконовские меры.

Понимание ACL

ACL состоит из двух важных компонентов: групп и ACL-списков. Они фигурируют как узлы <group name=""> и <acl name="" />. Их назначение:
1. Предоставить пользователям полномочия контролировать сервер и пользоваться командами ресура. Примеры:

  • Позволить только админам использовать функцию giveweapon мода freeroam
  • Позволить всем пользователям запускать ресурс

2. Предоставить ресурсам полномочия использовать функции скриптинга и функции других ресурсов. Примеры:

  • Позволить ресурсу использовать функцию restartResource
  • Позволить ресурсу использовать функцию call для использования экспортированных из другого скрипта функций

Группы по умолчанию

MTA предоставляет некоторые группы по умолчанию, в списке они по возрастанию полномочий. Эти группы:

  • Everyone
  • Moderator
  • SuperModerator
  • Admin
  • Console - Эта контролирует полномочия людей, которые используют консоль, через <object name="user.Console" />
  • RPC - Remote Procedure Call (Удаленный Вызов Процедуры). Конкретно эта предоставляет доступ только к callRemote и отключает команды ресурсов по умолчанию. Для подробностей смотрите саму функцию.


Для дальнейших объяснений, я воспользуюсь группой Everyone в качестве образца. По умолчанию это выглядит так:

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


Сначала вы заметите имя ACL-списка внутри группы. Он обозначает, какие у группы полномочия. Пользователи и ресурсы, принадлежные данной группе, будут иметь полномочия, указанные в acl-списке с названием "Default". Заметка: Вы увидите, что эта группа - особенная, в нее входит любой пользователь и ресурс, это благодаря использованию шаблона (*) на месте, где должно быть название пользователя или ресурса.

Теперь прокрутите далее вниз ACL'а и вы увидите acl-список <acl name="Default" />. Заметьте, что я значительно обрезал данный список из-за его длины.

    <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>


  • Function-записи регулируют скриптинговые функции MTA. Например, если ресурсу понадобилось воспользоваться restartResource, а он лишь в группе 'Everyone' (с acl-списком 'Default'), ему будет отказано в доступе к restartResource и он откажется полноценно работать.
  • Command-записи регулируют использование команд, которые создаются при использовании ресурсом addCommandHandler'ов. Примером использования команды служит ввод в чате /createvehicle [vehicle] при ресурсе freeroam. Данные записи контролируют, могут ли пользователи группы, использующей данный ACL-список, использовать эту команду. Заметка: команды не влияют на ресурсы внутри группы. Команды связаны только с пользователями.
    • General - самостоятельно придуманная группа записей, созданная ресурсом admin, хотя она работает по схожим принципам. Скрипт работает с ними через использование hasObjectPermissionTo


Вы заметите, что некоторые группы, такие как Admin, имеют несколько узлов <acl name="" />. Образцом далее служит группа 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.Ransom" />
    </group>

Это дает все полномочия, описанные в каждом из узлов <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 скриптов, и ему нужен определенный набор полномочий, который, в том числе, не входит в рамки групп по умолчанию. Он покан ниже:

    <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>

Изменение ACL

Есть три способа изменения ACL - как это делать зависит от вас.

HTTP-интерфейс

Вы можете воспользоваться http-интерфейсом webadmin для изменения ACL через ваш веб-браузере. Это наиболее легкий способ. Просто удостоверьтесь, что на сервере запущен ресурс webadmin и посетите http://IPсервера:Httpпорт/. Затем вам будут доступны две секции - 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"). Вы должны быть админом сервера для использования этого. Нажмите здесь для инструкций по установке admin.

Также смотрите