다른 사용자로 명령을 실행하고 표준 입력에 쓰고 표준 출력에서 읽어야 합니다. 새 쉘을 열어야 다른 사용자로서만 명령을 실행할 수 있습니다. sudo su anotheruser
그러나 새로 열린 쉘에서는 호출자의 stdin 및 stdout이 손실됩니다. 나는 달리는 것이 허락되지 않는다sudo -u anotheruser -c command
stdin/stdout 리디렉션에 명명된 파이프를 사용할 수 있다는 것을 알고 다음과 같은 스크립트를 작성했습니다.
#!/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
하지만 예상대로 작동하지 않습니다. 스크립트를 원래 명령으로 원활하게 사용할 수 있도록 스크립트의 표준 입력을 명령의 표준 입력으로, 명령의 표준 출력을 스크립트의 표준 출력으로 리디렉션하고 싶습니다.
답변1
귀하의 게시물에 일부 편집 오류가 있는 것 같습니다. sudo 줄에 "&"가 누락되어 있고 나중에 스크립트에서 파이프에 다른 이름을 사용합니다. 나에게 도움이 된 것은 다음과 같습니다.
#!/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
답변2
귀하의 질문을 완전히 이해했는지 잘 모르겠지만 다음과 같은 내용을 찾고 계신 것 같습니다.
sudo -u $USER sh -c "ls -la /home" | grep $USER
또는 다른 사용자로 파이프를 원하는 경우
sudo -u $USER sh -c "ls -la /home | grep $USER"