我的系统上有两个用户:itsadok
,我的主要用户,以及elasticsearch
,用于运行 ElasticSearch 的具有不同 ulimit 的用户。
我希望能够以次要用户身份运行东西,而不必每次都提示输入密码。
我添加了以下行/etc/sudoers
:
itsadok ALL=(elasticsearch:elasticsearch) NOPASSWD: ALL
根据我的理解,这应该允许用户 itsadok 在任何主机上以 (用户或组) elasticsearch 的身份运行任何命令,而无需密码。但是,尝试类似
itsadok@dev001$ sudo -u elasticsearch ls
提示我输入密码。重新启动机器没有帮助。
我究竟做错了什么?
更新:
事实证明,行的顺序sudoers
很重要。我将行放在“用户权限规范”下,这听起来是正确的位置,但%admin
后面的组的行覆盖了设置。
将同一行放在 sudoers 文件末尾即可解决该问题。
答案1
按着这些次序:
- 编辑 sudoers 文件(该文件位于 /etc/sudoers.d/file_name 中)
sudo visudo -f /etc/sudoers
- 在文件末尾添加行
usernameusedforlogin ALL=(ALL) NOPASSWD:ALL
- 保存存档
esc :wq!
答案2
评论中的修订答案:如果您将指令放在下面,它们将被忽略。将该行移动到或组定义#includedir
旁边,或将其放在单独的文件中。sudo
admin
/etc/sudoers.d/
答案3
或者,您可以使用 python pudo 包:https://pypi.org/project/pudo/1.0.0/
安装:
user$ sudo -H pip3 install pudo # you can install using pip2 also
下面是在 root 权限下使用 Python 自动化运行 cmd 的代码片段:
user$ python3 # or python2
>>> import pudo
>>> (ret, out) = pudo.run(('ls', '/root')) # or pudo.run('ls /root')
>>> print(ret)
>>> 0
>>> print(out)
>>> b'Desktop\nDownloads\nPictures\nMusic\n'
下面是在 root 权限下运行 cmd 的示例
user$ pudo ls /root
Desktop Downloads Pictures Music