Issue was reported by @Talkless https://github.com/bitcoin-core/gui/pull/379#issuecomment-888537173

Happens due to this line in `ReadSettings`:

https://github.com/bitcoin/bitcoin/blob/4b1fb50def0dea0cd320bc43c12d9a12edde0390/src/util/settings.cpp#L65

which treats a nonexisting file the same as an inaccessible file. It should be changed to treat any settings file that exists and is unreadable as an error.
#include <util/settings.h>
#include <tinyformat.h>
#include <univalue.h>
namespace util {
namespace {
enum class Source {
   FORCED,
   COMMAND_LINE,
   RW_SETTINGS,
   CONFIG_FILE_NETWORK_SECTION,
   CONFIG_FILE_DEFAULT_SECTION
};
template <typename Fn>
static void MergeSettings(const Settings& settings, const std::string& section, const std::string& name, Fn&& fn)