Como posso usar comandos com o sudo sem alterar o proprietário dos arquivos?

12

Quando uso o sudo para fazer algumas atividades com arquivos, esses arquivos mudam de propriedade. Como posso usar comandos com o sudo sem alterar o proprietário dos arquivos?

O arquivo de exemplo archivos35.sh é do apache, mas eu uso sed (com usr admin sudo)

$ ls -l
-rwxr-xrw-. 1 apache apache 181 Aug 5 11:56 archivos35.sh

Usuário admincom sudo ---

sudo sed -i s/old/new/g archivos35.sh

Mas fazer esse comando com sudo altera o proprietário do arquivo

$ ls -l
-rwxr-xrw-. 1 admin apache 181 Aug 5 11:56 archivos35.sh

Como evitar o uso do comando com sudo para alterar o proprietário do arquivo? Eu só quero fazer alterações no arquivo sem modificar seu proprietário.

Dok Gus
fonte
Por que seu script é gravável no mundo?
Jim L.
Por engano, defino-o com 756. Eu não deveria
Dok Gus

Respostas:

29

Se você precisar sudomodificar o arquivo, use-o para alternar para o usuário certo. Você não precisa mudar para o root, esse é apenas o padrão. Então, no seu caso, você gostaria de fazer:

sudo -iu apache sed -i 's/old/new/g' archivos35.sh

Isso executará o sedcomando como usuário apache.

terdon
fonte
2

Você não está realmente alterando a propriedade do arquivo, mas sim removendo o arquivo antigo e criando um novo. Quando você faz isso, o novo arquivo é criado, de propriedade do uid do criador. Para evitar isso, você deve modificar o arquivo no local. Edite-o usando um editor de texto que salva substituindo o arquivo original no local. Ou execute seus comandos sed com saída para um arquivo temporário e copie o arquivo temporário sobre o arquivo original.

Kyle Jones
fonte
1
Você poderia pensar que a -iopção aka --in-placeseria realmente modificar inplace ...
JShorthouse
Whit A resposta @teldon, consegui fazer o que eu precisava. com sed eu modifico o local sem abrir o arquivo.
Dok Gus
1
@JShorthouse Você pensaria, mas não, pelo menos não em todos os lugares.
Kyle Jones
3
A maioria das chamadas edições "in-loco" do @JShorthouse não são, elas alteram um arquivo temporário e o controlam sobre o original (e isso inclui a maioria, se não todas, implementações de sed. E perl. E a maioria dos outros programas. com uma opção "edição no local"). Se você deseja uma edição real no local, use um editor de texto com script como edou exou vi/ vim.
cas
1
Até alguns editores de texto usam o método temp + rename ao gravar o arquivo, como à prova de falhas em caso de falha durante a gravação. Por exemplo, o Emacs faz isso por padrão, mas você pode substituí-lo pela configuração.
Barmar