経緯
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