3 revs, 2 users 67%anon Asked: 2009-07-03 11:27:31 +0800 CST2009-07-03 11:27:31 +0800 CST 2009-07-03 11:27:31 +0800 CST 哪些 CHMOD 设置可以防止用户查看目录? 772 我有一个“包含”目录,我的 Web 服务器应该能够与之完全交互,但我不希望用户能够看到它的内容。 linux chmod 9 个回答 Voted John T 2009-07-03T11:33:15+08:002009-07-03T11:33:15+08:00 linux 上的权限(这是我假设您正在使用的)按顺序排列: uuu|ggg|ooo rwx|rwx|rwx U 是用户,文件的所有者。G 是特定组的组访问权限,O 是其他组。 如果用户不在可以访问它的组中并且他们不是目录的所有者,则他们属于其他类别,因此您只需修改最后 3 个字段。 最简单的方法: chmod dir o-r 或者 chmod dir 770 770 将授予所有者和组完全访问权限,但从“其他人”获取访问权限。尽管如果他们无法读取它(需要查看内容),但给他们写入和执行访问权限是没有意义的,因此您最好使用 770 chmod 而不是 776 等。 Jeremy Smyth 2009-07-03T11:30:44+08:002009-07-03T11:30:44+08:00 您需要找到您的网络服务器运行的用户或组,然后chown是该用户和/或组的目录,然后 chmod -R 660 directory 或类似的东西。 这假设您指的是本地用户 :) 如果您指的是网络用户,那么您必须记住,匿名网络用户必须与您的网络服务器具有完全相同的权限。 KSchmidt 2009-07-03T11:31:13+08:002009-07-03T11:31:13+08:00 您可能想要使用 htaccess 文件来限制对该文件夹的查看权限,但请阅读 Apache 的有关该主题的文档以获取其他更好的选择。 John Kugelman 2009-07-03T11:34:10+08:002009-07-03T11:34:10+08:00 将包含目录放在您的网站根目录之外。您不希望它在您的内容目录下,因为 Web 服务器可以将其提供给站点用户。因此,如果您的网站根目录是/var/www/html一个并行/var/www/includes目录。 chmod不会做您想做的事,因为该httpd过程将访问您的所有文件,而不是实际的 shell 帐户。您可以使用限制访问,.htaccess但这比简单地将includes目录移出内容区域是一种较差的解决方案。 thepocketwade 2009-07-03T12:34:34+08:002009-07-03T12:34:34+08:00 @jeremy(因为我没有代表评论他的答案):您不想 chmod 660 目录,因为这会给所有者和组权限拒绝错误和/或奇怪的输出。 例如` ls -l testingjunk ls: 无法访问 testingjunk/something: 权限被拒绝 共 0 -????????? ? ? ? ? ? 某物 我忘了展示这部分。 ls -ld testingjunk [16:32] drw-rw---- 2 wjenkin2 itstaff 4096 2009-07-02 16:30 testingjunk/ ` James F 2009-07-03T13:14:38+08:002009-07-03T13:14:38+08:00 假设您希望 Web 服务器进程能够在目录中读取和写入文件(但不能从目录中提供内容),您希望 在文档根目录之外创建一个目录 将此目录的所有权更改为您的 Web 服务器运行的用户和组 将此目录的模式更改为0700 如果您的 Web 服务器以无人身份运行(某些发行版在其下运行多个服务器进程的非特权用户),请记住,以该用户身份运行的其他进程也可能能够访问该目录。如果这是一个问题,您可能需要为您的 Web 服务器创建一个专用用户。除了创建用户和组之外,这还需要更改 Web 服务器配置和/或启动脚本。 由于我推荐模式 0700,因此该组在技术上并不重要,但您必须记住,如果 Web 服务器用户的 umask 设置为002 而不是更常见的 022。专用组将确保不会无意中打开此类文件以供共享组的其他成员写入,您可能会将 Web 服务器用户粘在其中。 Jonathan Leffler 2009-07-03T21:25:52+08:002009-07-03T21:25:52+08:00 确保您的 Web 服务器以具有有限权限的用户身份运行,并将受限组作为其组。然后确保文件只能由用户和/或组访问,通过删除公共读取和执行访问权限(几乎永远不应授予公共写入访问权限)。 维护站点的人也需要访问这些材料——最好不要使用超级用户权限。这可能会改变你做事的方式。 考虑 ACL 是否合适 - 这将允许您为 Web 服务器组提供对文件的读取访问权限,为维护组提供读取和写入访问权限,但仍然拒绝一般公共访问。如果没有 ACL,您只能拥有一组组权限。 gbarry 2009-07-03T21:54:54+08:002009-07-03T21:54:54+08:00 如果您删除读取权限,他们将无法看到那里有哪些文件。(如果你删除了执行权限,那么他们就不能 cd 到它。) aem 2009-07-03T11:29:59+08:002009-07-03T11:29:59+08:00 Linux/Unix 中目录上的“x”(执行)位控制是否可以列出其内容。
linux 上的权限(这是我假设您正在使用的)按顺序排列:
U 是用户,文件的所有者。G 是特定组的组访问权限,O 是其他组。
如果用户不在可以访问它的组中并且他们不是目录的所有者,则他们属于其他类别,因此您只需修改最后 3 个字段。
最简单的方法:
或者
770 将授予所有者和组完全访问权限,但从“其他人”获取访问权限。尽管如果他们无法读取它(需要查看内容),但给他们写入和执行访问权限是没有意义的,因此您最好使用 770 chmod 而不是 776 等。
您需要找到您的网络服务器运行的用户或组,然后
chown
是该用户和/或组的目录,然后或类似的东西。
这假设您指的是本地用户 :) 如果您指的是网络用户,那么您必须记住,匿名网络用户必须与您的网络服务器具有完全相同的权限。
您可能想要使用 htaccess 文件来限制对该文件夹的查看权限,但请阅读 Apache 的有关该主题的文档以获取其他更好的选择。
将包含目录放在您的网站根目录之外。您不希望它在您的内容目录下,因为 Web 服务器可以将其提供给站点用户。因此,如果您的网站根目录是
/var/www/html
一个并行/var/www/includes
目录。chmod
不会做您想做的事,因为该httpd
过程将访问您的所有文件,而不是实际的 shell 帐户。您可以使用限制访问,.htaccess
但这比简单地将includes
目录移出内容区域是一种较差的解决方案。@jeremy(因为我没有代表评论他的答案):您不想 chmod 660 目录,因为这会给所有者和组权限拒绝错误和/或奇怪的输出。
例如`
我忘了展示这部分。
`
假设您希望 Web 服务器进程能够在目录中读取和写入文件(但不能从目录中提供内容),您希望
如果您的 Web 服务器以无人身份运行(某些发行版在其下运行多个服务器进程的非特权用户),请记住,以该用户身份运行的其他进程也可能能够访问该目录。如果这是一个问题,您可能需要为您的 Web 服务器创建一个专用用户。除了创建用户和组之外,这还需要更改 Web 服务器配置和/或启动脚本。
由于我推荐模式 0700,因此该组在技术上并不重要,但您必须记住,如果 Web 服务器用户的 umask 设置为002 而不是更常见的 022。专用组将确保不会无意中打开此类文件以供共享组的其他成员写入,您可能会将 Web 服务器用户粘在其中。
确保您的 Web 服务器以具有有限权限的用户身份运行,并将受限组作为其组。然后确保文件只能由用户和/或组访问,通过删除公共读取和执行访问权限(几乎永远不应授予公共写入访问权限)。
维护站点的人也需要访问这些材料——最好不要使用超级用户权限。这可能会改变你做事的方式。
考虑 ACL 是否合适 - 这将允许您为 Web 服务器组提供对文件的读取访问权限,为维护组提供读取和写入访问权限,但仍然拒绝一般公共访问。如果没有 ACL,您只能拥有一组组权限。
如果您删除读取权限,他们将无法看到那里有哪些文件。(如果你删除了执行权限,那么他们就不能 cd 到它。)
Linux/Unix 中目录上的“x”(执行)位控制是否可以列出其内容。