diff --git a/src/main.rs b/src/main.rs
index c877c01c8758b7b7ea84476a017c2349ff2e63c3..126674d1127d3b9e8745c3f183df472831d74b65 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -303,6 +303,10 @@ async fn check_data_folder() {
         }
         exit(1);
     }
+    if !path.is_dir() {
+        error!("Data folder '{}' is not a directory.", data_folder);
+        exit(1);
+    }
 
     if is_running_in_docker()
         && std::env::var("I_REALLY_WANT_VOLATILE_STORAGE").is_err()
diff --git a/src/util.rs b/src/util.rs
index 90bf7a73eb1a64d17be9d3cbc30323f1af8832b9..60e38fefd1a3ec93165341257012bd5a1a28c2cd 100644
--- a/src/util.rs
+++ b/src/util.rs
@@ -1,7 +1,7 @@
 //
 // Web Headers and caching
 //
-use std::io::Cursor;
+use std::io::{Cursor, ErrorKind};
 
 use rocket::{
     fairing::{Fairing, Info, Kind},
@@ -326,7 +326,16 @@ pub fn file_exists(path: &str) -> bool {
 
 pub fn write_file(path: &str, content: &[u8]) -> Result<(), crate::error::Error> {
     use std::io::Write;
-    let mut f = File::create(path)?;
+    let mut f = match File::create(path) {
+        Ok(file) => file,
+        Err(e) => {
+            if e.kind() == ErrorKind::PermissionDenied {
+                error!("Can't create '{}': Permission denied", path);
+            }
+            return Err(From::from(e));
+        }
+    };
+
     f.write_all(content)?;
     f.flush()?;
     Ok(())