CentOS 6 中的权限以某种方式阻止对文件的访问

CentOS 6 中的权限以某种方式阻止对文件的访问

我的一个朋友托管了他为客户建立的一些网站。不知何故,他搞乱了权限,导致所有客户的网站在加载时出现 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 的用户)进入目录。

相关内容