別のユーザーとしてコマンドを実行し、そのstdinに書き込み、そのstdoutから読み取る必要があります。新しいシェルを開くことによってのみ、別のユーザーとしてコマンドを実行できます。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
しかし、それは期待どおりに機能しません。スクリプトのstdinをコマンドのstdinにリダイレクトし、コマンドのstdoutをスクリプトのstdoutにリダイレクトしたいので、スクリプトを元のコマンドとしてシームレスに使用できます。
投稿に編集エラーがあるようです。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
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加