/ / Cat muda de dono? - linux, bash, ssh

Gato muda de dono? - linux, bash, ssh

Eu tenho que editar um arquivo de propriedade do root via ssh. Eu adiciono uma entrada no arquivo, preservo as 9 primeiras linhas e reordenio o restante para um arquivo temporário. Eu sei que substitui o que está no arquivo (e isso é o que eu quero), mas eu preciso preservar a raiz como proprietário do arquivo. Como posso fazer isso? Obrigado!

#!/bin/bash
user=""
echo "User:"
read user
ssh xxxx@xxxx "
sed -i "$a$user" file;
(head -n 9 file ; tail -n +10 file | sort) > temp;
cat temp > file;
rm -f temp
"

Respostas:

1 para resposta № 1

Não é cat que está mudando o dono, é sed. Quando você usa sed -ifaz algo como:

mv file file.bak
sed "$a$user" file.bak > file
rm file.bak

Como você pode ver, isso cria um novo arquivo com o nome do arquivo original e é de propriedade do usuário que cria o arquivo.

Se você quiser evitar isso, faça uma cópia do arquivo original em vez de usar o -i opção.

cp file /tmp/file.$$
sed "$a$user" /tmp/file.$$ > file
rm /tmp/file.$$

Ou você poderia simplesmente colocar sed em seu pipeline:

sed "$a$user" file | head -n 9 file ; tail -n +10 file | sort > temp
cat temp > file
rm temp

0 para resposta № 2

Já faz um tempo desde que escrevi no BASH, mas acho que um ponto de partida seria

chown root $file // if you have a variable with the file name in

ou

chown root thefile.txt //if you want it hard coded;

outra variável na equação seria quem tem a propriedade do aplicativo cat? Eu acho que quem é o proprietário do aplicativo em execução, é assim que a propriedade dos arquivos é decidida.

talvez você também possa tentar

$ sudo cat temp > file

porque a sessão pertenceria então à raiz e, portanto, a saída pertenceria à raiz ???


0 para resposta № 3

Eu entendo que o usuário que entra não pode se tornar root? Então, sua melhor aposta é usar o dd

dd if = tmpfile of = outfile

Claro, faça todo o pedido, seding, awking e greping no seu arquivo tmp. dd neste uso é equivalente> sem criar um novo arquivo


0 para a resposta № 4
#!/bin/bash
user=""
echo "User:"
read user
ssh xxxx@xxxx "
sed -i "$a$user" file;
(head -n 9 file ; tail -n +10 file | sort) > temp;
sudo mv temp file;
sudo chown root file
"

Isso funcionará melhor se, na máquina xxxx, o usuário xxxx que você está logando tiver acesso sem senha ao sudo. Você pode fazer isso com esta entrada em seu arquivo / etc / sudoers lá:

xxxx ALL=NOPASSWD: ALL