diff --git a/user_channel/channel_mgmt.cpp b/user_channel/channel_mgmt.cpp
index 6be7d9a..932795c 100644
--- a/user_channel/channel_mgmt.cpp
+++ b/user_channel/channel_mgmt.cpp
@@ -846,17 +846,33 @@
 int ChannelConfig::writeJsonFile(const std::string& configFile,
                                  const Json& jsonData)
 {
-    std::ofstream jsonFile(configFile);
-    if (!jsonFile.good())
+    const std::string tmpFile = configFile + "_tmp";
+    int fd = open(tmpFile.c_str(), O_CREAT | O_WRONLY | O_TRUNC | O_SYNC,
+                  S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+    if (fd < 0)
     {
-        log<level::ERR>("JSON file not found");
+        log<level::ERR>("Error in creating json file",
+                        entry("FILE_NAME = %s", tmpFile.c_str()));
+        return -EIO;
+    }
+    const auto& writeData = jsonData.dump();
+    if (write(fd, writeData.c_str(), writeData.size()) !=
+        static_cast<ssize_t>(writeData.size()))
+    {
+        close(fd);
+        log<level::ERR>("Error in writing configuration file",
+                        entry("FILE_NAME = %s", tmpFile.c_str()));
+        return -EIO;
+    }
+    close(fd);
+
+    if (std::rename(tmpFile.c_str(), configFile.c_str()) != 0)
+    {
+        log<level::ERR>("Error in renaming temporary data file",
+                        entry("FILE_NAME = %s", tmpFile.c_str()));
         return -EIO;
     }
 
-    // Write JSON to file
-    jsonFile << jsonData;
-
-    jsonFile.flush();
     return 0;
 }
 
diff --git a/user_channel/user_mgmt.cpp b/user_channel/user_mgmt.cpp
index 5ca2884..89ba142 100644
--- a/user_channel/user_mgmt.cpp
+++ b/user_channel/user_mgmt.cpp
@@ -1087,15 +1087,6 @@
     boost::interprocess::scoped_lock<boost::interprocess::named_recursive_mutex>
         userLock{*userMutex};
 
-    static std::string tmpFile{std::string(ipmiUserDataFile) + "_tmp"};
-    std::ofstream oUsrData(tmpFile, std::ios::out | std::ios::binary);
-    if (!oUsrData.good())
-    {
-        log<level::ERR>("Error in creating temporary IPMI user data file");
-        throw std::ios_base::failure(
-            "Error in creating temporary IPMI user data file");
-    }
-
     Json jsonUsersTbl = Json::array();
     // user index 0 is reserved, starts with 1
     for (size_t usrIndex = 1; usrIndex <= ipmiMaxUsers; ++usrIndex)
@@ -1130,9 +1121,25 @@
         jsonUsersTbl.push_back(jsonUserInfo);
     }
 
-    oUsrData << jsonUsersTbl;
-    oUsrData.flush();
-    oUsrData.close();
+    static std::string tmpFile{std::string(ipmiUserDataFile) + "_tmp"};
+    int fd = open(tmpFile.c_str(), O_CREAT | O_WRONLY | O_TRUNC | O_SYNC,
+                  S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+    if (fd < 0)
+    {
+        log<level::ERR>("Error in creating temporary IPMI user data file");
+        throw std::ios_base::failure(
+            "Error in creating temporary IPMI user data file");
+    }
+    const auto& writeStr = jsonUsersTbl.dump();
+    if (write(fd, writeStr.c_str(), writeStr.size()) !=
+        static_cast<ssize_t>(writeStr.size()))
+    {
+        close(fd);
+        log<level::ERR>("Error in writing temporary IPMI user data file");
+        throw std::ios_base::failure(
+            "Error in writing temporary IPMI user data file");
+    }
+    close(fd);
 
     if (std::rename(tmpFile.c_str(), ipmiUserDataFile) != 0)
     {
