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.
const std::string& section,
    const std::string& name,
    bool ignore_default_section_config,
    bool get_chain_name)
{
    SettingsValue result;
    bool done = false; 
    MergeSettings(settings, section, name, [&](SettingsSpan span, Source source) {
        
        
        
        
        const bool never_ignore_negated_setting = span.last_negated();
        
        
        
        
        
        const bool reverse_precedence =
            (source == Source::CONFIG_FILE_NETWORK_SECTION || source == Source::CONFIG_FILE_DEFAULT_SECTION) &&
            !get_chain_name;