{"id":20284,"date":"2026-08-03T11:50:45","date_gmt":"2026-08-03T09:50:45","guid":{"rendered":"https:\/\/webhosting.de\/linux-capabilities-root-rechte-granular-aufteilen-sicherheitskonzept\/"},"modified":"2026-08-03T11:50:45","modified_gmt":"2026-08-03T09:50:45","slug":"capacidades-do-linux-direitos-de-root-divisao-granular-conceito-de-seguranca","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pt\/linux-capabilities-root-rechte-granular-aufteilen-sicherheitskonzept\/","title":{"rendered":"Funcionalidades do Linux: distribuir os direitos de root de forma segura e granular"},"content":{"rendered":"<p>Com o Linux Capabilities, divido os direitos de root em privil\u00e9gios pequenos e claramente definidos, reduzindo assim drasticamente o risco. Desta forma, controlo de forma espec\u00edfica quais os processos que podem executar a\u00e7\u00f5es espec\u00edficas e limito a superf\u00edcie de ataque de cada aplica\u00e7\u00e3o.<\/p>\n\n<h2>Pontos centrais<\/h2>\n\n<ul>\n  <li><strong>De granula\u00e7\u00e3o fina<\/strong> Em vez de ser todo-poderoso: dividir os direitos de root em privil\u00e9gios mais espec\u00edficos.<\/li>\n  <li><strong>Capacidades dos ficheiros<\/strong> Em vez de Set-UID: associar os direitos necess\u00e1rios diretamente aos ficheiros bin\u00e1rios.<\/li>\n  <li><strong>Conjuntos de capacidades<\/strong> Configurar de forma espec\u00edfica os par\u00e2metros: Permitted, Effective, Inheritable e Bounding.<\/li>\n  <li><strong>Separa\u00e7\u00e3o de privil\u00e9gios<\/strong>: Separar rigorosamente os servi\u00e7os, as ferramentas e as tarefas.<\/li>\n  <li><strong>Defesa em profundidade<\/strong>: Complementar as capacidades com o sudo, fun\u00e7\u00f5es e registos.<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linux-serververwaltung-8291.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Por que \u00e9 que se deve desativar os direitos de root?<\/h2>\n\n<p>Uma conta de root concede <strong>Acesso total<\/strong> no ambiente de ficheiros e processos, mas \u00e9 precisamente isso que d\u00e1 azo a erros com consequ\u00eancias graves. Basta um comando errado ou um exploit para que toda a instala\u00e7\u00e3o entre em colapso. Por isso, limito as a\u00e7\u00f5es de grande alcance ao estritamente necess\u00e1rio, reduzindo assim a extens\u00e3o dos danos e o tempo de recupera\u00e7\u00e3o. O princ\u00edpio dos direitos m\u00ednimos mant\u00e9m os servi\u00e7os compactos e control\u00e1veis. Desativo o in\u00edcio de sess\u00e3o direto como root, recorro a fun\u00e7\u00f5es e mantenho registos completos.<\/p>\n\n<h2>Uma breve explica\u00e7\u00e3o sobre as capacidades do Linux<\/h2>\n\n<p>As capacidades do Linux dividem os poderes cl\u00e1ssicos do utilizador \u00abroot\u00bb em categorias claramente definidas <strong>Privil\u00e9gios<\/strong>. Cada processo recebe apenas os componentes de que realmente necessita para a sua tarefa, como a liga\u00e7\u00e3o a portas inferiores a 1024 ou o envio de sinais especiais. Desta forma, contorno o antigo princ\u00edpio de \u00abtudo ou nada\u00bb. O kernel gere estes componentes por processo e aplica-os de forma rigorosa. Desta forma, o controlo mant\u00e9m-se detalhado e transparente.<\/p>\n\n<p>Do ponto de vista t\u00e9cnico, associo as compet\u00eancias a <strong>Processos<\/strong> (atrav\u00e9s dos seus conjuntos de capacidades) ou em <strong>Arquivos<\/strong> (como atributos estendidos <code>capacidade de seguran\u00e7a<\/code> nos ficheiros bin\u00e1rios ELF). No <code>execve()<\/code>-Ao iniciar, o kernel combina as capacidades do ficheiro com os conjuntos de direitos do processo: em termos simples, as capacidades permitidas do atributo do ficheiro, juntamente com os direitos herd\u00e1veis do processo que o invoca, s\u00e3o combinadas para formar o novo conjunto \u00abPermitted\u00bb e \u2014 se assim estiver definido \u2014 ativadas simultaneamente no conjunto \u00abEffective\u00bb. Isto evita desvios relacionados com o Set-UID e mant\u00e9m os privil\u00e9gios vis\u00edveis e verific\u00e1veis.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linux_rechte_besprechung_3820.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Compreender os conjuntos de capacidades no contexto do processo<\/h2>\n\n<p>Cada processo possui v\u00e1rios conjuntos de direitos, que eu defino de forma espec\u00edfica <strong>controlo<\/strong>. O \u00abPermitted-Set\u00bb define o que um processo pode, em princ\u00edpio, possuir. O \u00abEffective-Set\u00bb determina o que est\u00e1 ativo no momento. O \u00abInheritable-Set\u00bb regula quais os privil\u00e9gios que podem ser transmitidos aos processos filhos. O \u00abBounding-Set\u00bb estabelece um limite m\u00e1ximo r\u00edgido e impede que os processos o ultrapassem.<\/p>\n\n<h2>Ambient Capabilities e Securebits<\/h2>\n\n<p>Para al\u00e9m dos conjuntos j\u00e1 conhecidos, existe o <strong>Conjunto de m\u00fasica ambiente<\/strong>, que no <code>execve()<\/code> n\u00e3o expira automaticamente. Utilizo-o quando um processo sem privil\u00e9gios necessita especificamente de direitos m\u00ednimos em v\u00e1rios <code>executar<\/code>-deve ignorar esses saltos (por exemplo, ao chamar programas auxiliares externos). Os direitos \u00abambient\u00bb s\u00f3 s\u00e3o tidos em conta nos direitos efetivos se o pr\u00f3prio ficheiro chamado n\u00e3o definir quaisquer capacidades de ficheiro \u2013 \u00e9 assim que evito uma escalada indesejada.<\/p>\n\n<p>Com os <strong>Securebits<\/strong> controlo os detalhes das transi\u00e7\u00f5es, por exemplo, se um processo pode manter as capacidades que tinha definidas anteriormente ap\u00f3s a altera\u00e7\u00e3o do UID (<code>keepcaps<\/code>) ou se, de um modo geral, n\u00e3o lhe \u00e9 permitido obter novos privil\u00e9gios (<code>no_new_privs<\/code>). Na pr\u00e1tica, configuro o Securebits de forma restritiva e abdico do conforto para interromper cadeias de explora\u00e7\u00f5es.<\/p>\n\n<h2>Capacidades de ficheiro em vez de Set-UID<\/h2>\n\n<p>Substituo os ficheiros bin\u00e1rios com Set-UID por capacidades de ficheiro, para reduzir o risco de <strong>baixar<\/strong>. Em vez de conceder direitos de root a um programa, limito-me a atribuir apenas os direitos necess\u00e1rios. Uma altera\u00e7\u00e3o t\u00edpica \u00e9 a seguinte: <code>setcap 'cap_net_bind_service=+ep' \/usr\/bin\/meinserver<\/code>. Com <code>getcap -r \/<\/code> verifico quais s\u00e3o os ficheiros que cont\u00eam compet\u00eancias. Isso reduz sensivelmente as vias de escalamento.<\/p>\n\n<p>\u00c9 importante que as capacidades dos ficheiros se apliquem apenas a <strong>Ficheiros bin\u00e1rios ELF<\/strong> funcionam. Os scripts de interpretador (por exemplo, Python, Bash) n\u00e3o os herdam de forma fi\u00e1vel. Nesses casos, encapsulo a a\u00e7\u00e3o privilegiada num pequeno programa auxiliar verificado estaticamente ou utilizo a ativa\u00e7\u00e3o por socket, para que o meu servi\u00e7o nem sequer tenha de estabelecer a liga\u00e7\u00e3o por si pr\u00f3prio. Al\u00e9m disso, mantenho-me atento aos direitos de ficheiro: as capacidades conferem direitos especiais em rela\u00e7\u00e3o ao kernel, mas substituem <strong>nenhum<\/strong> ACLs habituais ou permiss\u00f5es POSIX.<\/p>\n\n<p>Ao copiar ou empacotar, as compet\u00eancias perdem-se rapidamente: <code>cp<\/code> sem suporte para XATTR, definido incorretamente <code>umask<\/code> ou eliminar um artefacto de compila\u00e7\u00e3o num sistema de ficheiros sem atributos estendidos <code>capacidade de seguran\u00e7a<\/code> de forma impl\u00edcita. Por isso, trabalho de forma reproduz\u00edvel e utilizo: <code>cp --preserve=xattr ...<\/code>, <code>tar --xattrs<\/code>, <code>rsync -X<\/code>. Nas compila\u00e7\u00f5es de pacotes, defino explicitamente as capacidades dos ficheiros no script de instala\u00e7\u00e3o, testo a instala\u00e7\u00e3o numa VM limpa e verifico <code>getcap<\/code> no CI.<\/p>\n\n<h2>Separa\u00e7\u00e3o de privil\u00e9gios com cen\u00e1rios realistas<\/h2>\n\n<p>Um servidor Web precisa de acesso \u00e0s portas 80\/443, mas n\u00e3o a m\u00f3dulos do kernel nem a reinicializa\u00e7\u00f5es do sistema; por isso, defino <strong>CAP_NET_BIND_SERVICE<\/strong> e nada mais. Um agente de c\u00f3pia de seguran\u00e7a pode ler e gravar ficheiros, mas n\u00e3o pode alterar a configura\u00e7\u00e3o da rede. Uma ferramenta de monitoriza\u00e7\u00e3o tem acesso de leitura aos indicadores, mas n\u00e3o possui direitos de altera\u00e7\u00e3o. Estas restri\u00e7\u00f5es limitam os ataques ao \u00e2mbito local, em vez de lhes permitir afetar todo o sistema. \u00c9 precisamente esta separa\u00e7\u00e3o que mant\u00e9m os servi\u00e7os control\u00e1veis e mant\u00e9m as falhas de configura\u00e7\u00e3o sob controlo.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/balancing-linux-capabilities-5618.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Combinar com o sudo e as fun\u00e7\u00f5es<\/h2>\n\n<p>As capacidades n\u00e3o substituem uma abordagem bem organizada <strong>Estrutura de fun\u00e7\u00f5es<\/strong>, complementam-nas. Concedo direitos de sudo com rigor, utilizo caminhos completos de comandos e evito regras gen\u00e9ricas como \u201eALL=(ALL) ALL\u201c. Registo cada concess\u00e3o de acesso. Os grupos agrupam responsabilidades, enquanto as capacidades estabelecem limites t\u00e9cnicos nos processos. Desta forma, criam-se compet\u00eancias claras sem direitos excessivos.<\/p>\n\n<h2>Armadilhas frequentes e melhores pr\u00e1ticas<\/h2>\n\n<ul>\n  <li><strong>N\u00e3o utilizar CAP_SYS_ADMIN como abreviatura:<\/strong> Este direito \u00e9 um conceito abrangente. Substituo-o por alternativas mais espec\u00edficas (por exemplo,. <code>CAP_SYS_CHROOT<\/code>, <code>CAP_SYS_TIME<\/code>, <code>CAP_SYS_NICE<\/code>) ou n\u00e3o o fa\u00e7as de todo.<\/li>\n  <li><strong>Os direitos sobre os ficheiros permanecem rigorosos:<\/strong> As capacidades n\u00e3o anulam o DAC de forma geral. Sem <code>CAP_DAC_OVERRIDE<\/code> O kernel continua a respeitar os bits de propriet\u00e1rio e de modo. Por isso, continuo a atribuir direitos de leitura de forma m\u00ednima.<\/li>\n  <li><strong>Endurecimento por via:<\/strong> Se eu atribuir capacidades de ficheiro a um ficheiro bin\u00e1rio, evito a falsifica\u00e7\u00e3o do PATH (caminhos absolutos em <code>sudoers<\/code>, direitos de escrita bloqueados em diret\u00f3rios no caminho de pesquisa).<\/li>\n  <li><strong>Come\u00e7a cedo, come\u00e7a com frequ\u00eancia:<\/strong> Os processos podem, se for o caso, ser iniciados com mais direitos do que o necess\u00e1rio. Retiro as autoriza\u00e7\u00f5es desnecess\u00e1rias imediatamente ap\u00f3s a etapa cr\u00edtica (<code>prctl()<\/code>\/libcap) e defina <code>no_new_privs<\/code>, sempre que poss\u00edvel.<\/li>\n  <li><strong>Limitar a heran\u00e7a:<\/strong> Mantenho os conjuntos \u00abInheritable\u00bb e \u00abAmbient\u00bb reduzidos. Os processos filhos n\u00e3o podem abrir novas portas.<\/li>\n  <li><strong>Verificar o pipeline de compila\u00e7\u00e3o e implementa\u00e7\u00e3o:<\/strong> Confirmo que <code>capacidade de seguran\u00e7a<\/code> seja mantido e que nenhuma etapa de prepara\u00e7\u00e3o (camadas de contentores, NFS, scanner de artefactos) remova os XATTRs.<\/li>\n<\/ul>\n\n<h2>Vis\u00e3o geral das principais capacidades e riscos<\/h2>\n\n<p>Antes de atribuir os privil\u00e9gios, defino claramente os privil\u00e9gios necess\u00e1rios e avalio o risco que representam. A tabela seguinte apresenta exemplos t\u00edpicos, com os respetivos efeitos e classifica\u00e7\u00e3o. Tenho sempre em conta alternativas, para evitar direitos excessivos. Especialmente <strong>CAP_SYS_ADMIN<\/strong> Concedo-os com extrema modera\u00e7\u00e3o. Sempre que poss\u00edvel, substituo privil\u00e9gios de \u00e2mbito alargado por variantes espec\u00edficas e restritas.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Capacidade<\/th>\n      <th>Objetivo<\/th>\n      <th>Risco<\/th>\n      <th>Exemplo<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>CAP_NET_BIND_SERVICE<\/td>\n      <td>Ligar a portas &lt; 1024<\/td>\n      <td>Baixo a m\u00e9dio<\/td>\n      <td>Servidor Web nas portas 80\/443<\/td>\n    <\/tr>\n    <tr>\n      <td>CAP_SYS_BOOT<\/td>\n      <td>Reiniciar o sistema<\/td>\n      <td>Elevado<\/td>\n      <td>Rein\u00edcio programado<\/td>\n    <\/tr>\n    <tr>\n      <td>CAP_SYS_MODULE<\/td>\n      <td>Carregar\/remover m\u00f3dulos do kernel<\/td>\n      <td>Muito elevado<\/td>\n      <td>Gest\u00e3o de controladores<\/td>\n    <\/tr>\n    <tr>\n      <td>CAP_SYS_ADMIN<\/td>\n      <td>Opera\u00e7\u00f5es administrativas vers\u00e1teis<\/td>\n      <td>Muito elevado<\/td>\n      <td>V\u00e1rias tarefas de manuten\u00e7\u00e3o<\/td>\n    <\/tr>\n    <tr>\n      <td>CAP_SETUID \/ CAP_SETGID<\/td>\n      <td>Alterar o UID\/GID<\/td>\n      <td>M\u00e9dio a elevado<\/td>\n      <td>Transfer\u00eancia de direitos no servi\u00e7o<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linux_capabilities_tech-office_4738.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<p>Para al\u00e9m da tabela, estou neste momento a avaliar <code>CAP_SYS_PTRACE<\/code> (Depurar processos), <code>CAP_NET_ADMIN<\/code> (parametriza\u00e7\u00e3o da rede) e <code>CAP_DAC_OVERRIDE<\/code> (Contornar restri\u00e7\u00f5es de acesso a ficheiros) \u00e9 extremamente cr\u00edtico. Muitas vezes, existem padr\u00f5es que evitam esses direitos: pontos finais de m\u00e9tricas dedicados em vez de \u00abprocess snooping\u00bb, ativa\u00e7\u00e3o de sockets ou reencaminhamento de portas em vez de direitos de liga\u00e7\u00e3o e direitos de ficheiros bem definidos em vez de contornar o DAC de forma generalizada.<\/p>\n\n<h2>Fortalecimento em contentores e alojamento<\/h2>\n\n<p>Em ambientes multi-tenant, considero que as compet\u00eancias s\u00e3o radicalmente <strong>pequeno<\/strong> e evito a heran\u00e7a em processos filhos. Os contentores beneficiam significativamente assim que o conjunto delimitador (bounding set) estiver bem definido. Combino isto com espa\u00e7os isolados do sistema de ficheiros e dos processos. Para ter uma vis\u00e3o geral das abordagens de isolamento, esta introdu\u00e7\u00e3o ajuda-me a <a href=\"https:\/\/webhosting.de\/pt\/processo-isolamento-alojamento-chroot-cagefs-contentores-jails-seguranca-comparacao\/\">Isolamento do processo<\/a>. Desta forma, os servi\u00e7os permanecem separados, mesmo que uma aplica\u00e7\u00e3o apresente falhas.<\/p>\n\n<p>Na pr\u00e1tica, defino os contentores, por predefini\u00e7\u00e3o, para \u201eeliminar tudo, adicionar seletivamente\u201c: <code>--cap-drop=ALL --cap-add=NET_BIND_SERVICE<\/code> para servi\u00e7os Web, sem direitos de montagem, sem <code>SYS_ADMIN<\/code>. Em ambientes orquestrados, mantenho o perfil centralizado e verifico-o nas pol\u00edticas. Importante: n\u00e3o confio nas capacidades dos ficheiros na imagem, mas atribuo direitos em tempo de execu\u00e7\u00e3o no Orchestrator \u2013 de forma reproduz\u00edvel e audit\u00e1vel.<\/p>\n\n<h2>Intera\u00e7\u00e3o com o SELinux e o AppArmor<\/h2>\n\n<p>As capacidades determinam o que um processo pode fazer, enquanto os perfis MAC definem a que recursos ele tem acesso, e ambos funcionam em sintonia <strong>bom<\/strong>. Defino as capacidades de forma restrita e deixo que o SELinux ou o AppArmor limitem o acesso a ficheiros e sockets. Isto cria uma prote\u00e7\u00e3o em camadas que coloca v\u00e1rios obst\u00e1culos aos exploits. Encontro aqui uma compara\u00e7\u00e3o r\u00e1pida: <a href=\"https:\/\/webhosting.de\/pt\/selinux-vs-apparmor-seguranca-do-linux-reforco-de-servidores-protecao\/\">SELinux vs. AppArmor<\/a>. Desta forma, um servi\u00e7o comprometido fica isolado e pode causar menos danos.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/entwickler_schreibtisch2345.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Na pr\u00e1tica: proceder passo a passo<\/h2>\n\n<p>Come\u00e7o por fazer um invent\u00e1rio de todos os servi\u00e7os e das suas <strong>Requisitos<\/strong>. Em seguida, elimino os ficheiros bin\u00e1rios Set-UID desnecess\u00e1rios ou substituo-os por capacidades de ficheiro espec\u00edficas. Configuro o `sudo` de forma restritiva e documento cada entrada. Atribuo tarefas a pap\u00e9is e grupos e mantenho os direitos ao m\u00ednimo. Por fim, realizo testes sob carga e verifico as entradas de registo para detetar rejei\u00e7\u00f5es inesperadas.<\/p>\n\n<p>Uma lista de verifica\u00e7\u00e3o concisa ajuda-me na transi\u00e7\u00e3o:<\/p>\n<ul>\n  <li>Definir por escrito os requisitos para cada servi\u00e7o (apenas o que \u00e9 realmente necess\u00e1rio).<\/li>\n  <li>Fazer um invent\u00e1rio dos direitos especiais existentes (<code>find \/ -perm -4000<\/code>, <code>getcap -r \/<\/code>).<\/li>\n  <li>Substituir de forma seletiva: eliminar o Set-UID, definir as capacidades dos ficheiros, retirar os direitos numa fase inicial.<\/li>\n  <li>Fechar heran\u00e7as: otimizar o conjunto delimitador, minimizar o Inheritable\/Ambient.<\/li>\n  <li>Proteger os perfis do Systemd e dos contentores (<code>CapabilityBoundingSet=<\/code>, <code>NoNewPrivileges=yes<\/code>).<\/li>\n  <li>Realizar testes sob carga, verificar os registos e as entradas de auditoria, documentar as exce\u00e7\u00f5es.<\/li>\n<\/ul>\n\n<h2>Monitoriza\u00e7\u00e3o, espa\u00e7os de nomes e auditorias cont\u00ednuas<\/h2>\n\n<p>Monitorizo ficheiros de registo, alarmes e chamadas de sistema, para que quaisquer a\u00e7\u00f5es indesejadas sejam imediatamente <strong>destacar-se<\/strong>. Verifico regularmente as altera\u00e7\u00f5es nas capacidades, nas regras do sudo e nas fun\u00e7\u00f5es. Sempre que faz sentido, isolo adicionalmente as cargas de trabalho atrav\u00e9s de mecanismos de isolamento do kernel. Esta vis\u00e3o geral sobre o assunto constitui um bom ponto de partida para <a href=\"https:\/\/webhosting.de\/pt\/contexto-do-servidor-isolamento-namespaces-cgroups-alojamento-seguranca\/\">Espa\u00e7os de nomes e cgroups<\/a>. Assim, consigo detetar anomalias atempadamente e manter o ambiente limpo.<\/p>\n\n<p>No dia-a-dia, recorro a testes simples: <code>capsh --print<\/code> mostra-me o conjunto atual de compet\u00eancias, <code>getpcaps<\/code> enumera os direitos processuais e em <code>\/proc\/\/status<\/code> leio <code>CapEff<\/code>, <code>CapPrm<\/code>, <code>CapBnd<\/code>. Com <code>auditado<\/code> Acompanho as altera\u00e7\u00f5es no estado da capacidade (por exemplo, regra em <code>capset<\/code>), correlaciono eventos com implementa\u00e7\u00f5es e defino alertas caso surjam, de repente, direitos de acesso elevados. Em casos complexos, o que me ajuda \u00e9 <code>strace -e capget,capset<\/code>, para tornar vis\u00edveis as manipula\u00e7\u00f5es de direitos.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linux-capabilities-8123.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Exemplos pr\u00e1ticos do Systemd e de contentores<\/h2>\n\n<p>Muitos servi\u00e7os s\u00e3o executados por mim como unidades do systemd e \u00e9 a\u00ed que encapsulo os direitos:<\/p>\n<ul>\n  <li><code>CapabilityBoundingSet=CAP_NET_BIND_SERVICE<\/code> reduz a janela de direitos acess\u00edveis ao m\u00ednimo indispens\u00e1vel.<\/li>\n  <li><code>AmbientCapabilities=CAP_NET_BIND_SERVICE<\/code> concede ao servi\u00e7o o direito de se ligar \u00e0s portas 80\/443 sem \u00abfile-capabilities\u00bb.<\/li>\n  <li><code>NoNewPrivileges=yes<\/code> impede futuras extens\u00f5es de direitos.<\/li>\n  <li><code>Utilizador=<\/code>, <code>Grupo=<\/code>, <code>ProtectSystem=strict<\/code>, <code>PrivateTmp=sim<\/code> completam o isolamento.<\/li>\n<\/ul>\n<p>Nos contentores, inicio os processos da forma mais minimalista poss\u00edvel: <code>docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE --read-only<\/code>. Para tarefas de curta dura\u00e7\u00e3o, utilizo as capacidades de tempo de execu\u00e7\u00e3o em vez das capacidades de ficheiro na imagem, para que as compila\u00e7\u00f5es se mantenham reproduz\u00edveis e os direitos fiquem associados ao ambiente.<\/p>\n\n<h2>Casos concretos de migra\u00e7\u00e3o na pr\u00e1tica<\/h2>\n\n<ul>\n  <li><strong>ping sem Set-UID:<\/strong> Em vez de <code>setuid root<\/code> coloco <code>setcap 'cap_net_raw=+ep' \/bin\/ping<\/code>. Desta forma, qualquer utilizador pode abrir sockets ICMP sem ter direitos de root totais. Verifico regularmente com <code>getcap \/bin\/ping<\/code>, se o atributo foi mantido.<\/li>\n  <li><strong>Servi\u00e7o Web nas portas 80\/443:<\/strong> Executo o meu servi\u00e7o como utilizador sem privil\u00e9gios e apenas forne\u00e7o <code>cap_net_bind_service<\/code>. Se o servi\u00e7o j\u00e1 estiver ligado a um proxy reverso, posso, em alternativa, lig\u00e1-lo \u00e0s portas 80\/443 nesse proxy e utilizar internamente uma porta de alto n\u00famero \u2013 sem necessidade de conhecimentos adicionais.<\/li>\n  <li><strong>Altera\u00e7\u00e3o das partes no processo:<\/strong> Para ferramentas que necessitam temporariamente de direitos de acesso alargados (por exemplo, para definir n\u00edveis de prioridade), defino <code>cap_sys_nice<\/code>, realiza a a\u00e7\u00e3o logo no in\u00edcio e, em seguida, desativa a habilidade. Evito aumentar os direitos de forma permanente.<\/li>\n<\/ul>\n\n<h2>Limites e alternativas<\/h2>\n\n<p>Nem todos os casos de utiliza\u00e7\u00e3o exigem \u00abcapabilities\u00bb. Muitas vezes, existem alternativas seguras com menor risco:<\/p>\n<ul>\n  <li><strong>Ativa\u00e7\u00e3o do soquete:<\/strong> O servi\u00e7o de inicializa\u00e7\u00e3o (por exemplo, o systemd) abre sockets privilegiados e passa-os para o processo. Assim, o meu servi\u00e7o n\u00e3o precisa de direitos de liga\u00e7\u00e3o.<\/li>\n  <li><strong>Reencaminhamento de portas:<\/strong> Atrav\u00e9s de regras de firewall, redireciono as portas 80\/443 para uma porta alta. O servi\u00e7o continua sem privil\u00e9gios e o comportamento do sistema n\u00e3o se altera.<\/li>\n  <li><strong>Portas de baixo n\u00edvel n\u00e3o privilegiadas:<\/strong> Sempre que for adequado, posso aumentar o limite para as portas n\u00e3o privilegiadas. No entanto, isso alarga a margem de manobra para todos os processos \u2013 por isso, avalio cuidadosamente o risco e a conveni\u00eancia.<\/li>\n  <li><strong>Pequenos ajudantes em vez de \u00abfaz-tudo\u00bb:<\/strong> Prefiro um bin\u00e1rio min\u00fasculo e auditado com exatamente uma funcionalidade do que um grande mon\u00f3lito com um vasto leque de funcionalidades.<\/li>\n<\/ul>\n\n<h2>Brevemente resumido<\/h2>\n\n<p>Com <strong>Funcionalidades do Linux<\/strong> Divido os poderes de root em pequenos privil\u00e9gios f\u00e1ceis de controlar. As capacidades de ficheiro substituem os bin\u00e1rios Set-UID de risco e reduzem as consequ\u00eancias de um ataque. Em combina\u00e7\u00e3o com regras rigorosas do sudo, fun\u00e7\u00f5es e perfis MAC, cria-se uma prote\u00e7\u00e3o em camadas com limites claros. Os conjuntos \u00abBounding\u00bb e \u00abInheritable\u00bb limitam a heran\u00e7a e mant\u00eam os processos no caminho certo. Quem procede desta forma reduz significativamente as vulnerabilidades e mant\u00e9m a carga administrativa a um n\u00edvel razo\u00e1vel.<\/p>","protected":false},"excerpt":{"rendered":"<p>As capacidades do Linux dividem os direitos de root em privil\u00e9gios granulares. Descubra como o modelo de capacidades refor\u00e7a a seguran\u00e7a do seu servidor e permite a separa\u00e7\u00e3o de privil\u00e9gios em sistemas Linux.<\/p>","protected":false},"author":1,"featured_media":20277,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[794],"tags":[],"class_list":["post-20284","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sicherheit-computer_und_internet"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"93","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"Linux Capabilities","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"20277","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts\/20284","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/comments?post=20284"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts\/20284\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/media\/20277"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/media?parent=20284"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/categories?post=20284"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/tags?post=20284"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}