Node.js でfsを利用したファイル作成時の権限について、ハマってしまったので備忘のためにまとめました.

1.問題

fs.writeFileやfs.mkdirを実行した際の権限がうまく設定出来ませんでした.

例えば以下の処理ではwriteFileをmode指定なしで実行しています.

公式ドキュメントのAPI説明を見ると次のような記載があり、0666が設定されるはずです.

  • mode Number default = 438 (aka 0666 in Octal)

しかしながら、0644のファイルしか作成することが出来ませんでした.

明示的にmodeに設定しても(optionsに{ mode: 0666} を渡す)、効果はありませんでした.

2.原因

Linuxのumask設定が原因でした.

umask は、新しくファイルを作成する際に、許可*しない*ビットを示すものです。

touch等を利用してファイルを作成すると、デフォルトでは644 (rw-r–r–)の権限で作成されるのはこの仕組みのおかげです.

これが原因でファイルのpermissionがmode指定のものとは異なってしまっていました.

 

3.解決策

最初にumaskを0で初期化する=マスクが掛からない状態にすることで解決できます.

以下のコードをファイル処理する前に実行してあげることで、mode指定通りの権限付与ができました.

 

Leave a Reply

Your email address will not be published. Required fields are marked *