簡體   English   中英

Qmail/popuser 環境權限(Linux/CentOS)

[英]Qmail/popuser Environment Permissions (Linux/CentOS)

我正在嘗試使郵件接收腳本正常工作,但是當它嘗試將文件復制到我需要的位置時出現權限錯誤。

我們正在運行 Linux/CentOS/Plesk 網絡服務器。 我將 qmail 設置為通過管道將某個地址接收到的消息傳送到 shell 腳本。 該腳本應該將消息寫入文件並將它們復制到服務器的 vhost 訂閱之一,以便通過網絡服務器運行的代碼可以訪問它們。

我可以毫無問題地將消息傳遞給 shell 腳本,並且它可以成功地將接收到的消息寫入本地目錄中的文件(/var/qmail/mailnames/ 中的收件人文件夾)。 但是,當腳本嘗試將消息文件復制到正確的 vhost 目錄時,出現“權限被拒絕”錯誤。

——

.qmail(文件管道郵件到 parse_mail.sh - 為了清楚起見,這部分按預期工作):

| true
| /bin/bash parse_mail.sh &> parse_mail_sh.log

——

parse_mail.sh:

echo "Start parse_mail $(date)";
u=$(/bin/id -u -n);
echo "running as ${u}";
umask 000;
# random tag name
templ='message';
rand=$(awk -vmin=100000000 -vmax=999999999 'BEGIN{srand(); print 
int(min+rand()*(max-min+1))}');
tag=$templ$rand;
echo "Create dir ${tag}/";
/bin/mkdir $tag;
echo "Write message into ${tag}/";
/bin/cp /dev/stdin ${tag}/message.txt;
echo "Copy message to message_files/";
/bin/cp ${tag}/message.txt /var/www/vhosts/subscription/httpdocs/subfolder/message_files/${tag}_content.txt
echo "Remove ${tag}/";
/bin/rm -R ${tag};
echo "End parse_mail";

——

parse_mail_sh.log 日志顯示:

Start parse_mail Thu Jul 18 11:07:06 EDT 2019
running as popuser
Create dir message494556566/
Write message into message494556566/
Copy message to message_files/
/bin/cp: failed to access '/var/www/vhosts/subscription/httpdocs/subfolder/message_files/message494556566_content.txt': Permission denied
Remove message494556566/
End parse_mail

——

很直接,對吧? 'popuser' 只是無權寫入其他目錄。

除了,這是奇怪的事情:

我不是專家,但我大致了解 unix/linux 權限是如何工作的。 我相信 popuser 確實具有訪問和寫入目錄的必要權限 - 中間目錄結構是可遍歷的,並且我已將 popuser 添加到寫入該特定訂閱文件夾所需的組中。

我可以在終端中 su 到 popuser 並 cd 上下目錄結構,並在正確的位置復制/創建文件。 我什至可以從終端 AS popuser 運行郵件接收腳本,它運行良好。 它僅在接收郵件時觸發時拋出錯誤。

我認為這意味着 popuser 通過 qmail 運行的環境與終端運行的環境存在一些差異 - 我只是無法准確追蹤可能是什么(或在網上找到有關它的文章)。

或者我誤解了某些東西是如何工作的? 就像我說的,不是專家...

所以我的問題是:

當 qmail 收到消息時,為什么 parse_mail.sh 腳本不能成功地將創建的文件復制到指定的 message_files/ 目錄,因為相同的腳本在通過相同的系統用戶(popuser)運行時可以這樣做終端?

經過幾天的斗爭,我發現了這個問題。

我已經做出了所有正確的改變,但系統沒有跟上。

我已經在 PLESK 中重新啟動了各種服務——包括“POP/郵件服務器”——但顯然 postfix 不是你可以從那里控制的。

當我停止然后重新啟動 Postfix 時,我的腳本突然起作用了。

我唯一的理論是,“popuser”可能是通過 postfix 在沒有我的用戶組更改的舊會話上操作的 - 這可能解釋了為什么我可以通過 popuser 終端執行操作,但郵件處理器不能。

暫無
暫無

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

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