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

tut*_*uca 41 sudo authentication

...但仍然需要需要管理员权限的应用程序?

为了允许以下内容:

$ 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!
Run Code Online (Sandbox Code Playgroud)

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

任何的想法?

Mar*_*kal 53

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

在没有密码的情况下授予所有权限以 root 身份运行是一个坏主意,因此只允许通过您需要的一个可执行文件(apache2ctl);将以下内容附加到文件的最底部:

YOURNAME ALL = NOPASSWD: /usr/bin/apache2ctl
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 请注意,`%YOURNAME` 将授予以您的用户命名的 _group_ 的权限,这通常不是问题,因为每个普通用户在 Ubuntu 系统上都有一个类似名称的组。要向您的用户授予权限,请指定不带 % 的“YOURNAME”。 (3认同)

Chr*_*ris 25

这个问题的真正答案可能很复杂,因为 sudo非常强大,并且可以配置为做很酷的事情。这在文档中有详尽的解释。

简短的回答是sudo visudo在终端中运行。如果这是您第一次运行 visudo,它会询问您喜欢哪种编辑器。nano通常被认为是最容易使用的,但请选择您最熟悉/最熟悉的编辑器。您需要决定要授予谁访问权限;它可能ALL适用于每个人(一个非常糟糕的主意)、用户或系统组。组以 % 符号为前缀。例如,如果您想为steroid_users组中的每个人授予root 权限而不需要所有命令的密码,您可以添加:

%steroid_users ALL=(ALL) NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)

到文件末尾,退出并保存文件。如果一切顺利,并且您是 steroid_users 组的成员,则sudo *some-command*无需输入密码即可发布。

请记住,任何在您登录时有权访问您终端的人——或者如果您为基于密钥的身份验证设置了 ssh,或者(甚至更糟)启用了无密码会话登录——完整且不受限制地访问您的整个系统。如果您的系统上有多个用户,或者这是一个文件服务器,则所有用户文件都可能处于危险之中,因为 root 可以做任何事情!

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

我希望这有帮助。


小智 5

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

%admin ALL=(ALL) NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)

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