
の仮想ファイルに値「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