在剧本和任务中使用 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。
如果我想使用例如 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。