2010-08-06 174 views
6

我想在每五分钟运行一次的crontab中(在本地机器上)添加一行。我的问题是,我要使用命令要求须藤:如何在没有sudo的情况下运行命令?

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

有没有一种方法,我可以运行不使用sudo并没有提示密码的命令?

谢谢!

+3

属于superuser.com – Philipp 2010-08-06 08:12:46

回答

3

把它放在根

sudo crontab -e 

目前的crontab中,你可以把

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

在这个crontab中的所有命令将root权限。如果您只是将crontab -e作为您当前的用户,它们将在您的用户权限下执行。

+0

这似乎解决了这个问题。但我仍想知道如何一些命令可以在不他们须藤字运行.. 一个典型的例子可能是: 命令和apt-get安装 我怎么能那么做只是易于得到安装?把自己加入sudoers文件? 谢谢! – r2b2 2010-08-06 08:00:25

+3

@ r2b2:你不能,这是一个基本的安全问题。为了以'root'执行命令,你需要证明你有权这样做。 'sudo'会让你以'root'命令执行命令(通常在提示你输入密码后)*,因为你在'sudoers'文件*中。另一种以'root'命令执行命令的方法是'su'命令,它会提示你输入'root'的密码。 'root'的crontab中的命令作为'root'执行,因为'root'必须写入它们。 – Gilles 2010-08-06 19:24:14

0

以root身份运行它?或狮身人面像用户?尝试找出你需要它运行的用户,并将其添加到该用户。cron

1

将应用程序放入root的crontab中非常危险,除非该盒子的安全性不受黑客攻击。如果偶然的人替换二进制文件(包括库),你就走了!

更好的方法是将所有二进制文件访问非特权用户的文件剪切出来,并作为非特权用户运行。

应用程序使用的任何二进制文件不应由除root以外的任何人写入。

+0

@Nilesh:嗯?任何unix系统都有系统crontab中的命令,由'root'执行。这样做没有特别的危险。如果执行一个程序的二进制文件(或加载的库)可被另一个用户写入,那么该用户可以通过覆盖该文件来以“root”运行任意代码。这仍然只对本地用户很脆弱。 – Gilles 2010-08-06 19:26:38

+0

@Gilles:真的。我应该说二进制代替二进制:)编辑。 – Nilesh 2010-08-07 03:43:14

+0

@Nilesh:我认为这个问题在我们的思想中很清楚,但不是写在你写的东西上,所以让我提出一些改变。首先,关于“从黑客中得到保护”的部分并不真正相关:关键是根不应该运行(通过cron或其他方式)可执行文件可能被其他用户覆盖的应用程序。其次,实际上它不仅仅是二进制文件和库,还包括任何将被执行的内容(包括从库加载的二进制代码,还包括所有脚本)。 – Gilles 2010-08-07 10:07:43

0

你可以配置sudo不要问密码。阅读男人sudoers如何做到这一点。搜索NOPASSWD字符串。

2

使用CMD visudo命令,您只需将您的命令到sudoer文件列表(此CMD需要root特权)如下:

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

照顾的绝对路径的-TO-CMD的,它可能成为安全漏洞。

相关问题