O sed é executado como um usuário diferente?

1

Eu tenho um script sed que altera algum conteúdo em /etc/shadow . A mudança real não é importante, vou colocá-lo apenas como um exemplo:

root@device:~ sed -i 's/root:\(.*\):0:0/root::10:0/' /etc/shadow
sed: can't create temp file '/etc/passwdH5HWP7': Permission denied

Como a saída mostra, parece haver algum erro de permissão, mas estou executando o comando como root .

O sed usado é de BusyBox v1.22.1 em uma distribuição incorporada.

Se eu tentar o exemplo na pasta inicial, não há erro. Além disso, posso editar /etc/shadow normalmente por meio de um editor de texto.

sed está criando arquivos como um usuário não raiz?

    
por TheMeaningfulEngineer 25.08.2015 / 10:17

1 resposta

5

O motivo é provavelmente que / (contendo /etc ) é um sistema de arquivos somente para leitura, mas possui um link simbólico para /etc/shadow , /etc/passwd e outros arquivos dinâmicos que caem em um sistema de arquivos de leitura / gravação. / p>

Isso permitirá que você edite os arquivos shadow e passwd diretamente. O sed -i falha porque sua implementação não é atualizada no local. Em vez disso, ele cria um arquivo temporário e grava as alterações nele e, em seguida, substitui o arquivo original pela cópia temporária. A mensagem de erro que você está vendo diz que sed não pode gravar o arquivo (temporário) /etc/passwdH5HWP7 .

Solução? Não use -i e controle você mesmo a localização do arquivo temporário ou forneça o sinalizador -i com um nome de arquivo. Em ambos os casos, você precisa fornecer um nome de arquivo em um local com acesso de leitura / gravação.

    
por 25.08.2015 / 10:35