1

我已将 Qmail 设置为通过管道传输到特定电子邮件地址的脚本,该脚本正在运行;但是,部分脚本会创建一个不起作用的文件。

它尝试写入的文件夹上的组apache具有写入权限 (775)。我已添加popuser到 apache 组,由id popuser. 根据以下信息,这可能是不必要的。(我曾尝试让 apache 成为主要/有效组和次要组)

我在 PHP 脚本中使用了get_current_uid(), getmyuid(), :getmygid()exec("whoami")

get_current_uid() = [file/folder OWNER] (we'll call him Bob, he is a user not a group)

getmyuid() = Bob

getmygid() = Bob

exec("whoami") = [blank]

如果我将要写入的目录设置为 777,则一切正常 - 暗示权限是原因。在这种情况下,这些文件是拥有的,并且具有一组popuser(不是上面的 uid/gid 位的结果)。至少对我来说,这意味着当前用户实际上是popuser而不是Bob.

结果,我可以 chmod 到 0644,但不能 chown/chgrp(我需要 apache 作为组,因为其他地方的另一个 UI 允许管理文件)。

为了不必使目录世界可写,我chmod('/path/to/dir', 0777);在创建文件之前和chmod('/path/to/dir', 0775);之后都插入了一个,但这显然popuser也在运行,因为它失败了。

简而言之,我需要做的是在Bob/ apache(所有者/组)具有使用 qmail 的写权限的目录中创建一个文件,该文件说它运行为Bob,但实际上运行为popuser.

希望这是有道理的。

4

1 回答 1

0

我不确定我是否完全遵循你所说的。但是,可以将传入的邮件通过管道传送到 qmail 到在任何用户目录中运行的脚本,并让该脚本创建一个文件。

如果您还没有这样做,请在 /var/qmail/control/rcphosts 中添加一行,告诉 qmail 它应该充当您域的 MX。

在 /var/qmail/control/virtualdomains 中,添加这样的一行来告诉 qmail 为该域将邮件路由到哪个用户帐户: domain.tld:username

在用户目录中创建一个 .qmail-default 文件,其中包含指向要将邮件路由到的脚本的管道: | /路径/到/脚本

重启qmail。

您需要为脚本上的所有人授予执行权限。然后,当收到一封电子邮件时,该脚本应该能够创建新文件。

于 2013-07-25T17:59:29.073 回答