### 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
module_compression=C.config.get_config_value('DEFAULT_MODULE_COMPRESSION',
                                                                                                                         variables=task_vars),
                                                                            async_timeout=self._task.async_val,
                                                                            environment=final_environment,
                                                                            remote_is_local=bool(getattr(self._connection, '_remote_is_local', False)),
                                                                            **become_kwargs)
                break
            except InterpreterDiscoveryRequiredError as idre:
                self._discovered_interpreter = AnsibleUnsafeText(discover_interpreter(
                    action=self,
                    interpreter_name=idre.interpreter_name,
                    discovery_mode=idre.discovery_mode,
                    task_vars=use_vars))
                
                
                discovered_key = 'discovered_interpreter_%s' % idre.interpreter_name
                
                use_vars['ansible_facts'][discovered_key] = self._discovered_interpreter
                
                
                
                if not self._task.delegate_to or self._task.delegate_facts:
                    
                    task_vars['ansible_facts'][discovered_key] = self._discovered_interpreter
                    
                    self._discovered_interpreter_key = discovered_key
                else:
                    task_vars['ansible_delegated_vars'][self._task.delegate_to]['ansible_facts'][discovered_key] = self._discovered_interpreter
        return (module_style, module_shebang, module_data, module_path)
    def _compute_environment_string(self, raw_environment_out=None):