问题描述
…但仍需要需要管理员权限的应用程序?
为了允许以下内容:
$ 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实例上看到了这个设置
任何的想法?
最佳解决思路
您需要编辑sudoers文件。请注意,成功会给您一个不太安全的系统,失败会破坏sudo。总是使用sudo visudo
编辑sudoers文件,因为visudo会检查错误,如果找不到文件,则不会保存文件。
在没有密码的情况下以root身份运行所有权限是一个坏主意,所以只需通过你需要的一个可执行文件(apache2ctl);将以下内容附加到文件的最底部:
YOURNAME ALL = NOPASSWD: /usr/bin/apache2ctl
如果您愿意,可以使用”ALL”替换可执行文件的路径,为您提供完整的无密码sudo。
用您的用户名替换YOURNAME并按Ctrl
+ X
保存并退出。如果发生错误,它将提供恢复,编辑或保存。
确保使用可执行文件的完整路径:即。 /usr/bin/apache2ctl
而不仅仅是apache2ctl
。这很重要,因为如果没有明确说明路径sudo将允许用户当前路径上任何名为apachectl的程序以root身份运行。
次佳解决思路
这个问题的真正答案可能很复杂,因为sudo非常强大,可以配置为做很酷的事情。这在documentation中有详细解释。
简短的回答是在终端中运行sudo visudo
。如果这是您第一次运行visudo,它会询问您喜欢哪个编辑器。 nano通常被认为是最容易使用的,但选择你最熟悉/熟悉的编辑器。您需要决定要授予谁的权限;对于每个人(一个非常糟糕的主意),用户或系统组,它可能是ALL
。组以%符号为前缀。例如,如果您希望为steroid_users
组中的所有人提供root权限,而无需为要添加的所有命令设置密码:
%steroid_users ALL=(ALL) NOPASSWD: ALL
到文件末尾,退出并保存文件。如果一切顺利,并且您是steroid_users组的成员,您将能够发出sudo *some-command*
而无需输入密码。
请记住,在您登录时有权访问终端的任何人 – 或者如果您为key-based身份验证设置了ssh,或者(甚至更糟)已启用无密码会话登录 – 完整且不受限制地访问整个系统。如果您的系统上有多个用户,或者这是一个文件服务器,则所有用户文件都可能存在风险,因为root可以执行任何操作!
此外,如果您犯了错误,visudo将输出错误消息而不保存对文件的更改。这有助于防止完全破坏sudo。你应该真正阅读documentation。 Sudo旨在为用户提供足够的访问权限来完成他们的工作,而无需暴露整个系统。仅为某些命令提供无密码访问可能是有利的。
我希望这有帮助。
第三种解决思路
您需要编辑’/etc/sudoers’文件(有’visudo’命令。)在您的用户或组的允许命令列表之前添加NOPASSWD。如果您的用户位于’admin’组中 – 您需要以下内容:
%admin ALL=(ALL) NOPASSWD: ALL
检查https://help.ubuntu.com/community/Sudoers,顺便说一句。
第四种思路
您可以将nopasswd标志添加到用户列表,但这并不能消除所有密码问题。只会询问第一个。
-
编辑sudoers:
sudo visudo
(你必须使用sudo。这是一个管理文件。) -
在管理行之后(最后)添加带有nopasswd标志的用户。例如:
cyrex ALL = NOPASSWD: ALL
或cyrex ALL = (ALL) NOPASSWD: ALL
第五种思路
sudo visudo
%<GROUP> ALL = NOPASSWD: apache2ctl
要么
sudo visudo
%<GROUP> ALL = NOPASSWD: /etc/init.d/apache2
我想这会做到这一点。
但要小心删除sudo的密码。