2010-08-06 226 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的,它可能成爲安全漏洞。

相關問題