エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

sudoでリダイレクトしたときにPermission denied

経緯

sendmailの調査をしていて、sendmail.cf作成する必要があったのだが、sendmail.cfがroot権限だった。
リダイレクトをして上書きしようとしたときに、掲題のPermission deniedが発生して、sudo付けても回避できない状況に陥った。
悩んでいたが、解決策を探しながら試行錯誤することで、問題を解決することができたので、メモとして残すに至る。

やっていたこと

経緯にも書いた通り、「m4」マクロを利用して、sendmail.cf作成をしていた。
叩いたコマンドは、以下の通り

# sudo m4 sendmail.mc > sendmail.cf

対象ファイルがあるのは、/etc/mail 配下で、root権限が必要な場所。
rootのアカウントは使えないが、調査のために変える必要があった。
実行結果は、当然、Permission denied が発生する。

原因

sudo が効いているのは、m4だけで、リダイレクトの箇所は、使っているユーザの権限になってしまっているので、「Permission denied」になる。

なお、sendmail.mc/sendmail.cfファイルは、どれもrootユーザの所有物だった。

回避方法

主に2つ

  • sudo sh -c "コマンド > ファイル"
  • コマンド | sudo tee ファイル

わかりやすかったteeでの解決方法について記述する。

tee を使った解決

# sudo m4 sendmail.mc | sudo tee sendmail.cf

やっていることは、sudoでm4を実行し、結果をパイプでteeに送り、その内容をsendmail.cfに吐き出している。
リダイレクトは、権限関係ないってのがミソ

適当な戯言

sudoって、須藤って読んでるけど、読み方あってる?
須藤さんってよく言ってるわ

コマンドに"さん"づけしてるのって、もしかして俺だけ??

参考サイト

sudoでリダイレクトするとPermission deniedとなってしまう場合の解決方法 | server-memo.net

sudoでリダイレクトをしたいとき - Y's note