我的一个朋友托管了他为客户建立的一些网站。不知何故,他搞乱了权限,导致所有客户的网站在加载时出现 403 错误。
当我 ssh 到他的服务器并使用我的帐户登录时(我也在他的服务器上运行 2 个网站),我收到的第一条消息是:
上次登录:2012 年 1 月 24 日星期二 11:54:37,来自 82.168.36.207 无法切换到主目录 /home/michiel:权限被拒绝 -bash:/home/michiel/.bash_profile:权限被拒绝
然后我使用 sudo 和 chdir 转到 /home/。我(递归地)将文件夹 michiel 的所有者更改为 michiel:michiel,并将其(递归地)修改为 755。
我登录时仍然收到相同的错误,并且网站仍然给出 403 错误。
我试图弄清楚是否 SELinux 导致了问题,但“find selinux”输出没有这样的文件或文件夹。
关于如何解决这个问题有什么想法吗?
答案1
从评论来看,/home 上的权限似乎没有设置执行位:
drw-r--r-- 26 root root 4.0K Jan 24 03:17 home
您需要设置执行位才能进入目录。因此,“chmod a+x /home”。
诀窍在于,您的朋友可能已在所有子目录中递归地取消了执行位。如果用户不多,我可能只需转到每个主目录并目测验证权限即可。如果用户很多,则有更高效地运行 chmod 的方法,可能类似于:
chmod -R a+x /home/*/public_html
要小心(不像你的朋友!)
答案2
第一个命令授予所有者或其组以外的其他用户进入目录的权限 (hattip @cjc)。第二个命令授予对文件的读取权限:
find "/path" -type d | xargs chmod o+x
find "/path" -type f | xargs chmod o+r
这是要发布的文件的最小权限集。如果有人依赖 DirectoryIndex,则目录将需要o+rx
而不仅仅是o+x
。
我通常的权限设置是:
$ ls -ld /var/www/me.example.com
drwx-----x 12 me-example-com users 4096 Oct 4 16:44 /var/www/me.example.com
$ id me-example-com
uid=1000(me-example-com) gid=100(users)
这是我在网上学到的技巧,意味着组中的其他成员users
将无法查看彼此的文件,但默认情况下,系统的其余部分将允许www-data
(Debian 上运行 Apache 的用户)进入目录。