Como configurar admins e permissões ACL no MTA:SA

Guia técnico pra configurar admins e permissões ACL no MTA:SA — editar acl.xml, criar grupos, atribuir contas e blindar o servidor contra escalada de privilégio.

O sistema de permissões do MTA:SA é controlado por um arquivo XML chamado acl.xml que define grupos, contas e direitos granulares por resource. Configurar admins corretamente é o que separa um servidor que aceita moderação organizada de um que vira terra-de-ninguém — ou pior, fica vulnerável a escalada de privilégio porque alguém recebeu general.ModifyOtherObjects sem perceber o que isso permite.

Este tutorial cobre o ciclo completo: criar contas no banco interno do MTA, definir grupos de admin e moderador com escopos distintos, mapear permissões no acl.xml sem expor o resource admin pra usuários comuns, e validar tudo in-game antes de liberar pra equipe. Tempo estimado: 20-30 minutos.

A persona-alvo é um owner de servidor MTA:SA que já tem o mtaserver rodando e precisa configurar a equipe de moderação pela primeira vez. Os comandos assumem servidor em Linux (Ubuntu 24.04 LTS), mas o conteúdo do acl.xml é idêntico em Windows.

Pré-requisitos

O que você precisa antes de começar

Servidor MTA:SA já instalado e rodando, acesso ao diretório de configuração do servidor (mods/deathmatch/), shell de console ativa (terminal do mtaserver ou cliente in-game com login admin) e o resource admin instalado e iniciado.

Confira que você tem acesso a tudo isso antes de prosseguir:

Arquivo ACL mods/deathmatch/acl.xml
Arquivo de contas mods/deathmatch/internal.db
Resource obrigatório admin
Acesso ao console stdin do mtaserver

O acl.xml é editado quando o servidor está parado. Pra mudanças em runtime, use os comandos aclgroup, aclrights e aclrequest no console — eles persistem corretamente sem disputa com o autosave do MTA.

Entender a estrutura do acl.xml

O acl.xml tem três blocos principais: <group> (associa objetos a ACLs), <acl> (define permissões granulares) e os objetos referenciados (usuários, resources). A relação é: um grupo contém objetos e ACLs; objetos são quem ganha as permissões; ACLs são os pacotes de permissão.

Um servidor MTA fresh tem este layout default no acl.xml:

<acl>
    <group name="Admin">
        <object name="user.admin"/>
        <object name="resource.admin"/>
        <acl name="Admin"/>
        <acl name="Moderator"/>
        <acl name="RPC"/>
    </group>
    <group name="Moderator">
        <acl name="Moderator"/>
        <acl name="RPC"/>
    </group>
    <group name="Everyone">
        <object name="user.*"/>
        <object name="resource.*"/>
        <acl name="Default"/>
    </group>
</acl>

Note que Everyone inclui user.* e resource.* com o ACL Default — esse é o piso de permissão pra qualquer login. O grupo Admin adiciona ACLs específicos por cima, herdando o que Everyone já dá.

Criar a conta de admin

01

Conecte no console do servidor. Se você usa systemd, acesse via socket:

sudo systemctl status mtasa

Pra enviar comandos, você precisa do console anexado. Em servidores rodando via screen ou tmux, reanexe à sessão:

screen -r mtaserver

Se você usa systemd com stdin redirecionado, o método varia por setup — o mais comum é logar no servidor in-game como qualquer player, autenticar uma vez com a conta default admin e usar os comandos via chat com /.

02

Crie a conta nova com senha forte (mínimo 12 caracteres, mistura de letras, números e símbolos):

addaccount nomedoadmin SenhaForteAqui123!

O retorno Account 'nomedoadmin' created successfully confirma que a credencial foi gravada em internal.db. A senha é salva com hash SHA-256 — não dá pra recuperar, só resetar.

Senha default é o vetor número 1

A conta admin com senha admin que vem por default é o vetor de invasão mais explorado em servidores MTA:SA novos. Troque a senha imediatamente ou delete a conta padrão depois de criar a sua: delaccount admin.

03

Adicione a conta ao grupo Admin via console:

aclgroup add Admin user.nomedoadmin

O comando edita o acl.xml em runtime sem precisar reiniciar. Confirme com:

aclgroup list

Você deve ver nomedoadmin listada dentro do grupo Admin.

Criar grupos customizados com permissões granulares

O default só traz Admin e Moderator. Pra equipes maiores você quer separação fina — staff iniciante (suporte) não devia ter ban, líder de evento precisa de setSkin e giveMoney mas não setMoney infinito, e assim por diante.

04

Pare o servidor pra editar acl.xml com segurança:

sudo systemctl stop mtasa

Abra o arquivo no editor:

sudo nano /opt/mtasa/mods/deathmatch/acl.xml
05

Adicione um grupo Support com escopo restrito. Insira antes do </acl> final do arquivo:

<group name="Support">
    <object name="user.suporte1"/>
    <acl name="Support"/>
    <acl name="RPC"/>
</group>

Em seguida, defina o ACL Support com os direitos mínimos. Procure pelo bloco <acl name="Moderator"> e adicione um novo logo depois:

<acl name="Support">
    <right name="command.kick" access="true"/>
    <right name="command.mute" access="true"/>
    <right name="command.unmute" access="true"/>
    <right name="command.warn" access="true"/>
    <right name="resource.admin" access="true"/>
    <right name="general.ModifyOtherObjects" access="false"/>
</acl>

A diretiva general.ModifyOtherObjects="false" é crítica — sem ela, qualquer cargo com acesso ao painel admin pode promover/remover outros usuários, inclusive escalar pra Admin.

ModifyOtherObjects é a chave do reino

general.ModifyOtherObjects permite a um usuário editar permissões de outros usuários via painel admin. Conceda APENAS ao grupo Admin de mais alta confiança. Suporte, moderadores e eventos NUNCA devem ter esse direito — caso contrário, qualquer um deles pode se auto-promover pra Admin.

06

Salve o arquivo (Ctrl+O, Enter, Ctrl+X no nano) e suba o servidor:

sudo systemctl start mtasa

Verifique no log que o acl.xml carregou sem erro de parsing:

sudo journalctl -u mtasa -n 50 --no-pager

Procure por linhas como ACL loaded successfully ou ausência de ACL parse error.

Atribuir contas aos grupos certos

Com os grupos definidos, falta povoá-los. Crie as contas dos demais membros e jogue cada um no grupo apropriado.

07

No console (ou in-game com /), crie cada conta nova:

addaccount moderador1 SenhaForte001!
addaccount moderador2 SenhaForte002!
addaccount suporte1 SenhaForte003!
08

Atribua cada conta ao grupo correspondente:

aclgroup add Moderator user.moderador1
aclgroup add Moderator user.moderador2
aclgroup add Support user.suporte1

Cada comando edita acl.xml em runtime e persiste. Confirme com aclgroup list — você deve ver as contas distribuídas nos grupos corretos.

Use senhas diferentes por conta

Não reutilize senha entre contas de staff. Se uma conta vaza (phishing, reuso em fórum, leak de banco), todas as outras ficam comprometidas. Considere ferramenta como Bitwarden ou KeePassXC pra equipe gerenciar credenciais.

Verificar permissões in-game

A configuração só vale se o comportamento real bate com o desenho.

09

Conecte no servidor com cada conta de teste e autentique:

/login moderador1 SenhaForte001!

Você deve receber a mensagem You successfully logged in as moderador1 no chat. Abra o painel admin com /admin ou tecla P — o painel deve aparecer com apenas as abas e botões que o ACL do grupo permite.

10

Teste cada permissão concedida e cada permissão NEGADA. Pra Support, por exemplo:

  • Tente kick outro player → deve funcionar
  • Tente ban outro player → deve falhar com Access denied
  • Tente abrir aba de gerenciamento de admins → deve estar ausente ou bloqueada

Se algo permitir o que não deveria, revise o ACL no acl.xml — provavelmente um <right> extra escapou ou um grupo herda mais que devia.

Resolução de problemas

Login funciona mas não tenho permissão de admin

A conta foi criada mas não está em nenhum grupo com poder. Adicione com aclgroup add Admin user.suaconta no console e teste de novo.

Painel admin abre mas botões estão cinzas

O resource admin está acessível mas o ACL do seu grupo não tem general.ModifyOtherObjects nem direitos suficientes em command.*. Verifique no acl.xml que o seu grupo de admin tem os ACLs Admin e Moderator listados.

Erro ACL parse error no log

O acl.xml tem XML inválido — tag mal fechada, atributo sem aspas, caractere reservado solto. Use um validador XML antes de subir o servidor. O comando xmllint --noout /opt/mtasa/mods/deathmatch/acl.xml (instale com sudo apt install libxml2-utils) aponta a linha exata do problema.

Mudanças no acl.xml somem depois de reiniciar

Você editou o arquivo com o servidor rodando. O MTA reescreve acl.xml periodicamente e sobrescreve mudanças manuais. Sempre pare o servidor antes de editar à mão, ou use os comandos aclgroup/aclrights no console que persistem corretamente.

Próximos passos

Com a ACL configurada, vale endurecer outras camadas: ativar <password> no mtaserver.conf pra ninguém entrar sem autorização, configurar acl.xml com <right name="resource.runcode" access="false"/> no grupo Everyone (resource runcode permite execução remota de Lua e é vetor crítico se exposto), e investir em log de moderação via um resource customizado que registra todas as ações de staff.

Se você está rodando isso em escala — comunidade ativa com vários moderadores simultâneos — uma VPS Hostini com IP brasileiro e proteção contra ataques volumétricos garante que sua infraestrutura aguenta evento RP cheio sem oscilar. Conheça os planos em /jogos.

Perguntas frequentes

Qual a diferença entre ACL e Admin no MTA:SA?

ACL (Access Control List) é o sistema que define quem pode fazer o quê — grupos, objetos e permissões granulares por resource. Admin é o resource oficial (`admin`) que provê interface in-game pra moderar jogadores. ACL é a camada de autorização; admin é apenas um dos resources que consome essa camada.

Posso ter vários níveis de admin com permissões diferentes?

Sim. Crie grupos separados em `acl.xml` (ex: `Admin`, `Moderator`, `Support`) e atribua ACLs distintos a cada grupo. Cada ACL tem seu próprio conjunto de `<right>` permitindo ou negando ações. Um moderador, por exemplo, pode receber `kick` e `mute` mas não `ban` ou `setMoney`.

Por que minha conta criada via `addaccount` não recebe permissão de admin automaticamente?

Criar conta só registra credenciais. Você precisa adicionar a conta ao grupo correspondente via `aclgroup add Admin user.nomedaconta` no console, ou editar manualmente `<object name="user.nomedaconta">` dentro do grupo no `acl.xml`. Sem isso, o login funciona mas a conta não herda nenhum permissionamento.

É seguro editar `acl.xml` com o servidor rodando?

Edição direta no arquivo durante runtime não é recomendada — o MTA reescreve `acl.xml` periodicamente e pode sobrescrever suas mudanças. Pare o servidor antes de editar manualmente, ou use os comandos `aclrequest`, `aclgroup` e `aclrights` no console pra alterações em runtime, que persistem corretamente.

Como bloqueio o resource `admin` de jogadores comuns?

No grupo `Everyone` (que cobre todo usuário não-autenticado), garanta que não há `<right name="resource.admin" access="true"/>`. O default já bloqueia, mas vale auditar. Apenas grupos explícitos como `Admin` devem ter `<right name="resource.admin" access="true"/>`.

O que fazer se eu me trancar fora do admin por erro no `acl.xml`?

Pare o servidor (`Ctrl+C` ou `systemctl stop mtasa`), edite `acl.xml` manualmente restaurando o grupo `Admin` com `<right name="general.ModifyOtherObjects" access="true"/>` e adicione sua conta como object. Suba o servidor de novo e revalide com `/login` in-game.

Tópicos:
mta
Próximos passos VPS, dedicado ou painel gerenciado para FiveM, SAMP, MTA, Tibia e mais.Hospede seu servidor de jogos com a Hostini →
Esse tutorial foi útil?
Falar no WhatsApp