diff --git a/mount/redox/resource.rs b/mount/redox/resource.rs
index da7d230fbba3262d115549327cc5bfd6ad9c4c67..cae82066a3df29046c8f81e1028dbe8aea45dcb2 100644
--- a/mount/redox/resource.rs
+++ b/mount/redox/resource.rs
@@ -131,15 +131,17 @@ pub struct FileResource {
     block: u64,
     flags: usize,
     seek: u64,
+    uid: u32,
 }
 
 impl FileResource {
-    pub fn new(path: String, block: u64, flags: usize, seek: u64) -> FileResource {
+    pub fn new(path: String, block: u64, flags: usize, seek: u64, uid: u32) -> FileResource {
         FileResource {
             path: path,
             block: block,
             flags: flags,
             seek: seek,
+            uid: uid,
         }
     }
 }
@@ -151,6 +153,7 @@ impl Resource for FileResource {
             block: self.block,
             flags: self.flags,
             seek: self.seek,
+            uid: self.uid,
         }))
     }
 
@@ -246,9 +249,10 @@ impl Resource for FileResource {
     }
 
     fn utimens(&mut self, times: &[TimeSpec], fs: &mut FileSystem) -> Result<usize> {
-        if self.flags & O_ACCMODE == O_RDWR || self.flags & O_ACCMODE == O_WRONLY {
+        let mut node = fs.node(self.block)?;
+
+        if node.1.uid == self.uid || self.uid == 0 {
             if let Some(mtime) = times.get(1) {
-                let mut node = fs.node(self.block)?;
 
                 node.1.mtime = mtime.tv_sec as u64;
                 node.1.mtime_nsec = mtime.tv_nsec as u32;
diff --git a/mount/redox/scheme.rs b/mount/redox/scheme.rs
index ca0362e4ae74facf33c0e4f5fb81345b3e29cccb..b77da3d2a3bbac31e70083e119346278621caabf 100644
--- a/mount/redox/scheme.rs
+++ b/mount/redox/scheme.rs
@@ -253,7 +253,7 @@ impl Scheme for FileScheme {
                     0
                 };
 
-                Box::new(FileResource::new(path.to_string(), node.0, flags, seek))
+                Box::new(FileResource::new(path.to_string(), node.0, flags, seek, uid))
             },
             None => if flags & O_CREAT == O_CREAT {
                 let mut last_part = String::new();
@@ -293,7 +293,7 @@ impl Scheme for FileScheme {
                                 0
                             };
 
-                            Box::new(FileResource::new(path.to_string(), node.0, flags, seek))
+                            Box::new(FileResource::new(path.to_string(), node.0, flags, seek, uid))
                         }
                     } else {
                         return Err(Error::new(EPERM));