通过这篇文章中的这件事,让我对linux下apache的设置和linux的权限机制有了进一步的了解,虽然原理是很简单的,但长期使用windows服务器的同志们未必就会知道。
情况是这样的,我这里为了日常调试程序方便,对程序文件有两个小要求,一是最好保存在home目录下,便于操作,二是文件的owner最好还是用户我,而不是apache,但要求既能够正常编辑,由能够正常的运行(在apache下,web访问)。因此,在home目录下建立了一个目录php,并且在apache中新建了一个别名Alias指向/home/fwolf/php目录。重启apache让设置生效后,却发现访问http://localhost/php返回“403 Forbidden”拒绝访问错误,问题到底出在哪里呢?
首先估计到应该是访问权限的问题,php目录默认的权限是755,owner为fwolf:fwolf,而apache是以用户www-data的身份运行的,所以编辑/etc/group文件,把用户www-data加到了fwolf组中,重新尝试访问,依然是403错误。进一步估计www-data用户的权限设置没有错,问题产生在其他地方。
进一步通过google查询之后,找到了一种调试权限的好方法:先su到root用户,再su www-data切换到www-data的用户环境,直接访问目标文件看是否“Permission denied”(以前怎么就想不到呢)。结果如下:
果然,虽然php目录的权限是755,按理说www-data应该能够访问的,但这时却不行,继续查找原因。。。原来问题出在了php目录的上级目录/home/fwolf上:
原来,上级目录/home/fwolf只允许用户fwolf本人访问,www-data虽然能够访问下级目录php,但无法“通过”上级目录,自然会产生403错误了。所以把/home/fwolf的权限更改为750,同时www-data已经被加到了fwolf组中,apache访问就正常了。
补充说明:linux系统中,目录的权限要有x才能进入。
牛逼啊, 其他网站都是打酱油的,你这片文章 实在。 还有这个 调试方式也不错。