web-dev-qa-db-ja.com

sudoでリダイレクトを使用する方法

重複の可能性:
stdoutを書き込み権限のないファイルにリダイレクトしています

ええ、私はルートにエスカレートすることができます(おそらくそうするでしょう)が、なぜこれが機能しないのか知りたいのですが?

Sudo cat .mplayer/config >> /home/griff/.mplayer/config
zsh: permission denied: /home/griff/.mplayer/config

Sudoは、任意のコマンドを実行できるように構成されています。制限はありません。

12
xenoterracide

mswbefore で回答されているように、これは>>実際のコマンド実行の前に発生し、昇格されたSudo特権では実行されません。

これを行う別の方法は、コマンド全体を別のbashコマンドシェルでラップすることです:

Sudo bash -c "cat .mplayer/config >> /home/griff/.mplayer/config"

これにより、Sudo特権で新しいbashシェルが起動し、コマンドの実行後にそれが閉じます。

19
Aron Rotteveel

コマンドに関係なく、コマンドの実行前にリダイレクト>>が常に実行されるため、これは失敗します。

この場合、シェルは(ルートではなく)ユーザーとして実行されており、ルートではなく現在の権限を使用して.../configファイルに追加しようとし、Sudoが実行される前に失敗します。

コマンドが意図することを行うための一般的なメタファーは次のとおりです。

Sudo tee --append /home/griff/.mplayer/config < .mplayer/config

.mplayer/configの読み取り権限があることを前提とします)。 /home/griff/...はSudoのルートコンテキストでteeによって開かれるため、そのファイルを書き込むためのルート権限を持っています。

.mplayer/configの内容を標準出力にコピーし、それをgriffのファイルに追加するので、私はこのアプローチに熱心ではありませんが、機能します。

10
msw

沿って

Sudoは任意のコマンドを実行できます

概念的には、Sudoは任意のコマンドを実行するように構成できますか、それとも、問題のシステムでおおまかに<user> <Host(s)>=<opt(s)> ALLとしてSudoを構成したということですか?

Sudo -u 0 cat ...を試しましたか?これにより、ユーザーIDが許可されていれば、Sudoは強制的にrootとしてコマンドを実行します。

Sudo -lは何を出力しますか?

0
Tok