Linux Segurança · 5 min read · Nov 14, 2025

Como permitir que os usuários editem arquivos com segurança usando sudoedit no Linux

Suponha que você seja um administrador de sistema em uma empresa onde as equipes trabalham principalmente no Linux com privilégios limitados. Agora imagine uma situação em que membros de uma das equipes - como parte de algum novo trabalho - precisam editar frequentemente um arquivo que requer privilégios de superusuário. O que você faria?

Uma opção é dar a eles o acesso ‘sudo’, mas isso seria como dar a um estranho acesso à sua casa completa quando tudo o que eles precisam é estar apenas em um dos seus quartos - o que quero dizer é que o acesso ‘sudo’ padrão permitirá que eles façam qualquer coisa que exija privilégios de root, quando tudo o que é necessário é a capacidade de editar um determinado arquivo do sistema.

Dada a flexibilidade que o ‘sudo’ oferece, a outra opção que você tem é ajustar a política do ‘sudo’ de forma que apenas o privilégio de editar o arquivo em questão seja concedido. Por exemplo, algo assim:

%newsudo ALL = vim /caminho/para/arquivo

Embora isso seja, sem dúvida, uma solução muito melhor do que fornecer o acesso completo ao sudo, ainda há uma brecha que alguém poderia explorar.

Para entender do que estou falando, considere um cenário em que o acesso limitado mencionado anteriormente é concedido ao grupo, e alguém abre o arquivo em questão para edição usando o comando ‘sudo’.

Agora, uma mente inteligente com bom conhecimento sobre vim saberia que pode lançar um novo shell de dentro do editor - tudo o que precisa fazer é executar o seguinte comando vim:

:shell

Isso o colocará instantaneamente em um shell interativo. Se você estiver testando esses passos em sua máquina, basta executar o comando ‘whoami’ e você entenderá qual brecha eu estava falando - Sim, você está no shell como root.

Aqui está um exemplo de captura de tela:

Desnecessário dizer que o propósito de fornecer acesso de edição a apenas um único arquivo foi derrotado, e o usuário pode fazer QUALQUER COISA agora.

Vamos ver se há alguma outra opção que temos. Existe uma tag NOEXEC que você pode usar na sua entrada sudoers:

%newsudo ALL = NOEXEC: vim /caminho/para/arquivo

NOEXEC basicamente permite que você impeça um programa executado pelo sudo de executar qualquer outro programa. Então, esta é a solução definitiva? Infelizmente não. Quanto às razões, aqui está como o manual dos sudoers explica essa tag:

noexec  
Muitos sistemas que suportam bibliotecas compartilhadas têm a capacidade de substituir funções de biblioteca padrão apontando uma variável de ambiente (geralmente LD_PRELOAD) para uma biblioteca compartilhada alternativa. Em tais sistemas, a funcionalidade noexec do sudo pode ser usada para impedir que um programa executado pelo sudo execute qualquer outro programa. Observe, no entanto, que isso se aplica apenas a executáveis nativos vinculados dinamicamente. Executáveis vinculados estaticamente e executáveis estrangeiros executados sob emulação binária não são afetados.  
A funcionalidade noexec é conhecida por funcionar em SunOS, Solaris, *BSD, Linux, IRIX, Tru64 UNIX, MacOS X, HP-UX 11.x e AIX 5.3 e acima.  
...  
...  
...  
Para habilitar noexec para um comando, use a tag NOEXEC conforme documentado na seção de Especificação do Usuário acima. Aqui está aquele exemplo novamente:  
  
aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi  
Isso permite que o usuário aaron execute /usr/bin/more e /usr/bin/vi com noexec habilitado. Isso impedirá que esses dois comandos executem outros comandos (como um shell). Se você não tiver certeza se seu sistema é capaz de suportar noexec, você sempre pode apenas testá-lo e verificar se as saídas de shell funcionam quando noexec está habilitado.  
Observe que restringir saídas de shell não é uma panaceia. Programas executados como root ainda são capazes de muitas operações potencialmente perigosas (como alterar ou sobrescrever arquivos) que poderiam levar a uma escalada de privilégios não intencional.  
...  
...  
...

Se você ler cuidadosamente o texto destacado em negrito, saberá que NOEXEC tem seu próprio conjunto de limitações.

Então, qual é a solução mais confiável? Bem, é sudoedit. Até o manual dos sudoers recomenda essa ferramenta:

No caso específico de um editor, uma abordagem mais segura é dar ao usuário permissão para executar sudoedit.

Sudoedit é um comando embutido que permite que os usuários editem arquivos com segurança. De acordo com a página do manual do sudo, ‘sudoedit’ é equivalente a executar ‘sudo’ com a opção de linha de comando ‘-e’.

Por que é melhor

Com ‘sudoedit’, os usuários têm a escolha de usar seu editor preferido - o que é diferente da solução que discutimos no início deste tutorial, onde os usuários são forçados a usar o editor Vim - permitindo que eles desfrutem de suas próprias personalizações. E a maior razão de todas, com ‘sudoedit’, o usuário estará editando o arquivo como ele mesmo, e não como ‘root’.

Como o Sudoedit funciona

Para usar o sudoedit, a entrada na sudoers deve ser, por exemplo, algo assim:

%newsudo ALL = sudoedit /caminho/para/arquivo

E os usuários que fazem parte do grupo ‘newsudo’ poderão editar o arquivo executando o seguinte comando:

sudoedit /caminho/para/arquivo

Então, o que esse comando fará é que ele primeiro criará uma cópia temporária do arquivo que você deseja editar. Em seguida, o comando buscará as variáveis de ambiente SUDO_EDITOR, VISUAL e EDITOR (nesta ordem) para determinar qual editor deve ser invocado para abrir a cópia temporária que acaba de ser criada. Depois que o usuário terminar o trabalho de modificação, as alterações são copiadas de volta para o arquivo original.

Aqui está a explicação detalhada da página do manual do comando ‘sudo’:

-e, --edit  
Edite um ou mais arquivos em vez de executar um comando. Em vez de um nome de caminho, a string "sudoedit" é usada ao consultar a política de segurança. Se o usuário estiver autorizado pela política, os seguintes passos são tomados:  
  
 1. Cópias temporárias são feitas dos arquivos a serem editados com  
 o proprietário definido como o usuário que invocou.  
  
 2. O editor especificado pela política é executado para editar os  
 arquivos temporários. A política dos sudoers usa as  
 variáveis de ambiente SUDO_EDITOR, VISUAL e EDITOR (nesta  
 ordem). Se nenhuma das variáveis SUDO_EDITOR, VISUAL ou EDITOR  
 estiver definida, o primeiro programa listado na opção editor  
 sudoers(5) é usado.  
  
 3. Se eles foram modificados, os arquivos temporários são  
 copiados de volta para sua localização original e as versões  
 temporárias são removidas.  
  
Se o arquivo especificado não existir, ele será criado. Observe que, ao contrário da maioria dos comandos executados pelo sudo, o editor é executado com o ambiente do usuário que invocou não modificado. Se, por algum motivo, o sudo não conseguir atualizar um arquivo com sua versão editada, o usuário receberá um aviso e a cópia editada permanecerá em um arquivo temporário.

Até agora, você deve ter uma ideia básica sobre ‘sudoedit’, incluindo quando usá-lo e por que é melhor do que usar ‘sudo’ quando tudo o que você deseja é editar um arquivo ou alguns arquivos. Claro, como qualquer outra ferramenta relacionada à segurança, ‘sudoedit’ teve sua parte de exploits, mas ainda é uma solução recomendada em muitos casos de uso.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.