在用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后同样可以达到效果了。
