安全的chmod权限?

5
标准的文件权限是“644”,目录权限是“755”,对吗?
在大多数情况下,PHP不需要写入文件或目录。那么我可以从所有组中删除写权限吗?
我可以将所有文件分配为“444”,将所有目录分配为“555”。
这样不是更安全吗?
提前感谢!
注意:我的PHP的“disable_functions”列表中有“chmod()”。
4个回答

3

新创建的文件和目录的默认权限由umask环境变量设置。文件的所有者和root可以更改权限。

如果您的应用程序不需要使用chmod,则将其保留在禁用列表中。您应该考虑安全性:比我聪明的许多人现在已经使chmod成为我的应用程序中更安全的部分之一。因此,我将花费可用时间使其他部分更加安全。

在服务器上将应用程序设置为只读是可以自动化的。但是,当您更改应用程序代码时,这将使事情非常困难。在某些时候,您将来回移动,对服务器上进行一些代码更改并对其进行测试...然后忘记将文件/目录权限重置为只读。

如果您的生产机器上只有1个用户帐户,则我建议您坚持使用默认权限-可能已经为您管理了一切。或者,您可以按照下面的说明删除组和“其他”权限。

典型的生产设置是拥有一个应用程序组,您属于该组。您还需要一个单独的用户来运行php应用程序。保留所有者和组的完全权限,并从“其他”中删除所有权限。这样做的好处是:

  • 开发人员保留独立的登录 - 您可以追踪谁在什么时候做了什么。
  • 您和其他开发人员可以将新代码复制到服务器上。
  • 应用程序可以运行代码。
  • 应用程序无法访问代码之外的任何内容。
  • 没有其他用户可以看到您的代码。

我猜想管理生产服务器是其他人的工作?他们会花时间确保没有人可以登录并四处乱动。虽然您需要确保没有人可以运行操作系统命令,但我认为最好的起点是学习xss。默认的php服务器设置应该没问题。应用程序中最不安全的部分是只有您看过的部分。 如果有人要访问系统调用,最有可能是通过表单进行的。即使您消除了系统调用,表单仍然容易存储JavaScript。除非您的应用程序存储信用卡,否则更可能成为攻击目标的是用户浏览器中的密码/会话。


谢谢您提供这么详细的答案。您说得对,我的服务器是由其他人负责维护的。但我之所以问这个问题,是因为有人成功地上传了一个远程文件到我的根目录,并通过调用这个远程脚本向其他几个文件中插入了恶意代码。如果您将目录和文件设置为不可写,这种情况就不会再发生了,对吗? - caw
1
不幸的是,可能会再次发生某些事情。您将关闭一些功能,但不会阻止访问。网站上的某个地方,有访问执行“某事”的权限。在程序堆栈中,创建一个文件位于更深层次。您需要消除其上方的间隙。如果您尚无法确定是什么,请更改文件权限以在短期内提供帮助。这可能会防止有人自动执行此精确黑客攻击。现在是向disabled_functions添加更多内容的好时机(感谢SirDarius)。 - Brian Maltzan

1

这并不更安全,因为PHP始终可以对000-chmod文件进行chmod 777(如果它们属于PHP)。 但是,由于您无法在chmod之前写入此文件,因此更安全。


但是如果chmod()在PHP的disable_functions列表中,那么它就非常安全了,是吗? - caw
通常如果禁用了chmod,您将无法更改权限。检查umask函数是否已启用。使用此函数,您可以更改文件的标准权限!!! - VeeWee
3
请注意禁用任何允许执行系统命令的功能,如system,因为可能会调用system(“chmod 777 $file”); - SirDarius

1

chmod()在我的PHP的disable_functions列表中。
这样做会更安全吗?

使用disable_functions可以禁用特定函数。
如果chmod()出现在disable_functions指令中,那么使用它并不更安全;它只是被禁用了,使用chmod()的PHP代码将会引发警告。

指令disable_functions不应与安全模式指令混淆。即使将指令safe_mode设置为0,disable_functions也是活动的;当启用safe_mode时,某些函数将被禁用或受到限制。

请注意,安全模式在PHP 5.3中被视为已弃用;这意味着该指令仍然可以在PHP 5.3中使用,但随时可能不再使用。

这是一个很好的答案,但是回答了错误的问题,不是吗?:P - Pekka
OP说chmod()被列在disable_functions指令中,他问:那不是更安全吗?我对此做出了回答。 - apaderno
在评论中,OP还问道_但如果chmod()在PHP的disable_functions列表中,那么它是非常安全的,对吗?_ - apaderno
我可以分配[...]这样不是更安全吗?<<< 这是原始问题。对不起,这可能会被误解。 - caw

1

抱歉我的英文不好。

我想到了三个可能的原因:

  1. 检查你的php.ini文件中的safe_mod标志,如果safe_mod是ON,那么你可能会遇到一些问题。
  2. 如果你使用的是Plesk,当你用另一个没有在Plesk中创建的用户创建文件夹或文件时,你会遇到问题。
  3. 很可能你缺少一个php库。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接