chmod -R由于某些原因使子文件夹中的文件可读


22

我在设置一些WordPress主题时正在调整权限,然后运行chmod 664 -R theme-dir/*它在目录根目录中的文件上运行正常,但是当我执行以下操作时,子目录中的所有文件现在都显示为ls -l

?---------  ? ? ? ?            ? core_functions.php
?---------  ? ? ? ?            ? css
?---------  ? ? ? ?            ? custom_functions.php
?---------  ? ? ? ?            ? images
?---------  ? ? ? ?            ? import_settings.php
?---------  ? ? ? ?            ? js
?---------  ? ? ? ?            ? options_trim.php
?---------  ? ? ? ?            ? page_templates
?---------  ? ? ? ?            ? post_thumbnails_trim.php
?---------+ ? ? ? ?            ? shortcodes

我无法CD到任何子目录,也无法删除它们。我从未见过这样的东西,有人碰到过类似的东西吗?


看起来像损坏的文件系统..
alexus

1
跑步chmod -R u+rwX,go+rX,go-w theme-dir/*
Dusan Bajic 2015年

@ dusan.bajic很好,谢谢。仍然不知道为什么会首先发生。
萨尔

5
@alexus没有腐败,只是烫发
小鸡

我想我在使用chown 644(或其他方法)与chmod时看到了类似的东西,但我真的不希望在工作系统上再次进行测试
Foon

Answers:


49

访问目录的内容(或更具体地说,文件名除外的文件元数据)要求目录具有执行位。

您的递归chmod删除了该权限,因此您失去了该访问权限。如果您使用的-R选项,chmod则最好避免使用数字版本的权限,而应运行(以所需的状态为例)chmod -R ug=rwX,o=rX。此处的大写X表示仅在具有至少一x组的目录或文件上设置X位。另外,您可能需要使用644(u=rwX,go=rX),除非您确实需要小组用户才能编写。


6
X表示在已经具有某些用户执行权限的目录和文件上设置X (通常是您想要的)
tomclegg

1
@tomclegg:是的。我适当地更新了我的答案。他们从来没有添加真正的目录特定版本,甚至更好的是一个术前字母(如u,g,o或a),这意味着仅将此更改应用于目录,这似乎很奇怪。
凯文·卡斯卡特

13

Wordpress文档中

如果您具有对服务器的Shell访问权限,则可以使用以下命令来递归更改文件权限:

对于目录:

find /path/to/your/wordpress/install/ -type d -exec chmod 755 {} \;

对于文件:

find /path/to/your/wordpress/install/ -type f -exec chmod 644 {} \;

这个问题的
矫kill过正

1
我注意到,在对安全性要求更高的环境中(最近是Magento和Health Care Systems),供应商和开放源代码系统正开始建议仅使用文件方法,因为它可以使您在上述情况下对风筝进行细粒度控制,并且可以对setuid,setgid以及臭名昭著的“粘滞位”的应用。针对此用例对此进行映射可能需要做更多的工作,但下注答案始终是实现所需结果的最安全的方法。我相信,只要有可能,安全性始终应该是功能#1。
Bryan'BJ'Hoffpauir Jr.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.