executa o comando sudo su no script e redireciona stdin e stdout

1

Eu preciso executar o comando como outro usuário e escrever em seu stdin e ler o stdout. Eu posso executar o comando como outro usuário apenas através da abertura de novo shell: sudo su anotheruser mas com o novo shell aberto eu vou perder stdin e stdout de chamador. Eu não tenho permissão para executar sudo -u anotheruser -c command

Descobri que posso usar pipes nomeados para redirecionamento stdin / stdout, então escrevi um script:

#!/usr/bin/env bash

mkfifo pipein
mkfifo pipeout

echo '/usr/lib/openssh/sftp-server 0<pipein >pipeout' | sudo su anotheruser

cat 0<&1 >pipein & cat <pipeout

wait

Mas não funciona como desejado. Eu quero redirecionar o stdin do script para o stdin do comando e também redirecionar o stdout do comando para o stdout do script - para que eu possa usar o script como comando original.

    
por isevcik 18.08.2015 / 16:36

2 respostas

2

Você parece ter alguns erros de edição na sua postagem. Existe um "&" faltando para a linha sudo, e você está usando nomes diferentes para seus canos mais tarde no script. Aqui está algo que funciona para mim:

#!/usr/bin/env bash
mkfifo pipein
mkfifo pipeout
echo '/usr/lib/openssh/sftp-server <pipein >pipeout' | sudo su anotheruser &
cat <pipeout &
cat >pipein
wait
rm -f pipein pipeout
    
por 18.08.2015 / 19:47
0

Não tenho certeza se entendi sua pergunta completamente, mas acho que você está atrás de algo assim:

sudo -u $USER sh -c "ls -la /home" | grep $USER

Ou se você quiser o pipe como o outro usuário

sudo -u $USER sh -c "ls -la /home | grep $USER"
    
por 18.08.2015 / 16:58