Por que o sudoedit está gravando em um diretório temporário?

10

Eu costumava sudoeditcriar um arquivo:

 $ sudoedit /etc/systemd/system/apache2.service

mas quando fui salvar o arquivo, ele o gravou em um diretório temporário (/ var / temp / blahblah). O que está acontecendo? Por que ele não está salvando no diretório do sistema?

Tyler Durden
fonte

Respostas:

22

O objetivo sudoedité permitir que os usuários editem arquivos para os quais de outra forma não teriam permissão, enquanto executavam um editor sem privilégios. Para que isso aconteça, sudoeditcopia o arquivo a ser editado para um local temporário, o torna gravável pelo usuário solicitante e o abre no editor configurado. É por isso que o editor mostra um nome de arquivo não relacionado em um diretório temporário. Quando o editor sai, sudoeditverifica se alguma alteração foi realmente feita e copia o arquivo temporário alterado de volta para o local original, se necessário.

Stephen Kitt
fonte
Alguns editores do IIRC também farão verificações básicas de sanidade para garantir que nenhuma alteração no bloco de computadores tenha sido feita, mas não tenho certeza do quanto isso é comum.
Fund Monica's Lawsuit
1
@ NicHartley: É difícil fazer isso no caso geral, porque existem muitas maneiras variadas de bloquear o seu computador. Ele tende a ser específico da aplicação, por exemplo, com visudofor /etc/sudoers.
Kevin
@ Kevin Oh, gritos, acho que confuso visudopara sudoedit. Eu sabia visudoque tinha feito isso com certeza. Obrigado por esclarecer isso!
Fund Monica's Lawsuit
1

Isso está bem explicado na página de sudomanual . A descrição de -e(que sudoedité equivalente a) diz:

-e

A -eopção (editar) indica que, em vez de executar um comando, o usuário deseja editar um ou mais arquivos. No lugar de um comando, a cadeia " sudoedit" é usada ao consultar a política de segurança. Se o usuário estiver autorizado pela política, serão executadas as seguintes etapas:

  1. São feitas cópias temporárias dos arquivos a serem editados com o proprietário definido para o usuário que está chamando.
  2. O editor especificado pela política é executado para editar os arquivos temporários. A sudoerspolítica usa as variáveis ​​de ambiente SUDO_EDITOR, VISUALe EDITOR(nessa ordem). Se nenhum SUDO_EDITOR, VISUALou EDITORestiver definido, o primeiro programa listado na sudoers(5)opção do editor será usado.
  3. Se eles foram modificados, os arquivos temporários são copiados de volta para o local original e as versões temporárias são removidas.

Se o arquivo especificado não existir, ele será criado. Observe que, diferentemente da maioria dos comandos executados sudo, o editor é executado com o ambiente do usuário que está chamando não modificado. Se, por algum motivo, sudonã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.

Em particular, observe o terceiro passo: somente se o arquivo tiver sido modificado no final da edição, o original será alterado. Portanto, se você tiver um programa que monitora um arquivo, isso pode ajudar a evitar que: a) gravações intermediárias sejam capturadas eb) ações desnecessárias se você decidir não fazer alterações no final.


fonte