通过 ansible 添加新行到 /etc/sudoers

通过 ansible 添加新行到 /etc/sudoers

我正在尝试/etc/sudoers通过 ansible 添加新行到文件中。但还是不行,请问是什么问题,可以帮忙吗?

我尝试过visudo -c命令以使sudoers文件可写。

除了从

sudo echo "test ALL=(ALL)       NOPASSWD: ALL" >> /etc/sudoers

所有线路都有效。

这些是我执行的sh文件,没有一个起作用。

 sudo adduser test
 sudo echo "******" | passwd --stdin test
 sudo cp /etc/sudoers /etc/sudoers_20180418
 sudo echo "test ALL=(ALL)       NOPASSWD: ALL" >> /etc/sudoers
 sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config20180418
 sudo sed -i 's/AllowUsers/AllowUsers test/g' /etc/ssh/sshd_config

.sh 文件

 sudo adduser test
 sudo echo "******" | passwd --stdin test
 sudo cp /etc/sudoers /etc/sudoers_20180418
 visudo -c
 sudo echo "test ALL=(ALL)       NOPASSWD: ALL" >> /etc/sudoers
 sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config20180418
 sudo sed -i 's/AllowUsers/AllowUsers test/g' /etc/ssh/sshd_config

答案1

问题可能是命令行

sudo echo "test ALL=(ALL)       NOPASSWD: ALL" >> /etc/sudoers

将重定向命令的输出sudo,使用原始用户的身份执行重定向 - 由于您需要 root 访问权限才能写入/etc/sudoers,因此这将失败。该echo命令以 root 身份运行,但它不执行重定向 - 这已经由准备sudo echo ...执行命令行的 shell 进行了设置。由于您在这里使用 sudo,我怀疑 shell 没有以 root 身份运行。

您可以将其改写为:

echo "test ALL=(ALL)       NOPASSWD: ALL" | sudo tee -a /etc/sudoers >/dev/null

在此版本中:

  • echo命令以原始用户身份执行
  • 重定向到 /dev/null 是作为原始用户执行的
  • tee -a <filename>将管道输入的副本作为根附加到指定文件,这正是您需要发生的事情。

答案2

RHEL 具有/etc/sudoers.d目录,其中的文件作为/etc/sudoers.考虑在其中添加文件片段,而不是编辑/etc/sudoers自身:

echo "test ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/ansible

或者,您可能会发现 Ansible 具有sudoers直接管理的功能。

相关内容