使用apache2-mpm-itk为apache的虚拟主机指定单独的用户运行

在用Python和django写一个类似github的程序,当然功能是非常少的,目前只想做到可以创建git仓库,自行管理ssh公钥还有些基本的权限控制。

在ssh公钥管理这里,其实就是管理Linux用户目录下的.ssh/authorized_keys文件,当用户提交公钥时,向这个文件里写入公钥内容。

authorized_keys的权限设置非常严格,只有当除了用户自己可以有写权限外,组权限和其他权限都不能有写入的权限才行,否则这个文件就无效,即使把公钥写入这个文件,通过ssh登录到该用户时还是需要输入密码,这是ssh出于安全的考虑,防止由于用户自己对权限设置不当而造成安全问题。

但是现在我要通过web界面管理这个文件,那么读写这个文件的用户就是运行web服务器的用户,一般来说运行apache的用户是www-data,那么就无法写入了,我本身对apache也只会一些最基本的配置,然后就搜阿搜。。。

搜到一个suexec,然后装啊,设置阿,测试阿,弄了半天不是太明白,也没成功,运行虚拟主机的用户仍旧是www-data。

然后继续搜阿搜,找到个文章: Running apache2 virtualhost with different users

然后按照里面说的装了 apache2-mpm-itk
$ sudo apt-get install apache2-mpm-itk

在apache的VirtualHost里加入

<IfModule mpm_itk_module>
   AssignUserId git git
</IfModule>

AssignUserId 后面2个参数一个是运行该虚拟主机的用户,另一个就是组。
我把所有git仓库都放在一个叫git的linux用户目录下作为git服务器,所以AssignUserId就是 git git。

最后把django项目下的所有文件的用户和组都设置为git,重启apache,测试后果然就可以了。

使用这个mpm_itk非常方便,之前搜到的suexec我虽然没弄成功过,但是了解下来似乎python程序要通过fastcgi方式运行才行。

我现在django的运行方式是,apache+mod_wsgi,用mpm_itk后同样可以达到效果了。