`sudo echo“ bla” >> / etc / sysctl.conf`パーミッションが拒否されました


16

免責事項:私はsysadminスタッフの初心者です。

AWS EC2インスタンスでポートフォワーディングを設定しようとしていますが、これはコマンドラインで実行する必要があります。何も入力して編集したくないため、自動である必要があります(ビルドプロセスの一部です) )。

sudo echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

アクセス拒否

奇妙なことはsudosu特権を必要とするほとんどすべてのコマンドに(成功して)使用していることです。私が行う場合はsudo su、コマンドの前に(手でそれを試しsshセッション)、それは動作します。

この理由は?関与しない、sudo suまたは手動での編集が可能な解決策は?


ここで同じ問題:stackoverflow.com/questions/82256/…-また、本当に危険なことをしたい場合:sudo -i
MirroredFate

回答:


46

sudo出力リダイレクトに影響を与えるために使用することはできません。>および>>(そして、完全<を期すために)リダイレクトは、呼び出されたサブプロセスではなく、呼び出しシェルによって行われるため、呼び出しユーザーの特権で行われます。

どちらか

cp /etc/sysctl.conf /tmp/
echo "net.ipv4.ip_forward = 1" >> /tmp/sysctl.conf
sudo cp /tmp/sysctl.conf /etc/

または

sudo /bin/su -c "echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf"

15

このコマンドを使用する方が簡単な場合があります。

echo net.ipv4.ip_forward = 1 | sudo tee -a /etc/sysctl.conf

12

sudoルートとして、リダイレクトではなく、コマンドのみを実行します。すべてをrootとして実行するコマンドですべてをラップする必要があります。

sudo sh -c 'echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf'

3

このコマンドsudo echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confは、(ルートではない)結果を/etc/sysctl.confに書き込むものと解釈されますsudo echo "net.ipv4.ip_forward = 1"

走る

sudo -s 'echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf'

または

sudo su -c 'echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf'

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confルートとして実行します。


1
sudo sed -i "$ a <text>" <file>
  • -i :ファイルを適切に編集します。
  • $ a:最後の行にテキストを追加します

sedコマンドを使用すると、リダイレクトとパイプラインの手間が省けます。

あなたの場合: sudo sed -i "$ a net.ipv4.ip_forward = 1" /etc/sysctl.conf

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.