Linuxでsudoを使用して出力リダイレクトの許可を与える

Linuxでsudoを使用して出力リダイレクトの許可を与える

の仮想ファイルに値「1」を入れようとする/procと、 を使用しているにもかかわらず「アクセス許可が拒否されました」というメッセージが表示されますsudo

name@comp-name:/etc/dhcp$ sudo echo 1 > /proc/sys/net/ipv4/ip_forward 
bash: /proc/sys/net/ipv4/ip_forward: Permission denied

このコマンドはルート権限で実行されると思いますechoが、リダイレクト ( >) はルート権限なしで実行される可能性がありますか? 両方をルート権限で実行できますか?

答え1

この場合、おっしゃるとおり、sudoは にのみ適用されます。echo

代わりに、次のように昇格シェルを実行することもできます。

sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'

あるいはもっと短く:

sudo -s 'echo 1 > /proc/sys/net/ipv4/ip_forward'

答え2

推奨される方法はプログラムにパイプすることですtee

echo 1 | tee /proc/sys/net/ipv4/ip_forward

答え3

問題は、リダイレクトが ではなく、シェルによって行われることですsudo。通常、実行するプログラムはexec()リダイレクト後に ed されます。ファイルへの書き込み権限がないため、リダイレクトは失敗します。前述のように、推奨される方法は を使用することですtee

echo stuff | sudo tee /some/file/path

関連情報