runv-server

server tooling for runv.club
Log | Files | Refs | README

admin.md (12303B)


      1 # Guia do Administrador
      2 
      3 Manual prático para operações administrativas do `runv-server` no servidor Debian do `runv.club`.
      4 
      5 Use este documento como folha de referência rápida. Quando houver dúvida sobre comportamento detalhado, a fonte de verdade continua sendo o código dos scripts em `scripts/`, `tools/`, `site/`, `terminal/`, `patches/` e a árvore `docs/`.
      6 
      7 ## Convenções
      8 
      9 Assuma:
     10 
     11 ```bash
     12 cd /caminho/para/runv-server
     13 ```
     14 
     15 Nos exemplos abaixo, substitua:
     16 
     17 - `REPO` pelo caminho real do clone
     18 - `USER` pelo username Unix do membro
     19 - `EMAIL` pelo email do membro
     20 - `PUBKEY.pub` pelo arquivo `.pub` aprovado
     21 
     22 ## Pré-requisitos
     23 
     24 - Executar como `root` ou com `sudo`
     25 - Servidor Debian com Python 3
     26 - Quotas ext4 prontas se for usar quota automática
     27 - Apache / DocumentRoot configurados se quiser refresh público automático
     28 - Operador autorizado: por padrão, `pmurad-admin` (ou a lista em `RUNV_ADMIN_USERS`)
     29 
     30 ## Bootstrap inicial do servidor
     31 
     32 Bootstrap conservador do host:
     33 
     34 ```bash
     35 sudo python3 REPO/scripts/admin/starthere.py --verbose
     36 ```
     37 
     38 Simular sem alterar:
     39 
     40 ```bash
     41 sudo python3 REPO/scripts/admin/starthere.py --dry-run --verbose
     42 ```
     43 
     44 ## Ferramentas globais, MOTD, skel e IRC
     45 
     46 Aplicar ferramentas globais, `MOTD`, `skel`, drop-in SSH jailed e patch IRC:
     47 
     48 ```bash
     49 sudo python3 REPO/tools/tools.py
     50 ```
     51 
     52 Esse comando também:
     53 
     54 - garante `pmurad-admin` com sudo administrativo via `/etc/sudoers.d/90-runv-pmurad-admin`
     55 - remove `pmurad-admin` do grupo `runv-jailed`
     56 - não altera membros já existentes por omissão
     57 
     58 Simular:
     59 
     60 ```bash
     61 sudo python3 REPO/tools/tools.py --dry-run --verbose
     62 ```
     63 
     64 Reaplicar só arquivos e patch IRC, sem APT:
     65 
     66 ```bash
     67 sudo python3 REPO/tools/tools.py --skip-apt
     68 ```
     69 
     70 Reaplicar sem APT:
     71 
     72 ```bash
     73 sudo python3 REPO/tools/tools.py --skip-apt
     74 ```
     75 
     76 Se quiser reconciliar membros já existentes de uma vez (jail SSH + patch IRC):
     77 
     78 ```bash
     79 sudo python3 REPO/tools/tools.py --reconcile-existing-users
     80 ```
     81 
     82 ## Setup do onboarding via SSH (`entre`)
     83 
     84 Instalar/configurar o usuário `entre` e o fluxo de pedido:
     85 
     86 ```bash
     87 sudo python3 REPO/terminal/setup_entre.py --help
     88 ```
     89 
     90 Exemplo de execução:
     91 
     92 ```bash
     93 sudo python3 REPO/terminal/setup_entre.py
     94 ```
     95 
     96 ## Fila de pedidos
     97 
     98 Fila padrão:
     99 
    100 - `/var/lib/runv/entre-queue/`
    101 
    102 Listar pedidos:
    103 
    104 ```bash
    105 sudo ls -lah /var/lib/runv/entre-queue
    106 ```
    107 
    108 Inspecionar um pedido JSON:
    109 
    110 ```bash
    111 sudo cat /var/lib/runv/entre-queue/ID_DO_PEDIDO.json
    112 ```
    113 
    114 Ou com formatação:
    115 
    116 ```bash
    117 sudo jq . /var/lib/runv/entre-queue/ID_DO_PEDIDO.json
    118 ```
    119 
    120 Log do onboarding:
    121 
    122 ```bash
    123 sudo tail -n 200 /var/log/runv/entre.log
    124 ```
    125 
    126 ## Criar usuário novo
    127 
    128 Fluxo canônico de provisionamento:
    129 
    130 ```bash
    131 sudo python3 REPO/scripts/admin/create_runv_user.py \
    132   --username USER \
    133   --email EMAIL \
    134   --public-key-file PUBKEY.pub
    135 ```
    136 
    137 Simular:
    138 
    139 ```bash
    140 sudo python3 REPO/scripts/admin/create_runv_user.py \
    141   --username USER \
    142   --email EMAIL \
    143   --public-key-file PUBKEY.pub \
    144   --dry-run --verbose
    145 ```
    146 
    147 Exigir quota pronta antes de criar:
    148 
    149 ```bash
    150 sudo python3 REPO/scripts/admin/create_runv_user.py \
    151   --username USER \
    152   --email EMAIL \
    153   --public-key-file PUBKEY.pub \
    154   --require-quota
    155 ```
    156 
    157 Criar sem quota:
    158 
    159 ```bash
    160 sudo python3 REPO/scripts/admin/create_runv_user.py \
    161   --username USER \
    162   --email EMAIL \
    163   --public-key-file PUBKEY.pub \
    164   --no-quota
    165 ```
    166 
    167 Criar sem jail:
    168 
    169 ```bash
    170 sudo python3 REPO/scripts/admin/create_runv_user.py \
    171   --username USER \
    172   --email EMAIL \
    173   --public-key-file PUBKEY.pub \
    174   --no-jail
    175 ```
    176 
    177 Criar com valores de quota explícitos:
    178 
    179 ```bash
    180 sudo python3 REPO/scripts/admin/create_runv_user.py \
    181   --username USER \
    182   --email EMAIL \
    183   --public-key-file PUBKEY.pub \
    184   --quota-soft-mb 450 \
    185   --quota-hard-mb 500 \
    186   --quota-inode-soft 10000 \
    187   --quota-inode-hard 12000
    188 ```
    189 
    190 Modo interativo:
    191 
    192 ```bash
    193 sudo python3 REPO/scripts/admin/create_runv_user.py --interactive
    194 ```
    195 
    196 Aprovar direto da fila pelo `request_id`:
    197 
    198 ```bash
    199 sudo python3 REPO/scripts/admin/create_runv_user.py --request-id ID_DO_PEDIDO
    200 ```
    201 
    202 Processar toda a fila pendente de uma vez:
    203 
    204 ```bash
    205 sudo python3 REPO/scripts/admin/create_runv_user.py --all-pending
    206 ```
    207 
    208 ## Atualizar usuário existente
    209 
    210 Abrir menu interativo:
    211 
    212 ```bash
    213 sudo python3 REPO/scripts/admin/update_user.py --interactive --username USER
    214 ```
    215 
    216 Atualizar email:
    217 
    218 ```bash
    219 sudo python3 REPO/scripts/admin/update_user.py --username USER --email EMAIL
    220 ```
    221 
    222 Substituir chave pública:
    223 
    224 ```bash
    225 sudo python3 REPO/scripts/admin/update_user.py \
    226   --username USER \
    227   --ssh-replace-file PUBKEY.pub
    228 ```
    229 
    230 Acrescentar chave pública:
    231 
    232 ```bash
    233 sudo python3 REPO/scripts/admin/update_user.py \
    234   --username USER \
    235   --ssh-append-file PUBKEY.pub
    236 ```
    237 
    238 Definir nova senha de login:
    239 
    240 ```bash
    241 sudo python3 REPO/scripts/admin/update_user.py --username USER --set-password
    242 ```
    243 
    244 Alterar quota:
    245 
    246 ```bash
    247 sudo python3 REPO/scripts/admin/update_user.py \
    248   --username USER \
    249   --quota-soft-mb 450 \
    250   --quota-hard-mb 500 \
    251   --quota-inode-soft 10000 \
    252   --quota-inode-hard 12000
    253 ```
    254 
    255 Simular:
    256 
    257 ```bash
    258 sudo python3 REPO/scripts/admin/update_user.py \
    259   --username USER \
    260   --email EMAIL \
    261   --dry-run
    262 ```
    263 
    264 ## Remover usuário / banimento técnico
    265 
    266 Remover conta e home:
    267 
    268 ```bash
    269 sudo python3 REPO/scripts/admin/del-user.py --username USER
    270 ```
    271 
    272 Execução não interativa:
    273 
    274 ```bash
    275 sudo python3 REPO/scripts/admin/del-user.py --username USER -y
    276 ```
    277 
    278 Simular:
    279 
    280 ```bash
    281 sudo python3 REPO/scripts/admin/del-user.py --username USER --dry-run
    282 ```
    283 
    284 Observações:
    285 
    286 - o script desmonta jail/binds antes de remover
    287 - atualiza `users.json`
    288 - pode sincronizar a landing pública após a remoção
    289 
    290 ## Remoção em massa
    291 
    292 Ferramenta perigosa, só com backup:
    293 
    294 ```bash
    295 sudo python3 REPO/scripts/doom/doom.py --help
    296 ```
    297 
    298 Simular:
    299 
    300 ```bash
    301 sudo python3 REPO/scripts/doom/doom.py --dry-run
    302 ```
    303 
    304 ## Reparar Gopher e Gemini
    305 
    306 Reconfigurar infraestrutura de Gopher e Gemini:
    307 
    308 ```bash
    309 sudo python3 REPO/scripts/admin/setup_alt_protocols.py
    310 ```
    311 
    312 Simular:
    313 
    314 ```bash
    315 sudo python3 REPO/scripts/admin/setup_alt_protocols.py --dry-run --verbose
    316 ```
    317 
    318 Sem instalar pacotes:
    319 
    320 ```bash
    321 sudo python3 REPO/scripts/admin/setup_alt_protocols.py --skip-install
    322 ```
    323 
    324 Sem backfill de usuários:
    325 
    326 ```bash
    327 sudo python3 REPO/scripts/admin/setup_alt_protocols.py --skip-backfill
    328 ```
    329 
    330 ## Site público e landing
    331 
    332 Primeira montagem completa da landing / Apache:
    333 
    334 ```bash
    335 sudo python3 REPO/site/genlanding.py
    336 ```
    337 
    338 Somente sincronizar `site/public` + `members.json` para o DocumentRoot:
    339 
    340 ```bash
    341 sudo python3 REPO/site/genlanding.py --sync-public-only \
    342   --document-root /var/www/runv.club/html \
    343   --members-users-json /var/lib/runv/users.json
    344 ```
    345 
    346 Atualizar só `members.json`:
    347 
    348 ```bash
    349 sudo python3 REPO/site/build_directory.py \
    350   --users-json /var/lib/runv/users.json \
    351   -o /var/www/runv.club/html/data/members.json
    352 ```
    353 
    354 ## Notícias
    355 
    356 Publicar notícias novas:
    357 
    358 ```bash
    359 sudo python3 REPO/site/news/publish_news.py
    360 ```
    361 
    362 Simular:
    363 
    364 ```bash
    365 sudo python3 REPO/site/news/publish_news.py --dry-run
    366 ```
    367 
    368 Publicar sem sincronizar Apache:
    369 
    370 ```bash
    371 sudo python3 REPO/site/news/publish_news.py --skip-genlanding
    372 ```
    373 
    374 ## Wiki
    375 
    376 Gerar a wiki estática localmente a partir de `site/wiki/*.txt`:
    377 
    378 ```bash
    379 python3 REPO/site/wiki/build_wiki.py
    380 ```
    381 
    382 Depois, sincronizar a landing:
    383 
    384 ```bash
    385 sudo python3 REPO/site/genlanding.py --sync-public-only \
    386   --document-root /var/www/runv.club/html \
    387   --members-users-json /var/lib/runv/users.json
    388 ```
    389 
    390 ## Email
    391 
    392 Configurar Mailgun:
    393 
    394 ```bash
    395 sudo python3 REPO/email/configure_mailgun.py --help
    396 ```
    397 
    398 Configurar msmtp:
    399 
    400 ```bash
    401 sudo python3 REPO/email/configure_msmtp.py --help
    402 ```
    403 
    404 Modo legado SMTP/msmtp:
    405 
    406 ```bash
    407 sudo python3 REPO/email/configure_msmtp_legacy.py --help
    408 ```
    409 
    410 Diagnóstico:
    411 
    412 ```bash
    413 sudo sh REPO/email/scripts/diagnose_msmtp.sh
    414 ```
    415 
    416 Teste de envio:
    417 
    418 ```bash
    419 sudo sh REPO/email/scripts/send_test_mail.sh
    420 ```
    421 
    422 ## IRC da casa
    423 
    424 Aplicar/reaplicar a configuração IRC em todos os usuários:
    425 
    426 ```bash
    427 sudo python3 REPO/patches/patch_irc.py --all-users --force
    428 ```
    429 
    430 Aplicar a um único usuário:
    431 
    432 ```bash
    433 sudo python3 REPO/patches/patch_irc.py --user USER --force
    434 ```
    435 
    436 Simular:
    437 
    438 ```bash
    439 sudo python3 REPO/patches/patch_irc.py --all-users --force --dry-run --verbose
    440 ```
    441 
    442 Padrão atual:
    443 
    444 - servidor `irc.tilde.chat`
    445 - porta `6697`
    446 - TLS ligado
    447 - canal `#runv`
    448 - comando de uso do membro: `chat`
    449 - ao correr `chat`, o membro entra automaticamente no `#runv`
    450 - a lista lateral de nicks do WeeChat fica visível quando o terminal tiver espaço utilizável
    451 
    452 ## Moderação da comunidade e square
    453 
    454 ### Política
    455 
    456 A política editorial e disciplinar está em:
    457 
    458 - [site/wiki/05_punicoes-e-moderacao.txt](/Z:/Códigos/runv-server/site/wiki/05_punicoes-e-moderacao.txt)
    459 - [site/wiki/04_regras-da-comunidade.txt](/Z:/Códigos/runv-server/site/wiki/04_regras-da-comunidade.txt)
    460 
    461 ### O que este repositório faz
    462 
    463 Este repositório fornece os comandos para:
    464 
    465 - criar conta
    466 - atualizar conta
    467 - remover conta
    468 - regenerar presença pública
    469 - aplicar infraestrutura e serviços
    470 
    471 ### O que este repositório não fornece
    472 
    473 Este snapshot **não inclui** um CLI canônico próprio para moderar a `square` em nível de posts, salas, threads, silenciamento, suspensão comunitária ou revisão de conteúdo dentro da aplicação social.
    474 
    475 Então, para `square`, a orientação operacional é:
    476 
    477 - aplicar a moderação pelos controles nativos da própria plataforma `square` que vocês já operam
    478 - registrar internamente a medida tomada
    479 - se a medida envolver perda de acesso ao servidor, complementar com `del-user.py` ou `update_user.py`, conforme o caso
    480 
    481 Exemplos de fluxo:
    482 
    483 1. Advertência ou limitação comunitária na `square`: usar a ferramenta da própria `square`; não há comando neste repo.
    484 2. Suspensão temporária na `square` sem remover conta Unix: executar na `square`; se necessário, ajustar quota, senha ou chaves com `update_user.py`.
    485 3. Banimento permanente com encerramento de conta no servidor: moderar na `square` e depois executar `del-user.py`.
    486 
    487 ## Comandos de inspeção úteis
    488 
    489 Ver quotas:
    490 
    491 ```bash
    492 quota -vs USER
    493 sudo repquota -s /home
    494 ```
    495 
    496 Ver mounts:
    497 
    498 ```bash
    499 mount | grep usrquota
    500 findmnt /home
    501 ```
    502 
    503 Ver Apache:
    504 
    505 ```bash
    506 sudo apache2ctl configtest
    507 sudo systemctl status apache2
    508 ```
    509 
    510 Ver SSH:
    511 
    512 ```bash
    513 sudo sshd -t
    514 sudo systemctl status ssh
    515 ```
    516 
    517 Ver usuários com sessão:
    518 
    519 ```bash
    520 who
    521 last
    522 ```
    523 
    524 Ver logs do onboarding:
    525 
    526 ```bash
    527 sudo tail -n 200 /var/log/runv/entre.log
    528 ```
    529 
    530 ## Fluxos rápidos
    531 
    532 ### Aprovar pedido e criar conta
    533 
    534 ```bash
    535 sudo jq . /var/lib/runv/entre-queue/ID_DO_PEDIDO.json
    536 sudo python3 REPO/scripts/admin/create_runv_user.py \
    537   --username USER \
    538   --email EMAIL \
    539   --public-key-file PUBKEY.pub
    540 ```
    541 
    542 ### Corrigir perfil público
    543 
    544 ```bash
    545 sudo python3 REPO/site/genlanding.py --sync-public-only \
    546   --document-root /var/www/runv.club/html \
    547   --members-users-json /var/lib/runv/users.json
    548 ```
    549 
    550 ### Reparar artefatos ausentes de um membro
    551 
    552 Se uma home ficou incompleta após um provisionamento interrompido ou após a remoção de jail, use o reparador conservador. Ele cria apenas artefatos ausentes e corrige dono/modo esperados; não sobrescreve páginas existentes.
    553 
    554 ```bash
    555 sudo python3 REPO/scripts/admin/repair_user.py --user USER --dry-run --verbose
    556 sudo python3 REPO/scripts/admin/repair_user.py --user USER
    557 ```
    558 
    559 Para varrer todos os candidatos em `users.json` e `/home`:
    560 
    561 ```bash
    562 sudo python3 REPO/scripts/admin/repair_user.py --all-users --dry-run --verbose
    563 sudo python3 REPO/scripts/admin/repair_user.py --all-users
    564 ```
    565 
    566 Procedimento completo: [docs/16-repair-users.md](16-repair-users.md).
    567 
    568 ### Corrigir IRC de todos os usuários
    569 
    570 ```bash
    571 sudo python3 REPO/patches/patch_irc.py --all-users --force
    572 ```
    573 
    574 ### Banir tecnicamente uma conta
    575 
    576 ```bash
    577 sudo python3 REPO/scripts/admin/del-user.py --username USER -y
    578 ```
    579 
    580 ## Referências rápidas
    581 
    582 - [docs/10-user-provisioning-and-admin-ops.md](/Z:/Códigos/runv-server/docs/10-user-provisioning-and-admin-ops.md)
    583 - [docs/11-daily-operations.md](/Z:/Códigos/runv-server/docs/11-daily-operations.md)
    584 - [docs/05-tools-and-system-experience.md](/Z:/Códigos/runv-server/docs/05-tools-and-system-experience.md)
    585 - [docs/06-site-and-apache.md](/Z:/Códigos/runv-server/docs/06-site-and-apache.md)
    586 - [docs/08-email.md](/Z:/Códigos/runv-server/docs/08-email.md)
    587 - [docs/09-terminal-entre.md](/Z:/Códigos/runv-server/docs/09-terminal-entre.md)