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


40

...但是对于需要管理员特权的应用程序仍是必需的?

为了允许以下内容:

$ 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实例上看到了此设置

任何想法?


这是一个很棒的论坛教程,详细介绍了创建一个单独的文件来指定您常用的程序。出于安全原因,这是一个好主意。
Todd Partridge'Gen2ly'2012年

Answers:


51

您需要编辑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身份运行。


3
请注意,这%YOURNAME将授予用户名称的权限,这通常不是问题,因为每个普通用户在Ubuntu系统上都有一个名称相同的组。要将权限授予用户,请指定YOURNAME不带%。
丹尼尔·沃纳

有没有办法更具重组性?(仅可执行文件的某些功能)
3pic

1
旧的职位,但我肯定会通过限制在sudoers'进入到特定的主机名(如果可能)完成这一答案,要么给定的参数O操作完全没有争论(下apache2ctl),像这样: YOURNAME YOUR-HOSTNAME = NOPASSWD: /usr/bin/apache2ctl <specific arg | "">。---在所有情况下man 5 sudoers都是参考。
Cbhihe '16

25

这个问题的真正答案可能很复杂,因为sudo 非常强大,并且可以配置为做一些很酷的事情。文档中对此进行了详细说明。

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

%steroid_users ALL=(ALL) NOPASSWD: ALL

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

请记住,在您登录时有权访问您的终端的任何人-或您已经为基于密钥的身份验证设置了ssh,或者(甚至更糟)启用了无密码会话登录-可以完全无限制地访问您的整个终端系统。如果您的系统上有多个用户,或者这是一个文件服务器,则所有用户文件都将受到威胁,因为root可以执行任何操作!

另外,如果输入有误,visudo将输出并显示错误消息,并且不会将更改保存到文件中。这将有助于防止完全破坏sudo。您应该真正阅读文档。Sudo旨在为用户提供足够的访问权限来执行其工作,而无需公开整个系统。只为某些命令提供无密码访问权限可能是有利的。

我希望这有帮助。


行得通,我接受了这一点,然后使用了来自askubuntu.com/questions/192050/…的 “ sudo服务sudo重新启动”,并且能够在我的活动Ubuntu会话中使用所有这些。太棒了!
Patrick

5

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

%admin ALL=(ALL) NOPASSWD: ALL

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


3

您可以将nopasswd标志添加到用户列表,但这不能消除所有密码询问的问题。仅会询问第一个。

  1. 编辑sudoers :(sudo visudo您必须使用sudo。这是一个管理文件。)
  2. 在管理行之后(最后),向您的用户添加nopasswd标志。例如:
    cyrex ALL = NOPASSWD: ALLcyrex ALL = (ALL) NOPASSWD: ALL

2
sudo visudo
%<GROUP> ALL = NOPASSWD: apache2ctl

要么

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

我想这会做到的。

但是请小心删除sudo的密码。


2
出于安全原因,您应该在第一个示例中指定绝对路径-不道德的用户可以更改$ PATH并使用不合格的命令名来窃取root用户访问权限。
bgvaughan 2011年

0

现在为简单的答案! 没有办法弄乱任何东西或弄乱您的安装。

只需输入几次密码,便无需再次输入密码!这将允许您将本地管理员帐户添加到组“ root”,然后从模板中取消注释该注释,该模板将允许整个组“ root”超级用户特权。您可以在本文的后半部分阅读我针对此过程的安全问题/解决方案。

%username&是您的用户名的全局变量(将其替换为所需的用户名)

步骤1:打开终端窗口,然后输入“ sudo usermod -a -G root %username%

步骤2:然后将其复制/粘贴...

sudo sed -i 's/# auth       sufficient pam_wheel.so trust/auth       sufficient pam_wheel.so trust/g' /etc/pam.d/su`

步骤2或输入

sudo nano /etc/pam.d/su`

转到第19行,并删除前面的“#” # auth sufficient pam_wheel.so trust(对于某些情况,可能是不同的行号)

*第一个命令将您的%username%添加到组“ root”

第二/第三条命令允许组“ root”的所有成员成为超级用户而无需输入密码,而仅允许用户“ root”的su特权进行身份验证。


尾注:

不要乱搞/etc/sudoers...“ su”身份验证必须经历很多检查/平衡。超级用户身份验证与所有其他登录身份验证使用相同的pam.d过程。“ /etc/security/access.conf”具有通过tcp / ip(192.168.0.1)通信和通过telnet服务(tty1&tty2&tty3 ... etc)进行访问控制的布局,从而可以通过传输协议对每个应用程序进行更精确的过滤。如果安全是您的关注点,那么您的关注点应该针对远程/代码威胁,而不是在离开房间时实际接触您的计算机的人!!!

偏执狂的食物(不要在评论中输入此内容):

sudo sed -i 's/#-:ALL EXCEPT (wheel) shutdown sync:LOCAL/-:ALL EXCEPT (wheel) shutdown sync:LOCAL/g' /etc/security/access.conf

^这将阻止不是系统成员或root用户的任何人访问控制台。有时程序会安装被利用的用户名/组!


2
不是安全专家,但听起来有点直觉。您正在为整个组禁用密码,以允许单个用户在没有密码的情况下运行特定的应用程序,以避免为特定应用程序优化sudo的“复杂性”,对吗?所有这些都在公共服务器上?该脚本是否禁用了您的基本生存本能?安全性是设计必不可少的。记住,就像洋葱一样。它有层次,会让您哭泣。受到威胁的服务器上的数据丢失只是问题的一部分。来自您系统的黑客
跳板

2
这与直觉和常识相反:为只需要一个cookie的用户打开整个cookie罐是完全不负责任的。您可以将用户添加到sudoers列表中,而不需要输入密码,而不是编辑一个或多个sudoers文件。“如果手枪对儿童不安全,请不要给他们教规。” 我
约翰,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.