我想实现一个脚本,以 root 权限执行任何命令,但无需输入任何密码。在终端上,我希望看到这样的效果:
./newsudo "comand with root privileges"
我认为,要采取的方法是使用“具有 root 权限的命令”作为脚本中的参数,并使用 exec 或类似命令来执行它。
事实是,我对这个领域很不熟悉,不知道从哪里开始。
谢谢!!
答案1
创建一个通用命令,以 sudo 形式运行任何(子)命令,无需密码;可能吗?
理论上,你问的问题是可能的。由于可以在 sudoers 文件中设置应用程序以使用参数运行,因此我们能创建一个要调用的命令(脚本),使用 sudo 运行,并将相关命令作为参数。
我们该这么做吗?
绝不,因为这会破坏管理员的原则。任何恶意进程都可能运行代码来破坏您的系统。
底线是,我甚至不会发布如何做到这一点。
更多关于无需密码运行软件的注意事项
正如@Groundzero提到的,你可以添加具体的应用程序或脚本添加到 sudoers 文件中,无需密码即可运行,如下所述这里。但是,请记住:
- 不要将可能损害系统或造成一般危害的应用程序添加到 sudoers 文件中。尤其是当应用程序具有广泛的命令行选项时。
- 不要将要运行的脚本
sudo
(无需密码)存储在无需管理员权限即可编辑的位置。任何人(或任何进程)的简单编辑都可以使其执行任何操作。
答案2
只需制定一个 sudo 规则,在命令前面加上 NOPASSWD:,将相关命令授予所需用户/组即可。您不需要新的脚本,只需要类似这样的脚本即可授予管理员组中的每个人以 root 身份运行任何内容的能力,而无需密码:
%admins ALL = NOPASSWD: ALL
一般来说,要求对非常危险的命令输入密码是个好主意,但你的安全策略是你自己决定的。有一些(现已删除)关于这种做法不安全的讨论,我同意:是很危险。说“此用户可以以 root 身份运行任何程序,而无需偶尔重新验证其身份”几乎总是一个坏主意。
不过,还有其他专门讨论安全性的论坛。如果合法目标是以 root 身份运行任意命令而无需密码,上述方法几乎是最安全的方法。需要注意的是,任何实施此方法的人都需要意识到风险,包括“任何能够以此用户的权限运行命令的人实际上都是 root”。如果浏览器存在安全漏洞,这包括下载的脚本,甚至可能是恶意网页。有了这样的规则,“非特权用户”和“root”之间的区别几乎消失了。买家要小心。:)