chmod 744 directory/
在这个上下文中,“可执行文件”有两种可能的含义,而且这两种都需要进行配置。
一个可通过在命令行中键入文件名来运行的可执行二进制文件
一个可以被网络服务器作为脚本读取和处理的文件
处理二进制可执行文件
要针对第一种情况在一个Unix系统上进行配置,您需要确保您的上传目录及其中的文件归Web服务器用户所有,并且只能由该用户读取。目录必须是可执行的;这意味着可以访问该目录中的文件。如果Web用户需要列出目录中的文件,则目录也必须是可读的。当然,它还必须是可写的,以允许创建新文件。
因此,您需要的八进制设置为
chown <web-server-user> <upload-dir>
chmod 0700 <upload-dir>
文件不得可执行,只能由Web服务器进行读取和写入,因此应该是:
chmod 0600 <uploaded-file>
请注意,这意味着只有Web服务器用户才能看到这些文件。这是最安全的情况。但是,如果您确实需要其他本地用户能够看到这些文件,则使用
chmod 0755 <upload-dir>
chmod 0644 <uploaded-file>
处理Web服务器可执行文件
针对第2种情况的编码是与Web服务器相关的。
一种选择是将上传目录放在Web根目录之外,完全禁止直接通过URL访问上传的文件,并仅通过服务器端代码来提供它们。你的代码读取和回显文件内容,从而确保它永远不会被Web服务器作为脚本处理。
另一种选择是配置Web服务器不允许处理上传目录中的文件作为脚本。这种配置是与Web服务器有关的。例如,在Apache中,您可以通过进入服务器配置来实现此目标:
<Directory "path-to-upload-dir">
AllowOverride None
Options -ExecCGI
</Directory>
设置 AllowOverride 为 None 很重要,因为它可以阻止任何人将 .htaccess 文件上传到您的上传目录并重新配置该目录的 Web 服务器权限。
在目录上使用Chmod无法做到这一点,而且您的Web服务器可能会将.php解释为可执行文件,无论模式如何。您可能需要指定您正在使用的服务器,可能有一个.htaccess或类似的指令可以使用。
请注意,对目录的“执行”意味着“可以访问目录内的文件”,因此如果您希望Web服务器访问目录内的文件,则必须设置该权限...