问题描述
想知道如何给一个用户授权运行Ansible命令或特定标签。例如,用户希望通过SSH在Ansible服务器上的另一台服务器上使用用户’testusr’运行以下命令:ansible -playbook -i /path agent.yml --tags installagent
。用户想知道应该怎么做,是否可以限制’testusr’只能使用特定的标签。(用户在某处读到,应该给该用户授予sudo
权限。如果这是真的,如果我不想给sudo
权限,我应该怎么做?)
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
在Ansible中,没有工具可以授权用户仅执行选定的命令或标签。但是,可以使用sudo
来授权用户执行选择性命令。
以下是一些步骤来授权用户’testusr’执行特定标签的命令:
1. 在Ansible服务器上,使用visudo
命令编辑sudoers
文件:
sudo visudo
- 在
sudoers
文件中,添加以下行来授权用户’testusr’执行特定标签的命令:
testusr ALL=(ALL) NOPASSWD: /usr/bin/ansible-playbook -i /path agent.yml --tags installagent
这将允许用户’testusr’以无需密码的方式执行特定标签的命令。
请注意,这种方法需要用户’testusr’具有sudo
权限,并且可以在sudoers
文件中执行编辑操作。如果您不想给用户’testusr’授予sudo
权限,可以考虑使用其他方法。
方案2
使用其他方法来限制用户’testusr’只能使用特定标签可能需要更多的配置和管理。
除了使用sudo
之外,还可以考虑使用其他方法来限制用户’testusr’只能使用特定标签。这可能需要更多的配置和管理,但可以避免给用户’testusr’授予sudo
权限。
以下是一种可能的方法:
1. 在Ansible服务器上,创建一个新的用户组,例如ansible-users
:
sudo groupadd ansible-users
- 将用户’testusr’添加到
ansible-users
组中:
sudo usermod -a -G ansible-users testusr
- 在Ansible服务器上,创建一个新的目录,例如
/etc/ansible-tags
,并将其所有者设置为root
:
sudo mkdir /etc/ansible-tags
sudo chown root:root /etc/ansible-tags
- 在
/etc/ansible-tags
目录中,为每个允许用户’testusr’执行的标签创建一个文件。例如,如果用户’testusr’只能执行installagent
标签,可以创建一个名为installagent
的文件:
sudo touch /etc/ansible-tags/installagent
- 将文件的所有者设置为
root
,并将其权限设置为只允许所有者执行:
sudo chown root:root /etc/ansible-tags/installagent
sudo chmod 700 /etc/ansible-tags/installagent
- 在Ansible服务器上,为用户’testusr’创建一个新的SSH密钥对,并将公钥添加到
authorized_keys
文件中:
sudo su - testusr
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
- 在Ansible服务器上,将
/etc/ansible-tags
目录的权限设置为只允许用户’testusr’读取:
sudo chmod 750 /etc/ansible-tags
现在,用户’testusr’只能使用特定标签,并且无需sudo
权限即可执行Ansible命令。
请注意,这种方法需要更多的配置和管理,并且需要确保用户’testusr’无法修改/etc/ansible-tags
目录中的文件。