Lista de Controle de Acesso
O MTA inclui uma lista de controle total de acesso (ACL, Access Control List ou Lista de Controle de Acesso), que permite proteger e limitar o acesso ao servidor, suas funções e recursos de qualquer forma que você quiser.
Um conceito chave da ACL MTA (a ACLs em geral) é que você dá a um determinado objeto especifico de um conjunto de direitos. No caso do MTA, os objetos são uma das duas coisas : recursos ou usuários. Existem inúmeros direitos disponíveis no MTA, eles estão principalmente concentradas sobre as funções do lado do servidor ou server-side scripting.
O que significa, que a ACL permite que você escolha exatamente o que funciona, ou oque um recurso ou usuário pode executar. Obviamente este recurso é essencial, por exemplo, prevenção dos jogadores do seu servidor ser capaz de banir outros jogadores, ou impedir que os novos recursos não testados façam o mesmo.
É claro, com grande poder vem grandes responsabilidades e é muito facilmente possível romper completamente os recursos, por exemplo, a desativação spawnPlayer para todos os recursos seria uma coisa ruim. Há situações em que você pode querer fazer isso - se você quiser forçar todos os seus recursos para usar o gerenciador de desova de recursos, por exemplo, mas é medidas ainda mais rígidas.
Entendendo a ACL
Há em dois componentes principais ACL : os grupos e ACL-listas. Eles aparecem como nós <group name=""> nós e <acl name="" />. Sua finalidade:
1. Conceder permissão para usuários para controlar o servidor e usar comandos de recursos. Exemplos:
- Permitindo que os administradores usem apenas a função giveweapon do freeroam.
- Permitindo que todos os usuários para iniciem recursos.
2. Conceder permissão de recursos para usar funções de script e funções de outros recursos. Exemplos:
- Permitem utilizar o recurso restartResource.
- Permitir a utilização de recursos de chamada para as funções exportadas de outro script.
Grupos Padrões
MTA tem fornecido alguns grupos padrôes com permissões crescentes. Estes grupos são os seguintes:
- Everyone
- Moderator
- SuperModerator
- Admin
- Console - Esta controla as permissões de pessoas que estão usando o console através <object name="user.Console" />
- RPC - Remote Procedure Call. Especificamente concede acesso a callRemote só desativa comandos de recursos padrões. Verifique a função para obter detalhes.
Para explicar melhor, vou usar o grupo Everyone como exemplo. Por padrão, ele se parece com isso:
<group name="Everyone"> <acl name="Default" /> <object name="user.*" /> <object name="resource.*" /> </group>
Você primeiro identificar o nome acl dentro do grupo. Ele define os poderes do grupo. Usuários e recursos de um determinado grupo tem os poderes estabelecidos na ACL-lista com o nome de "Default". Nota: Você vai notar que esse grupo é especial, na medida em que inclui todos os usuários e de recursos por meio de um asterisco (*) , onde o node do usuário ou recurso ficaria.
Agora, role para baixo a ACL e você verá a listagem <acl name="Default" />.Note que eu reduziram drasticamente esta lista devido à sua extensão.
<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>
- Funções das entradas são funções MTA script. Por exemplo, se um recurso necessário para usar restartResource e ele estava no grupo 'Everyne' (com a lista 'Default') seria negado o acesso a restartResource e não funcionar corretamente.
- Comandos são criados quando um recurso usa addCommandHandler. Um exemplo seria digitar /createvehicle [veículo] no chatbox para o recurso freeroam. Isto controla se os usuários do grupo ACL podem usar o comando.Os comandos não têm nenhum efeito sobre os recursos do grupo. Os comandos são apenas relacionada com os usuários.
- Geral, é um grupo de nome personalizado direito criado pelo recurso administrativo, mas ele funciona com os mesmos princípios. O script trabalha com eles atraves do hasObjectPermissionTo.
Você vai notar que alguns grupos, tais como admin, tem vários nós <acl name="" />. Um exemplo é o grupo 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>
Isso irá dar todas as permissões definidas em cada nó <acl name="" /> na ordem de apresentação. Assim, por exemplo, usando o grupo de administração, certifique-se de que os administradores têm autoridade total. Se houver conflito, é dada prioridade ao mais baixo. No exemplo acima
1. <acl name="Default"> define <right name="general.ModifyOtherObjects" access="false" />
2. <acl name="Admin"> define <right name="general.ModifyOtherObjects" access="true" />
3. Para todos os usuários e recursos do grupo será admin: <right name="general.ModifyOtherObjects" access="true"/>
Grupos e Recursos ACL
Você vai notar que há alguns outros grupos que vieram com MTA. Eles são identificados como recursos que vêm com a MTA. Se um recurso quer para designar direitos específicos ACL não previstas pelos grupos MTA padrão, ele pode criar a sua própria ACL nome e um grupo usá-lo. Mostraremos a entrada da AMX como um exemplo. AMX foi projetado para emular SA-MP scripts e ele precisa de um certo conjunto de permissões que não se enquadram bem nos grupos padrôes. É mostrado a seguir:
<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... </angcl>
Modificando a ACL
Há três maneiras de alterar a ACL, como você irá fazer isso depende de quem você é.
HTTP Interface
Você pode usar o webadmin http interface para modificar a ACL no seu navegador. Esta é a maneira mais fácil de modificar-lo. Apenas certifique-se de que o servidor está executando recursos webadmin e visite http://ServerIP:HttpPort/. Em seguida, você pode acessar as duas seções - ACLs e Grupos. ACLs permite que você crie suas listas de controle de acesso - listas de direitos. Grupos permitem agrupar grupos de usuários e atribuir-lhes a lista ACL. Por exemplo, a seção de ACLs permite que você especifique que a ACL Admin tem acesso ao início de comando do console. Então você pode ir para a seção de Grupos e criar um grupo de administração, tendo acesso à sua lista ACL Admin.
Arquivo XML
Você pode modificar o arquivo ACL.xml manualmente. Isto tem uma sintaxe bastante simples, mas pode ficar um pouco confuso às vezes. Se você editá-lo quando o servidor estiver em execução, não se esqueça de chamar a função de script aclReload ("start runcode", "run aclReload()"), para a nova ACL carregar as alterações. Isto também irá evitar a substituições acidentais no servidor.