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.
{
    values.clear();
    errors.clear();
    fsbridge::ifstream file;
    file.open(path);
    if (!file.is_open()) return true; 
    SettingsValue in;
    if (!in.read(std::string{std::istreambuf_iterator<char>(file), std::istreambuf_iterator<char>()})) {
        errors.emplace_back(strprintf("Unable to parse settings file %s", path.string()));
        return false;
    }
    if (file.fail()) {
        errors.emplace_back(strprintf("Failed reading settings file %s", path.string()));
        return false;
    }
    file.close(); 
    if (!in.isObject()) {
        errors.emplace_back(strprintf("Found non-object value %s in settings file %s", in.write(), path.string()));
        return false;