Como editar um arquivo do sistema com sudoedit preservando o ambiente de usuário de invocação

Como editar um arquivo do sistema com sudoedit preservando o ambiente de usuário de invocação

No Linux e em outros sistemas operacionais baseados em UNIX, o sudo é usado para executar um programa com os privilégios de outro usuário, geralmente raiz. Quando precisamos modificar um arquivo que exige que os privilégios administrativos sejam editados, se lançarmos nosso editor de texto favorito diretamente com o sudo, ele será executado sem a personalização e as configurações que usamos quando o invocarmos normalmente, uma vez que o ambiente do usuário invocando o usuário é não preservado. Neste tutorial, veremos como podemos resolver facilmente esse problema e como podemos modificar os arquivos do sistema com segurança usando sudoedit.

Neste tutorial, você aprenderá:

  • Como editar um arquivo de sistema usando sudoedit
  • Quais são as etapas executadas quando um arquivo é editado com sudoedit
  • Como definir o editor padrão usado pelo sudo

Requisitos de software e convenções usadas

Requisitos de software e convenções de linha de comando Linux
Categoria Requisitos, convenções ou versão de software usada
Sistema Distribuição Independente
Programas sudo
Outro Nenhum
Convenções # - requer que os comandos linux -comidos sejam executados com privilégios de raiz diretamente como usuário root ou por uso de sudo comando
$-exige que o Linux-Commands seja executado como um usuário não privilegiado regular

Comportamento padrão do sudo

A maioria das distribuições Linux está configurada para que a principal maneira de obter privilégios de raiz seja usar sudo. O uso do sudo nos concede uma série de privilégios su, o principal é que privilégios específicos podem ser concedidos a um usuário sem ter que dar -lhe acesso total à raiz.

Sudo pode ser ajustado através do /etc/sudoers arquivo; Como este arquivo é muito importante, ele deve ser editado usando o Visudo Comando, que garante que nenhum erro de sintaxe esteja presente antes que as alterações sejam salvas.

Na grande maioria dos casos, quando um comando é executado com sudo, o ambiente de usuário de invocação não é preservado; portanto, por exemplo, se invocarmos nosso editor usando sudo para modificar um arquivo de sistema de propriedade da root, ele executará ignorando nossa configuração pessoal. Isso pode ser bastante inconveniente e, em certos casos, administrar um editor com privilégios escalados pode representar alguns problemas de segurança. Vamos ver o que podemos fazer, em vez disso.



O problema: o editor é lançado sem configurações definidas pelo usuário

Suponha que devemos editar um arquivo com privilégios administrativos, por exemplo /etc/fstab, É onde as informações estáticas sobre os sistemas de arquivos são armazenadas no Linux. Se usarmos nosso editor de texto favorito e o invocarmos diretamente usando sudo,
A personalização que definimos para ele (normalmente através dos arquivos de pontos apropriados armazenados em nosso LAR diretório) não será homenageado, pois o ambiente de usuário de invocação não será preservado.

Vamos ver um exemplo. Digamos que nosso editor favorito é vim e em nosso ~/.Vimrc Arquivo que digitamos Número definido Diretiva que faz com que os números de linha sejam exibidos. Se editarmos o /etc/fstab Arquivo invocando o editor diretamente com sudo, podemos ver que as configurações não são efetivas:

$ sudo vim /etc /fstab 

O arquivo será aberto no editor, e o seguinte é o que será exibido. O conteúdo do arquivo não importa para nós neste caso, por isso é truncado:

# #/etc/fstab # # Os sistemas de arquivos acessíveis, por referência, são mantidos em '/dev/disk/'. # Veja Man Pages Fstab (5), Findfs (8), Mount (8) e/ou Blkid (8) para obter mais informações. # # Depois de editar este arquivo, execute 'SystemCtl Daemon-Reload' para atualizar o Systemd # unidades geradas a partir deste arquivo. # /dev /mapper /fingolfin_vg-root_lv /ext4 padrões, X-Systemd.Tempo de dispositivo = 0 1 1 UUID = B308FBE5-68A6-4142-82DE-BA1DC3380484 /BOOT EXT2 Padrões 1 2 […] 

Como você pode ver, os números de linha não são exibidos. O exposto acima é apenas um exemplo e provavelmente nossas personalizações do editor vão muito além disso. Como podemos resolver este problema?

A solução: usando sudoedit

Para resolver o problema que ilustramos acima, podemos simplesmente usar sudoedit em vez de sudo. Usando sudoedit é o equivalente a invocar sudo com o -e opção, que é a abreviação de --editar. Conforme declarado no sudo Manual, esta opção significa basicamente: “Edite um arquivo em vez de executar um comando”.

Quando essa estratégia é usada e o usuário de invocação é permitido para executar a ação pela política do sistema, uma série de etapas será executada. Primeiro de tudo, um temporário A cópia do arquivo que queremos editar é criada. O arquivo temporário será de propriedade do usuário de invasão, para que nenhum privilégio administrativo seja necessário para modificá -lo.

O arquivo temporário será aberto no editor de texto padrão. O editor padrão é definido através de algumas variáveis, que são lidas em uma ordem específica. Eles são:

  1. Sudo_editor
  2. VISUAL
  3. EDITOR

Dependendo da distribuição e do shell que estamos usando, o valor dessas variáveis ​​pode ser definido permanentemente no ~/.Bash_profile (apenas proveniente da casca de partida) ou o ~/.perfil arquivo. Pôr vim Como nosso editor padrão, por exemplo, escrevemos:

exportar sudo_editor =/usr/bin/vim 



Observe que usamos o exportar Shell embutido antes da definição da variável: é necessário exportar a variável em si para todos os processos infantis do shell. As mudanças não serão imediatamente efetivas: devemos fazer logout e fazer login novamente,
ou adquirir o arquivo modificado "manualmente":

$ fonte ~//.Bash_profile 

Se nenhuma dessas variáveis ​​for definida, o primeiro editor especificado como o valor do editor opção no arquivo sudoers (/etc/sudoers) será usado.

Depois que o arquivo que modificamos for salvo (ele será criado do zero, se ainda não existir), e o editor for fechado, ele será copiado de volta à posição original e o arquivo temporário será removido. O usuário será solicitado a
Confirme a ação se o arquivo editado ficar vazio; Esta é uma medida de segurança adicional e muito útil, que pode evitar erros catastróficos:

sudoedit: truncate /etc /fstab a zero bytes? (y/n) [n] n sudoedit: não substituindo/etc/fstab 

Desde quando usar sudoedit em vez de sudo O ambiente do usuário da invocação é preservado e o arquivo é editado como o próprio usuário e não como root, poderemos usar nosso editor com toda a personalização que definimos, incluídos plugins carregados.

Conclusões

Neste tutorial, aprendemos como é possível editar um arquivo que exige que os privilégios administrativos sejam modificados, mantendo o ambiente de usuário de invocação usando sudoedit em vez de sudo. Vimos quais são as vantagens dessa abordagem, quais são as etapas executadas quando ela é adotada e como definir o editor padrão usado pelo sudo.

Tutoriais do Linux relacionados:

  • Uma introdução à automação, ferramentas e técnicas do Linux
  • Coisas para instalar no Ubuntu 20.04
  • Mastering Bash Script Loops
  • Arquivos de configuração do Linux: os 30 primeiros mais importantes
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • Mint 20: Melhor que o Ubuntu e o Microsoft Windows?
  • Manipulando a entrada do usuário em scripts bash
  • Como remover Bloatware do seu Samsung Android Mobile…
  • Sistema Linux Hung? Como escapar para a linha de comando e…
  • Como criar a conta Modificar e Excluir usuários no Linux