### Summary

In the file `lib/ansible/plugins/action/__init__.py` there’s a link to document _Understanding privilege escalation: become_. The link has an anchor that refers to the section _Risks of becoming an unprivileged user_. However, there is an error in the code that makes the URL incorrect.

The correct URL is: https://docs.ansible.com/ansible-core/2.15/playbook_guide/playbooks_privilege_escalation.html#risks-of-becoming-an-unprivileged-user

The URL that is displayed to the user is: https://docs.ansible.com/ansible-core/2.15/playbook_guide/playbooks_privilege_escalation.html#risks-of-becoming-an-unprivileged-user#risks-of-becoming-an-unprivileged-user

The error is that the anchor part of the URL gets repeated.

### Suggested solution

`become_link` is currently defined like this:

`become_link = get_versioned_doclink('playbook_guide/playbooks_privilege_escalation.html#risks-of-becoming-an-unprivileged-user')`

One option could be to instead define it like this:

`become_link = get_versioned_doclink('playbook_guide/playbooks_privilege_escalation.html')`

I believe this would work since the anchor part (currently) gets added when `become_link` is referenced.

Another solution could be to omit the anchor part when referencing `become_link`. Example:

```
display.warning(
    'Using world-readable permissions for temporary files Ansible '
    'needs to create when becoming an unprivileged user. This may '
    'be insecure. For information on securing this, see %s'
    % become_link)
```

### Issue Type

Bug Report

### Component Name

lib

### Ansible Version

```console
$ ansible --version
ansible [core 2.15.3]
  config file = None
  configured module search path = ['/Users/carl.winback/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /opt/homebrew/Cellar/ansible/8.3.0/libexec/lib/python3.11/site-packages/ansible
  ansible collection location = /Users/carl.winback/.ansible/collections:/usr/share/ansible/collections
  executable location = /opt/homebrew/bin/ansible
  python version = 3.11.5 (main, Aug 24 2023, 15:09:45) [Clang 14.0.3 (clang-1403.0.22.14.1)] (/opt/homebrew/Cellar/ansible/8.3.0/libexec/bin/python)
  jinja version = 3.1.2
  libyaml = True
```


### Configuration

```console
# if using a version older than ansible-core 2.12 you should omit the '-t all'
$ ansible-config dump --only-changed -t all
CONFIG_FILE() = None
EDITOR(env: EDITOR) = emacsclient
```


### OS / Environment

macOS Ventura 13.5.1

### Steps to Reproduce

<!--- Paste example playbooks or commands between quotes below -->
```
- name: foo
  ansible.builtin.shell: echo "hello"
  become: yes
  become_user: johndoe
```


### Expected Results

I expected the documentation link to look like this: https://docs.ansible.com/ansible-core/2.15/playbook_guide/playbooks_privilege_escalation.html#risks-of-becoming-an-unprivileged-user

### Actual Results

```console
fatal: [foo.example.com]: FAILED! => {"msg": "Failed to set permissions on the temporary files Ansible needs to create when becoming an unprivileged user (rc: 1, err: chmod: invalid mode: ‘A+user:johndoe:rx:allow’\nTry 'chmod --help' for more information.\n}). For information on working around this, see https://docs.ansible.com/ansible-core/2.15/playbook_guide/playbooks_privilege_escalation.html#risks-of-becoming-an-unprivileged-user#risks-of-becoming-an-unprivileged-user"}
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
'''Remove a temporary path we created. '''
        if tmp_path is None and self._connection._shell.tmpdir:
            tmp_path = self._connection._shell.tmpdir
        if force or self._should_remove_tmp_path(tmp_path):
            cmd = self._connection._shell.remove(tmp_path, recurse=True)
            
            
            tmp_rm_res = self._low_level_execute_command(cmd, sudoable=False)
            if tmp_rm_res.get('rc', 0) != 0:
                display.warning('Error deleting remote temporary files (rc: %s, stderr: %s})'
                                % (tmp_rm_res.get('rc'), tmp_rm_res.get('stderr', 'No error string available.')))
            else:
                self._connection._shell.tmpdir = None
    def _transfer_file(self, local_path, remote_path):
        """
        Copy a file from the controller to a remote path
        :arg local_path: Path on controller to transfer
        :arg remote_path: Path on the remote system to transfer into
        .. warning::
            * When you use this function you likely want to use use fixup_perms2() on the
              remote_path to make sure that the remote file is readable when the user becomes
              a non-privileged user.
            * If you use fixup_perms2() on the file and copy or move the file into place, you will
              need to then remove filesystem acls on the file once it has been copied into place by
              the module.  See how the copy module implements this for help.
        """
        self._connection.put_file(local_path, remote_path)
        return remote_path
    def _transfer_data(self, remote_path, data):