##### SUMMARY
When installing a collection, all files are created with mode 0600. This is caused by the way the collection .tar.gz file is extracted: https://github.com/ansible/ansible/blob/d3ec31f8d5683926aa6a05bb573d9929a6266fac/lib/ansible/galaxy/collection.py#L1076-L1090 The file created by `tempfile.NamedTemporaryFile()` seems to have mode `0600` and is simply moved to the final destination without a following `os.chmod`.

(See also this discussion: https://github.com/ansible-collections/community.general/pull/29#discussion_r396147440)

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
lib/ansible/galaxy/collection.py

##### ANSIBLE VERSION
```
2.9
2.10
```

local_collection = CollectionRequirement.from_path(b_search_path, False)
                            break
                    if local_collection is None:
                        raise AnsibleError(message='Collection %s is not installed in any of the collection paths.' % collection_name)
                    
                    try:
                        remote_collection = CollectionRequirement.from_name(collection_name, apis, collection_version, False, parent=None,
                                                                            allow_pre_release=allow_pre_release)
                    except AnsibleError as e:
                        if e.message == 'Failed to find collection %s:%s' % (collection[0], collection[1]):
                            raise AnsibleError('Failed to find remote collection %s:%s on any of the galaxy servers' % (collection[0], collection[1]))
                        raise
                    download_url = remote_collection.metadata.download_url
                    headers = {}
                    remote_collection.api._add_auth_token(headers, download_url, required=False)
                    b_temp_tar_path = _download_file(download_url, b_temp_path, None, validate_certs, headers=headers)
                    local_collection.verify(remote_collection, search_path, b_temp_tar_path)
                except AnsibleError as err:
                    if ignore_errors:
                        display.warning("Failed to verify collection %s but skipping due to --ignore-errors being set. "
                                        "Error: %s" % (collection[0], to_text(err)))
                    else:
                        raise
@contextmanager
def _tempdir():
    b_temp_path = tempfile.mkdtemp(dir=to_bytes(C.DEFAULT_LOCAL_TMP, errors='surrogate_or_strict'))
    yield b_temp_path
    shutil.rmtree(b_temp_path)
@contextmanager
def _tarfile_extract(tar, member):