我目前正在设置电子邮件管道,将其发送到其他人无法访问的目录中的 PHP 脚本(设置为 750)。Postfix 在用户“nobody”下运行管道命令,该用户自然无法访问该脚本。我有点犹豫是否要为该文件夹添加执行权限,因为我不想让其他用户能够访问它(即使他们不知道路径)。所以,我想要的是让管道命令在有权访问该文件夹的其他用户下运行。
我想要执行此操作的服务器已安装 Virtualmin。我已经使用 Virtualmin 设置了所有内容,包括提供给 PHP 脚本的别名。Virtualmin 论坛上有几个关于此问题的帖子,但除了让其他人可以执行该文件夹外,目前还没有解决方案。
那么,我怎样才能让管道命令在不同于 nobody 的用户下运行?
答案1
据记载,pipe(8)
可以以任何用户身份执行 - 除了 root 用户
。仅有的那,将会作为 执行nobody
。
yourscript unix - - n - - pipe user=<uid> argv=<yourexecutable>
采用user=
任何现有的 unix 用户,并根据这些凭据运行 pipe(8) 实例。
答案2
这是因为 Postfix 运行管道的用户默认是 nobody。
该行更改了管道运行的用户,您应该知道,Postfix 文档对此发出了警告:请勿指定特权用户或 POSTFIX 所有者
只需注意通过服务器上的特权用户发送电子邮件的安全隐患。
答案3
几天前,这个问题在 StackOverflow 上被提出来,措辞略有不同,但问题是一样的,解决方案也是一样的:
https://stackoverflow.com/questions/28923771/virtualmin-feed-to-program-cant-open-file/28934181
简而言之,解决方案是以您需要管道的用户身份登录 Usermin,然后在那里创建管道。Virtualmin做设置用户在从 Postfix 管道传输时以用户身份运行东西,但不是在 Virtualmin 上下文中……仅当您在 Usermin 下创建它们时。
您还可以在相关用户的 .procmailrc 中手动创建管道。