如何在不使用sudo的情况下运行命令?

6

我想在本地机器的crontab中添加一行,每五分钟运行一次。我的问题是我要使用的命令需要sudo:

sudo indexer --config /usr/local/etc/sphinx.conf --all --rotate

有没有一种方法可以在不使用sudo的情况下运行命令,而且不需要输入密码?

谢谢!


3
适合放在superuser.com网站上。 - Philipp
5个回答

3

只需使用cmd visudo(此cmd需要root权限)将您的命令附加到sudoer文件列表中,如下所示:

<YOUR_USER_NAME> ALL = NOPASSWD:<ABSOLUTE-PATH-TO-CMD>

请注意维护ABSOLUTE-PATH-TO-CMD,否则会成为安全漏洞。


3

将其放入root用户的crontab中

sudo crontab -e

在那里,你可以放置

indexer --config /usr/local/etc/sphinx.conf --all --rotate

此 crontab 中的所有命令将以 root 身份执行。 如果您只是使用当前用户执行 crontab -e,则它们将在您的用户权限下执行。


这似乎解决了问题。但我仍然想知道如何在不使用sudo命令的情况下运行某些命令。一个例子可能是: sudo apt-get install <应用程序名称> 那么我该如何只运行apt-get install <应用程序名称>?将自己添加到sudoers文件中吗?谢谢! - r2b2
3
@r2b2:你无法执行该操作,这是基本的安全问题。为了作为“root”用户执行命令,你需要证明你有授权。sudo会允许你作为“root”用户执行命令(通常在提示输入密码后),因为你被写入了sudoers文件中。另一种以“root”身份执行命令的方式是使用su命令,它会提示你输入“root”的密码。由于必须是“root”编写了命令,所以在“root”计划任务表中的命令将作为“root”执行。 - Gilles 'SO- stop being evil'

1

除非服务器已从黑客做了很好的安全防护,否则将应用程序放在root的crontab中是极其危险的。如果碰巧有人替换了二进制文件(包括库文件),你就完蛋了!

更好的方法是将二进制文件访问的所有文件的所有者改为非特权用户,并以非特权用户身份运行作业。

应用程序使用的任何二进制文件都不应该对除root之外的任何人具有可写权限。


@Nilesh:什么?任何Unix系统都有在系统crontab中执行由“root”执行的命令。这样做没有特别的危险。危险的是执行一个二进制文件(或已加载库)可被其他用户写入的程序,因为该用户可以通过覆盖文件来运行任意代码作为“root”。这仍然只对本地用户有漏洞。 - Gilles 'SO- stop being evil'
@Gilles:是的,我应该说二进制文件而不是二进制 :) 已编辑。 - Nilesh
@Nilesh: 我认为这个问题在我们的脑海中很清楚,但你写的并不清楚,所以让我建议一些更改。首先,“免受黑客攻击”的部分实际上并不相关:关键是root不应该运行(通过cron或其他方式)其可执行文件可能被另一个用户覆盖的应用程序。其次,实际上不仅仅是二进制文件和库,而是任何将被执行的东西(包括从库加载的二进制代码,但也包括各种脚本)。 - Gilles 'SO- stop being evil'
@Gilles:是的,没错。现在编辑它已经没有意义了:D 评论已经足够了:) - Nilesh
将SUID位设置为脚本可以作为root运行,这样做是否可行?或者说这不是一个好主意吗? - cam8001
@cam8001:无论是使用SUID位还是sudo,都是相同的事情。唯一的区别是,sudo可能不允许执行除sudoers中指定的命令之外的命令。但我对此表示怀疑。使用sudo,应用程序获得了root权限,但它有多受限制,我不知道。如果没有限制,那么使用sudo或suid也无所谓。唯一的区别是您可以将其运行为'app'而不是'sudo app'。 - Nilesh

0

以 root 用户运行?还是 sphinx 用户?尝试找出需要运行的用户,并将其添加到该用户的 cron 中。


0

您可以配置sudo不要求密码。阅读sudoers手册以了解如何执行此操作。搜索NOPASSWD字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接