パイプラインの途中で権限をどのように昇格しますか?

パイプラインの途中で権限をどのように昇格しますか?

私の推測は次のとおりです。

echo "Generating some text" | su - -c cat >/output/file

しかしsu言った:

su: must be run from a terminal

あなたは何をしますか?

ベストアンサー1

sudoこれをサポートしてください。

$ echo hello world | sudo cat  
SUDO password: 
hello world

違いは、(ターゲットユーザーの)パスワードではsudoなくユーザーのパスワードを提供する必要があることです。ただし、必要に応じてroottargetpwまたはrunaspw)ディレクティブを使用してrootpwこの動作を変更できますsudoers.conf


ただし、実行しようとしている内容を読み取ると、昇格の問題が解決されますが、期待どおりに実行されるわけではありません。これは/output/file、ルートとして作成されず、ユーザーとして作成/変更されることを意味します。

その理由は、コマンドが呼び出される前にシェル出力リダイレクトが実行されるためです。したがって、シェルが開き、/output/file開いたファイルをsu/ sudo(したがってcat)に渡します。

ただし、ユーティリティは独自にファイルを開くので、teeこれを行うために使用できます。tee

echo "hello world" | sudo tee /output/file >/dev/null

デフォルトでは、tee出力は/output/fileSTDOUTにコピーされますが、STDOUTは/dev/null

次のようにすることもできます。

echo "hello world" | sudo sh -c 'cat > /output/file'

...あまり神秘的ではありませんね。

おすすめ記事