如何在没有密码的情况下使用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实例上看到了这个设置
任何的想法?
您需要编辑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 非常强大,可以配置为做很酷的事情。 这在文档中有详细解释。
简短的回答是在终端上运行sudo visudo
。 如果这是您第一次运行visudo,它会询问您喜欢哪个编辑器。 nano通常被认为是最容易使用的,但选择你最熟悉/熟悉的编辑器。 您需要决定要授予谁的权限; 对于每个人(一个非常糟糕的主意) ,一个用户或一个系统组,它可能是ALL
。 组以%符号为前缀。 例如,如果您希望为steroid_users
组中的每个人提供root权限,而无需为要添加的所有命令设置密码:
%steroid_users ALL=(ALL) NOPASSWD: ALL
到文件末尾,退出并保存文件。 如果一切顺利,并且您是steroid_users组的成员,您将能够发出sudo *some-command*
而无需输入密码。
请记住,在您登录时有权访问终端的任何人 – 或者如果您有基于密钥的身份validation的ssh设置,或者(甚至更糟)已启用无密码会话登录 – 完全且不受限制地访问您的整个系统。 如果您的系统上有多个用户,或者这是一个文件服务器,则所有用户文件都可能存在风险,因为root可以执行任何操作!
此外,如果您犯了错误,visudo将输出错误消息而不保存对文件的更改。 这有助于防止完全破坏sudo。 你应该真的阅读文档 。 Sudo旨在为用户提供足够的访问权限来完成他们的工作,而无需暴露整个系统。 仅为某些命令提供无密码访问可能是有利的。
我希望这有帮助。
您需要编辑’/ etc / sudoers’文件(有’visudo’命令)。在您的用户或组的允许命令列表之前添加NOPASSWD。 如果您的用户位于“管理员”组中 – 您需要关注:
%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 % ALL = NOPASSWD: apache2ctl
要么
sudo visudo % ALL = NOPASSWD: /etc/init.d/apache2
我想这会做到这一点。
但是要小心删除sudo的密码。
现在回答简单的问题! 没有办法搞砸任何东西或捏造你的装置。
只需输入您的密码几次,然后您就不必再次输入密码了! 这将允许您将本地管理员帐户添加到组“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权限进行身份validation。
尾注:
不要乱用/etc/sudoers
…有很多检查/平衡’su’认证必须通过。 超级用户身份validation使用与所有其他登录身份validation相同的pam.d过程。 “/etc/security/access.conf”具有通过tcp / ip(192.168.0.1)通信和telnet服务(tty1&tty2&tty3 …等)进行访问控制的布局。这允许通过传输协议对每个应用程序进行更精确的过滤。 如果您担心安全问题,那么当您离开房间时,您应该关注远程/代码威胁与实际触摸您计算机的人!
妄想症的食物(不要在评论中输入这个):
sudo sed -i 's/#-:ALL EXCEPT (wheel) shutdown sync:LOCAL/-:ALL EXCEPT (wheel) shutdown sync:LOCAL/g' /etc/security/access.conf
^这会阻止对不是系统成员或root用户的任何人访问控制台。 有时程序会安装被利用的用户名/组!