如何在没有密码的情况下使用 sudo 运行应用程序?

如何在没有密码的情况下使用 sudo 运行应用程序?

...但对于需要管理员权限的应用程序来说仍然需要吗?

为了允许以下操作:

$ apache2ctl restart
httpd not running, trying to start
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs

$ sudo !!
sudo apache2ctl restart             #no password asked
$                                   #works!

作为参考,我在亚马逊的 e3 实例上看到了这种设置

任何想法?

答案1

您需要编辑 sudoers 文件。请注意,成功会使您的系统不太安全,失败会破坏 sudo。务必使用 编辑 sudoers 文件sudo visudo,因为 visudo 会检查错误,如果发现错误,则不会保存文件。

授予所有程序以 root 身份运行而不设置密码的权限是个坏主意,因此只需让您所需的一个可执行文件(apache2ctl)通过即可;将以下内容附加到文件的最底部:

YOURNAME ALL = NOPASSWD: /usr/bin/apache2ctl

如果您愿意,您可以使用“ALL”替换可执行文件的路径,从而为您提供完全无密码的 sudo。

将 YOURNAME 替换为您的用户名,然后按Ctrl+X保存并退出。如果发生错误,系统将提示您还原、编辑或保存。

确定使用可执行文件的完整路径:
即,/usr/bin/apache2ctl而不仅仅是apache2ctl。这很重要,因为如果不明确说明路径,sudo 将允许用户当前路径上名为 apachectl 的任何程序以 root 身份运行。

答案2

这个问题的真正答案可能很复杂,因为 sudo 是非常功能强大,并且可以配置为执行很酷的事情。这在文档

简而言之,sudo visudo在终端中运行。如果这是您第一次运行 visudo,它会询问您喜欢哪个编辑器。纳米通常被认为是最容易使用的,但请选择您最熟悉/最熟悉的编辑器。您需要决定要授予谁访问权限;它可能ALL适用于所有人(A非常馊主意)、用户或系统组。组以 % 符号为前缀。例如,如果您希望让组中的每个人都拥有steroid_usersroot 权限,而无需输入所有命令的密码,则需要添加:

%steroid_users ALL=(ALL) NOPASSWD: ALL

到文件末尾,退出并保存文件。如果一切顺利,并且您是 steroid_users 组的成员,那么您将能够发出sudo *some-command*而不需要输入密码。

请记住,在您登录时有权访问您的终端的任何人 - 或者如果您已为基于密钥的身份验证设置了 ssh,或者(更糟糕)已启用免密码会话登录 - 完全、不受限制地访问您的全部的系统。如果您的系统上有多个用户,或者这是文件服务器,则所有用户文件都可能面临风险,因为 root 可以执行任何事物!

此外,如果你犯了错误,visudo 将输出错误消息,而不会将更改保存到文件中。这将有助于防止彻底破坏 sudo。你真的应该读一下文档。Sudo 旨在为用户提供足够的访问权限来完成他们的工作,而无需暴露整个系统。仅为某些命令提供免密码访问权限可能会很有利。

我希望这有帮助。

答案3

您需要编辑“/etc/sudoers”文件(有“visudo”命令可用),在您的用户或组允许的命令列表之前添加 NOPASSWD。如果您的用户在“管理员”组中 - 您需要执行以下操作:

%admin ALL=(ALL) NOPASSWD: ALL

查看https://help.ubuntu.com/community/Sudoers, 顺便提一句。

答案4

sudo visudo
%<GROUP> ALL = NOPASSWD: apache2ctl

或者

sudo visudo
%<GROUP> ALL = NOPASSWD: /etc/init.d/apache2

我想这应该可以。

但删除 sudo 密码时要小心。

相关内容