diff --git a/src/fileutils.cpp b/src/fileutils.cpp
index 7b4f7d985b156cb6d8e877e5cdcf38f445f6df20..6d6f21209a7653c097cfbc9b35b96acf0d579209 100644
--- a/src/fileutils.cpp
+++ b/src/fileutils.cpp
@@ -234,7 +234,7 @@ loadFile(const std::string& path)
 }
 
 void
-saveFile(const std::string& path, const std::vector<uint8_t>& data)
+saveFile(const std::string& path, const std::vector<uint8_t>& data, mode_t mode)
 {
     std::ofstream file(path, std::ios::trunc | std::ios::binary);
     if (!file.is_open()) {
@@ -242,6 +242,9 @@ saveFile(const std::string& path, const std::vector<uint8_t>& data)
         return;
     }
     file.write((char*)data.data(), data.size());
+#ifndef _WIN32
+    chmod(path.c_str(), mode);
+#endif
 }
 
 static size_t
diff --git a/src/fileutils.h b/src/fileutils.h
index bd8fc64f0e2aa4ce5e7730e12717f5b2099bc474..df16ff56bc0de50097f976ebce95772fdc414809 100644
--- a/src/fileutils.h
+++ b/src/fileutils.h
@@ -45,10 +45,12 @@
 
 
 #ifndef _WIN32
+#include <sys/stat.h>           // mode_t
 #define DIR_SEPARATOR_STR "/"   // Directory separator char
-#define DIR_SEPARATOR_CH  '/'  // Directory separator string
+#define DIR_SEPARATOR_CH  '/'   // Directory separator string
 #else
-#define DIR_SEPARATOR_STR "\\"   // Directory separator char
+#define mode_t unsigned
+#define DIR_SEPARATOR_STR "\\"  // Directory separator char
 #define DIR_SEPARATOR_CH  '\\'  // Directory separator string
 #endif
 
@@ -77,7 +79,7 @@ namespace ring { namespace fileutils {
     std::vector<std::string> readDirectory(const std::string &dir);
 
     std::vector<uint8_t> loadFile(const std::string& path);
-    void saveFile(const std::string& path, const std::vector<uint8_t>& data);
+    void saveFile(const std::string& path, const std::vector<uint8_t>& data, mode_t mode=755);
 
     struct FileHandle {
         int fd;