run0: ferramenta do systemd para substituir o sudo
- Nova ferramenta incluída na v256 (na prática, é um symlink para o
systemd-run já existente)
- Funciona de forma semelhante ao sudo, mas não é SUID
- Solicita ao gerenciador de serviços que invoque um comando ou shell com o UID do usuário de destino
- Em vez de herdar o contexto do cliente, invoca o comando de destino em um contexto de execução isolado, recém-forkado a partir do PID 1
- O run0 não implementa sua própria linguagem de configuração e usa o polkit para autorização.
- Durante a elevação de privilégios, muda o fundo do terminal para um tom avermelhado para indicar que está operando com privilégios. Também exibe um ponto vermelho no título da janela para indicar a elevação de privilégios.
- Suporta a opção
--property= do systemd-run, permitindo especificar as configurações de serviço desejadas para o comando/sessão privilegiado invocado.
Problemas do sudo
- O sudo é um binário SUID relativamente grande, ou seja, código privilegiado que pode ser invocado por usuários sem privilégios a partir do próprio contexto deles.
- Tem uma grande superfície de ataque devido à linguagem de configuração complexa, plugins carregáveis (LDAP etc.), correspondência de nomes de host e mais.
- O maior problema é o fato de ser um binário SUID. Ele é chamado por código sem privilégios e herda um contexto de execução controlado por esse código sem privilégios (variáveis de ambiente, propriedades de escalonamento de processos, atribuição de cgroup, contexto de segurança, descritores de arquivo passados etc.). Binários SUID precisam higienizar isso com muito cuidado, mas muitas vezes não conseguem fazê-lo bem.
Outros pontos
- Com o run0, é possível executar não só um shell, mas também outros comandos com privilégios de root. Ao encerrar o programa, a cor do terminal volta ao normal.
- A mudança automática da cor de fundo pode ser incômoda, mas pode ser ajustada ou desativada com a opção
--background=.
- Parece possível substituir completamente o sudo pelo run0, mas cada distribuição pode ter preferências diferentes.
- A abordagem de plugins do sudo, incluindo suporte a LDAP, traz muitos problemas. O polkit pode ser expandido de uma forma gerenciada com segurança no systemd.
- É possível verificar a execução de scripts bash com o run0 por meio das variáveis de ambiente
SUDO_xxx, compatíveis com o sudo.
Opinião do GN⁺
- É impressionante que o run0 tenha sido apresentado como alternativa ao sudo, que é amplamente usado. Parece manter as vantagens do sudo enquanto evita os riscos do SUID.
- Informar visualmente de forma clara quando há elevação de privilégios deve ajudar a reduzir danos causados por engano. Mudar a cor de fundo do terminal pode incomodar, mas como isso pode ser ajustado por opção, não parece um grande problema.
- A configuração de permissões via polkit pode ser menos flexível que o sudo, mas isso pode justamente torná-la mais simples e reduzir a superfície de ataque. Parece importante documentar bem exemplos de configuração do polkit.
- Para migrar scripts existentes e outros recursos que dependem do sudo, provavelmente ainda será necessário oferecer sudo junto por algum tempo. Mas em ambientes novos, parece melhor usar o run0 desde o início.
- No longo prazo, espera-se que a adoção do run0 sirva de gatilho para remover SUID de forma mais agressiva e migrar para uma arquitetura em que as permissões do sistema sejam gerenciadas de forma centralizada por serviços do sistema. Isso parece uma direção desejável em termos de segurança e robustez.
1 comentários
Opiniões do Hacker News