刚刚在 Ubuntu 9.04 上设置了 lighttpd,但权限问题。网站加载正常,因为我使用的是 Fast CGI,但我的媒体(Javascript、CSS、图像)无法加载。
我在配置文件中启用了日志记录选项:
debug.log-request-handling =“启用”
我在日志文件中得到以下内容:
2009-08-16 02:42:27: (response.c.473) -- 处理物理路径 2009-08-16 02:42:27: (response.c.474) 路径
:/var/www/sites/mysite.com/http/media/css/style.css 2009-08-16 02:42:27: (response.c.520) -- 拒绝访问
然后我去检查了所有这些目录的权限,对它们进行了更改,以便 www-data 组具有权限,但我仍然收到 403 禁止错误和日志文件中的错误。
我跑了:
chgrp -R id:www-data css/ chmod -R g+rx css/
和 ls -l
> [email protected]:/var/www/sites/mysite.com/http/media$
> ls -l total 12 drwxr----- 2 id
> www-data 4096 Aug 16 01:59 css
> drwxr----- 2 id www-data 4096 Aug 16
> 02:00 images drwxr----- 3 id www-data
> 4096 Aug 16 02:00 js
尝试授予 www-data 用户 rwx 权限,但仍然出现禁止错误。
我该如何修复这个问题?服务器可能没有使用 www-data 用户,我该如何检查它是否在该用户下运行?
答案1
如果您使用的是 Ubuntu 软件包并且没有进行太多更改,则正在运行的进程名称应该是 lighttpd,默认用户和组名称都是 www-data。请检查配置文件 (/etc/lighttpd/lighttpd.conf) 中的 server.username 和 server.groupname 条目以确定。
Runningps -fC lighttpd
应该会告诉您它是否正在运行以及正在运行的用户 ID。在我的系统上,输出如下所示
rik@mary:/home/rik$ ps -fC lighttpd
UID PID PPID C STIME TTY TIME CMD
www-data 667 1 0 03:50 ? 00:00:00 /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf
您希望在文档根目录下显示的所有内容都应可供 www-data 用户读取,并且目录也需要可由 www-data 执行。要测试这一点,您可能需要尝试以 www-data 用户身份使用 find。sudo 命令可以帮助实现这一点。 sudo -u www-data find /var/www/sites/mysite.com/http/media/css/
应该会成功。如果没有成功,请再尝试一步sudo -u www-data find /var/www/sites/mysite.com/http/media/
依此类推,直到 find 可以返回文件和目录名称。一旦找到,运行chown和修改模式针对该目录执行不带 -R(递归)标志的命令。然后再次测试。
如果您熟悉以下所有文件和目录/var/www/sites/mysite.com/http/media由于任何人都可以读取,因此您可能需要将所有文件 chmod 为 644,将目录 chmod 为 755。如果您有需要设置执行位的文件,除非所有文件都有不同的扩展名,否则这可能会有点麻烦。这可以使用 -type、-exec 和 -name 标志来完成,例如:
chown -R id:www-data /var/www/sites/mysite.com/http/media
find /var/www/sites/mysite.com/http/media -type d -exec chmod 755 {} \;
find /var/www/sites/mysite.com/http/media -type f -exec chmod 644 {} \;
find /var/www/sites/mysite.com/http/media -type f -name '*.php' -exec chmod 755 {} \;
如果您不希望 lighty 访问树中的其他文件和/或目录,则需要以不同的方式处理。如果您将希望可读的文件与希望不公开的文件放在不同的目录中,则总是更容易。
答案2
您确定权限正确吗?“drwxr-----”似乎不正确。您可能需要的是目录上的 0755 (rwxr-xr-w) 和文件上的 0644 (rw-r--r--)。
此外,www-data 看起来是所有者,而不是群组。
答案3
ps
应该能够告诉您 lighttpd 进程使用的有效用户和组:
ps -ax -o user,group,pid,comm | grep httpd
您还可以在 lighttpd.conf 文件中检查“server.username”和“server.groupname”的设置。
进程需要对目录具有执行权限才能进入该目录。请确保不属于 lighttpd 用户或组的所有父目录都已设置全局执行权限。
答案4
您还需要为该组添加读取和执行权限(目前它们似乎缺失):
chmod g+rx css media