Não é possível ler no diretório / root, apesar de sudo

1

Eu tenho um script bash com algo como

while read -r name value
do
    ....something
done < "test"

Estou executando este script como usuário normal.

Agora eu queria armazenar esse arquivo no diretório home /root e lê-lo de lá.
Fazendo

while read -r name value
do
    ....something
done < "/root/path/to/file"

é claro que recebo o erro: ./script: ine xy: /root/path/to/file: Permission Denied

Do que eu tentei

while sudo read -r name value
do
    ....something
done < "/root/path/to/file"

Mas isso me dá: sudo: read: unknown command

Por que não consigo ler um arquivo no diretório /root home embora eu use sudo ?

EDITAR
Eu tentei um pouco mais e descobri que não posso nem fazer

$> sudo echo "test" /root/.test
[sudo] Password for user:
-bash: /root/.test: Permission Denied 

EDIT 2
Ele funciona como eu quero se eu executar o script completo com sudo ./myscript , mas eu prefiro não fazer isso ... Existe outra maneira?

    
por derHugo 21.06.2017 / 13:09

2 respostas

1

Por que isso não funciona?

A razão pela qual sua abordagem não funciona é que você está lendo o arquivo usando < "stdin", significa que seu shell está encarregado de ler o arquivo e você o executou usando um usuário comum para não ter o direitos necessários para ler o arquivo. Agora você deve saber que executar o comando read usando sudo não ajudará a não mencionar que é um shell embutido que não pode ser executado usando sudo , como cd etc.

Como faço para que funcione?

A única coisa que você deve fazer é de alguma forma ler o arquivo vi root ou um usuário / grupo com o privilégio necessário. Então você pode fazer como:

sudo cat /root/txt | while read -r name value;
do
  some command
done

neste caso, apenas cat será executado com sudo .

No entanto, a melhor prática é colocar seu script em /usr/local/bin para que todos tenham acesso para executá-lo.

Observe também que, quando você quiser redirecionar algo para /root/example , use sudo tee :

echo test | sudo tee file

ou execute o script inteiro usando sudo .

    
por Ravexina 21.06.2017 / 13:42
1

/ a pasta raiz é apenas para raiz. Eu acredito que apenas o sistema pode manipular arquivos lá. você pode tentar com 'su', mas eu acho que você terá o mesmo resultado.

segundo: não é recomendado rodar programas normais com privilégios de root.

quando você usa o sudo na linha de comando, você fornece a senha e se torna root. o script não pode fazer isso. é uma medida de segurança para garantir que alguém no terminal esteja fazendo as alterações. também algumas ações e pastas estão disponíveis apenas para o processo do sistema raiz.

    
por ravery 21.06.2017 / 13:18