つよつよエンジニアになりたい

つよつよエンジニアになりたいエンジニアが日々の学びや気づきをアウトプットしていきます

書き込み権限のないフォルダでリダイレクトでファイル作成する

Ubuntuで、ufeを使用して国外からのアクセスを制限するルールをシェルスクリプトで作成し、新しいファイルをリダイレクトで作成しようとした際にパーミッションエラーが発生しました。

sh drop_except_jp.sh > /etc/ufw/after.init.drop_except_jp
# -bash: /etc/ufw/after.init.drop_except_jp: 許可がありません

sudoを使ってroot権限で実行してみたのですが、解決しませんでした。

sudo sh drop_except_jp.sh > /etc/ufw/after.init.drop_except_jp

原因と解決策

原因は、sh drop_except_jp.sh 以降のコマンドが通常ユーザで実行されていたためでした。 teeコマンドを使用して/etc/ufw/after.init.drop_except_jp の部分もrootユーザで実行することで解決しました。

sudo sh drop_except_jp.sh | sudo tee /etc/ufw/after.init.drop_except_jp

標準出力させたくない場合は、以下のように/dev/nullにリダイレクトさせます。

sudo sh drop_except_jp.sh | sudo tee /etc/ufw/after.init.drop_except_jp > /dev/null

これによりパーミッションエラーが解消され、シェルスクリプトが正常に動作するようになりました。