在剧本和任务中使用sudo有什么区别?

kry*_*nio 0 sudo ansible ansible-playbook

如果我想使用例如apt安装一些东西我可以创建playbook:

- hosts: xxx
  roles:
     - my-role
Run Code Online (Sandbox Code Playgroud)

并且在角色的tasks/main.yml中:

- name: install something
  sudo: yes
  apt: "name=something state=installed"
Run Code Online (Sandbox Code Playgroud)

但是,我可以在剧本中添加sudo:

- hosts: xxx
  sudo: yes
  roles:
     - my-role
Run Code Online (Sandbox Code Playgroud)

并从任务中删除它:

- name: install something
  apt: "name=something state=installed"
Run Code Online (Sandbox Code Playgroud)

两种解决方案都有效,但哪种解决方案更好?这个解决方案有区别吗?优点?缺点?

Mxx*_*Mxx 6

您应该考虑最小特权原则.用户或进程应具有完成指定任务所需的最低权限级别.例如,如果您只需要将文件上传到主目录中,那么以root身份执行操作就是一种过度杀伤力.如果要推送新的应用程序版本,请以Web用户而不是root用户身份执行.

当您sudo:在playbook级别指定时,下面的所有任务都将在该(可能不必要的)权限级别运行.而如果您在task:级别指定它,则只有该特定任务将以root身份运行.

  • 我可能会补充的是,一个案例可能有10个任务中有9个需要升级的权限,在这种情况下,重构到剧本级别可能会减少重复性.您可能还想查看sudo上的become和become_user的语法更改.http://docs.ansible.com/ansible/become.html (2认同)