簡體   English   中英

使用php用sudo執行命令

[英]Executing commands with sudo using php

我有一個腳本調用以下命令來獲取未讀消息的數量:

sudo ls /var/vmail/username/new | wc -l

這從shell運行時工作正常(權限設置並且運行正常而不提供密碼)。

但是當使用exec從PHP運行時,它會按預期執行,但它總是返回0

可能是什么導致了這個? 我該如何調試或修復問題?

(php 5.3,redhat,帶有~default config的apache)

編輯

感謝ruaks的小費。 問題是: sudo: sorry, you must have a tty to run sudo 評論/etc/sudoers的條目有助於:

Defaults            requiretty
Defaults:apache     !requiretty

但看起來這對安全性來說並不是那么好。 還有其他更好的解決方案?

通過apache執行PHP時,該進程由運行的用戶apache所擁有。 請參閱: 找出Apache正在運行的用戶? 如前所述,該用戶通常存在安全風險。

這可能是因為你沒有配置你的sudoers。 轉到/ etc / sudoers並授予www-data權限以執行腳本。 所以vim / etc / sudoers然后插入www-data ALL =(root)NOPASSWD:full / script / path.sh如果你進一步調試然后當你以root身份登錄時執行su-www-data然后一旦你以www登錄-data嘗試運行你在php中運行的腳本,看看你得到了什么錯誤

但看起來這對安全性來說並不是那么好。 還有其他更好的解決方案?

是的,這是一個安全風險。 我不知道這些信息需要多么動態; 如果您只是偶爾使用它,並且不介意它可能稍微過時,您可以選擇編寫將執行命令的cronjob並將輸出寫入apache可以讀取的臨時文件中。

如果您迫切需要這些信息100%准確且實時,您可能想要另一種方法來確定新消息的數量。 如果郵箱是可讀的 - 例如 - imap或其他什么,PHP具有可以在不需要sudo的情況下進行計算的功能。 總而言之,在我看來,無論如何,這似乎是最可重復使用和最“干凈”的工作方式。

將apache添加到sudo'ers文件存在安全風險,但是,如果你添加它只能執行你希望它能像Quillion所描述的那樣執行的命令,那么風險就會降低。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM