web-dev-qa-db-ja.com

`sudo echo" bla ">> / etc / sysctl.conf`権限が拒否されました

免責事項:私はシステム管理者の初心者です。

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

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

アクセス拒否

奇妙なことに、Sudo特権を必要とするほとんどすべてのコマンドでsuを(成功して)使用しています。私が行った場合 Sudo suコマンドの前に(sshセッションで手動で試してみてください)、それが機能します。

この背後にある理由は?含まれない可能な解決策Sudo suまたは手動で編集しますか?

17
bevacqua

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"
47
MadHatter

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

echo net.ipv4.ip_forward = 1 | Sudo tee -a /etc/sysctl.conf
17
Random832

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

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

コマンドSudo echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confは次のように解釈されますyo(nonroot)Sudo echo "net.ipv4.ip_forward = 1"の結果を/etc/sysctl.confに書き込みます。

走る

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

または

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

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

4
jdh8
Sudo sed -i "$ a <text>" <file>
  • -i:ファイルを編集します。
  • $ a:最終行にテキストを追加します

sedコマンドを使用すると、リダイレクトやパイプラインの煩わしさを回避できます。

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

2
forzagreen