作为标题,在 root 上运行所有内容似乎并不安全,尤其是当 playbook 服务器被黑客入侵并且它可以 ssh 到 Ansible 主机列表上的任何机器时,这个安全问题的解决方案是什么?
我专门为ansible的使用创建了一个用户,它可以使用无密码的sudo,但没有定义密码,需要ssh密钥才能登录。通过这种方式,该帐户具有特权,但如果没有 ssh 密钥,则无法远程访问。
或者,您可以使用密码创建 ansible 帐户,并且每次运行 ansible 时都需要 sudo 密码。
您可以像这样创建这样的用户:
# Create user
adduser ansible
# Lock password preventing password login (optional)
passwd -l ansible
# Expire any existing password, preventing password login (optional)
chage -E 0 ansible
# Ensure ansible can sudo without a password (optional)
echo "ansible ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible
# Create ansible's .ssh directory
mkdir -m 700 /home/ansible/.ssh
# Insert your desired SSH keys here
echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB7/BSV84tCEQ8SSwygqjEVPFcH+G2JSFEdyuJI7A2iG ansible-runner@example.com" > /home/ansible/.ssh/authorized_keys
# Correct ownership of newly created files and directories
chown -R ansible.ansible /home/ansible/.ssh
Run Code Online (Sandbox Code Playgroud)
根据需要调整它以适应用于启动新服务器实例的任何过程(kickstart、preseed、cloud-init 等等)。
然后我设置了无ansible.cfg
密码 sudo:
[defaults]
remote_user = ansible
[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = False
Run Code Online (Sandbox Code Playgroud)
如果您希望需要 sudo 密码来运行剧本,您可以简单地become_ask_pass = True
在 中设置ansible.cfg
,而不是/etc/sudoers.d/ansible
如上所示进行创建。