我正在尝试/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
直接管理的功能。