写点什么

使用 mpm-itk 让 Apache 以不同用户身份运行的完整指南

作者:qife122
  • 2025-09-27
    福建
  • 本文字数:1582 字

    阅读完需:约 5 分钟

使用 mpm-itk 让 Apache 以不同用户身份运行

在 WordPress 开发和 WordPress 托管中,让 Apache 以不同用户身份运行非常有用。在 Debian/Ubuntu 中,Apache 默认以 www-data 用户运行。然而,这在 WordPress 安装中并不方便:


在生产服务器上:


  • 许多 WordPress 文件必须由 SSH/SFTP 用户拥有才能应用更改

  • 大多数 WordPress 必须由 Web 服务器用户拥有,以便应用 WordPress 更新


在开发环境中更是如此:除了上述原因外,许多 WordPress 文件必须由 PC 用户拥有,以便:


  • 使用 IDE 处理代码

  • 使用 git(如果需要)

  • 轻松进行备份

使用 mpm-itk 让 Apache 以不同用户身份运行

这个问题有几种解决方案,其中之一就是 mpm-itk。根据官方页面说明:


apache2-mpm-itk(简称 mpm-itk)是 Apache 网页服务器的 MPM(多处理模块)。mpm-itk 允许您在每个虚拟主机下以独立的 uid 和 gid 运行——简而言之,一个虚拟主机的脚本和配置文件不再需要对所有其他虚拟主机可读。


只需安装:


apt-get install libapache2-mpm-itk
复制代码


并在您的虚拟主机配置文件中使用以下指令:


<IfModule mpm_itk_module>    AssignUserId your_user your_group</IfModule>
复制代码


例如:


<VirtualHost *:443>    ServerName example.com    ServerAdmin you@your_email.com    DocumentRoot /var/www/html/example.com        <IfModule mpm_itk_module>        AssignUserId your_user your_group    </IfModule>        <Directory /var/www/html/example.com>        Options -Indexes +FollowSymLinks +MultiViews        AllowOverride All        Require all granted    </Directory>        ErrorLog ${APACHE_LOG_DIR}/example.com_error.log    LogLevel warn    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined        SetOutputFilter DEFLATE    SetEnvIfNoCase Request_URI .(?:gif|jpe?g|ico|png)$ no-gzip dont-vary    SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary    SetEnvIfNoCase Request_URI .pdf$ no-gzip dont-vary        BrowserMatch ^Mozilla/4 gzip-only-text/html    BrowserMatch ^Mozilla/4.0[678] no-gzip    BrowserMatch bMSIE !no-gzip !gzip-only-text/html        SSLEngine on    SSLCertificateFile /etc/ssl-dev/your_cert.pem    SSLCertificateKeyFile /etc/ssl-dev/your_cert_key.pem</VirtualHost>
<VirtualHost *:80> ServerName example.com Redirect permanent / https://example.com/</VirtualHost>
复制代码

Docker 相关问题

它不会在 Docker 容器中运行。在 Apache error.log 中会出现如下错误:


[mpm_itk:warn] [pid 1783] (itkmpm: pid=1783 uid=33, gid=33) itk_post_perdir_config(): setgid(1000): Operation not permitted
复制代码


解决方案是以不同权限运行容器(安全性较低——不推荐在生产环境使用):


docker run --name "my-container" --cap-add=SYS_NICE --cap-add=DAC_READ_SEARCH vendor/image
复制代码


更多信息请参考相关文档。

PHP 邮件函数和 Exim4 问题

如果您安装了 libapache2-mpm-itk,PHP 邮件函数无法与 exim4 一起工作(!)当 WordPress 尝试发送电子邮件时,exim 会崩溃,在 paniclog(/var/log/exim4/paniclog)中您会看到类似内容:


2023-01-30 19:25:27 unable to set gid=33 or uid=0 (euid=0): forcing real = effective
复制代码


根据[mpm-itk 官方页面]和[此资源],解决方案是在 Apache 配置中添加 LimitUIDRange 0 2000。


nano /etc/apache2/conf-available/mpm_itk_with_php_mail.conf
复制代码


添加指令:


LimitUIDRange 0 2000
复制代码


最后:


a2enconf mpm_itk_with_php_mailsystemctl restart apache2.service
复制代码


(可能对生产使用不安全)更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)


公众号二维码


办公AI智能小助手


公众号二维码


网络安全技术点滴分享


用户头像

qife122

关注

还未添加个人签名 2021-05-19 加入

还未添加个人简介

评论

发布
暂无评论
使用mpm-itk让Apache以不同用户身份运行的完整指南_Apache_qife122_InfoQ写作社区