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

What is difference between using sudo in playbook and task?

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

- hosts: xxx
  roles:
     - my-role

而在tasks/main.yml中作用:

- name: install something
  sudo: yes
  apt: "name=something state=installed"

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

- hosts: xxx
  sudo: yes
  roles:
     - my-role

并将其从任务中删除:

- name: install something
  apt: "name=something state=installed"

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

您应该考虑最小权限原则。用户或进程应该具有完成指定任务所需的最低级别的权限。 例如,如果您需要做的只是将一个文件上传到您的主目录,那么以 root 用户身份执行就有点矫枉过正了。如果你想推送一个新的应用程序版本,请以网络用户而不是根用户的身份进行。

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