Answers:
Linux主机上的文件和文件夹权限问题有一些潜在原因。
1.文件和文件夹权限
检查文件夹权限设置为0755,文件权限设置为0644。请注意,可以使用免费或付费版本的Akeeba管理工具在站点范围内将文件和文件夹权限重置为这些标准安全设置。
2. PHP参数
检查“系统信息”中“ PHP信息”选项卡中的upload_max_filesize参数是否足够。您通常可以通过cPanel中的PHP设置或自定义php.ini
文件覆盖共享托管环境中的默认设置。
3. configuration.php中的路径不正确
您可能为tmp和logs文件夹指定了错误的路径。这些是在系统配置中指定的,或者,如果您愿意直接编辑系统文件,则可以在configuration.php文件中直接进行更新。如果不确定路径应该是什么,请创建一个文件whereami.php
(或类似文件)并将其上传到网站的根文件夹,其中包含以下内容:
<?php
print 'Current folder is ' . dirname(__FILE__);
?>
浏览以[mywebsite].com/whereami.php
查看根文件夹的路径。
正确的路径后,请记住删除该whereami.php
文件。
4.不合适的PHP文件处理程序
您的网络托管可以使用默认的PHP文件处理程序进行配置,但理想情况下应使用suPHP或FastCGI或类似文件,以便Joomla可以使用安全文件权限上载和执行文件。
您可以在中看到正在使用什么PHP处理程序System -> System Information -> WebServer to PHP Interface
。
关于PHP文件处理程序的相对优点的文章不错:http : //boomshadow.net/tech/php-handlers
在共享主机环境中,您通常无权更改启用了哪个PHP文件处理程序,但您的网络托管公司可能会为您进行更改。
有时,一种解决方法是,将文件和文件夹权限更改为0777,但这会使您的网站处于脆弱状态,通常应避免使用0777文件权限。
如果您的网络托管公司无法启用suPHP或FastCGI,则唯一的其他选择可能是找到新的网络托管公司。
5.磁盘空间
检查您是否没有超出磁盘空间配额。
故障排除清单
在Linux系统上的Joomla中设置权限和所有权的建议最佳做法是什么?
参见1和4。
无法使用WinSCP等程序将文件传输到服务器。
参见1、2,可能是4和5。
无法安装Joomla扩展程序,插件等。
参见1,2,3,4和5
由于危险的权限和所有权设置,文件和文件夹不安全。
参见1和4。
请检查权限级别,文件和文件夹的权限级别分别为644和755。
很多时候,即使遇到一些问题,权限级别也很好。这意味着您将必须检查特定文件和文件夹的所有权和组。通常,对于apache(在基于ubuntu的Web服务器中使用),可以将组和所有权更改为www-data。
如Shyam所述,权限应为644和755。
在Joomla中,您可以使用以下方法避免提到的所有问题。
无法使用WinSCP等程序将文件传输到服务器。
configuration.php
具有此许可,默认情况下是不允许的(出于安全性考虑)。无法安装Joomla扩展程序,插件等。
由于temp/log
文件夹权限错误,将发生这种情况。(要求755)
或另一个原因是temp/log
路径错误configuration.php
由于危险的权限和所有权设置,文件和文件夹不安全。
希望能有所帮助
如Shyam所述,权限应为644和755。
您面临的问题很可能与服务器的设置方式有关。大多数情况下,这是在共享主机上发生的,在这些主机上Apache在与FTP帐户不同的用户下运行。由于您通常使用FTP上传Joomla,因此Apache不是文件的所有者,因此没有更改文件所需的权限。
Joomla中有一个FTP模式,您可以绕过此问题。您可以在Joomla全局配置中启用它。然后,它将使用FTP用户而不是常规Apache用户进行所有文件访问。
但是,更好的方法是要求您的主机解决此问题。他们可以将PHP(Apache)设置为在特殊用户下运行,在这种情况下,您应该是您的FTP用户。然后一切都会正常。
是的,如Shyam所述,权限应该为644和755 ,但其他张贴者忘记提及这是文件是否属于您的Web服务器,并且该组是您所属的组。
例如,在FileZilla中,您将看到类似以下的权限:
Filename Size Filetype Last Modified Permissions Owner/Group
somefile.txt 11KB txt file 2014-04-23 3:43:00 AM www-data myGroup
权限drwxr-xr-x是755(只需忽略开头的dr,所以它是wxr-xr-x)。读权限为4,写权限为2,执行权限为1.。因此,所有权限加起来为7,这就是该文件的所有者所拥有的。该组具有读取和执行许可权,但没有写许可权,因此它们具有5个权限,每个人也具有5 ..授予权限755。
754是拥有读,写,执行的所有者。具有读取和执行权限的组,每个人都只有读取权限。
在上面的示例中,您可以看到文件所有者是www-data(这是许多Apache服务器的默认Web服务器组),而Group是组myGroup,这是我所属的Group(管理员)。
第一个数字是所有者权限,第二个数字是组的权限,第三个数字是所有人的权限。显然,您必须谨慎地授予Web服务器所需的权限...,并确保仅任何人(第三个数字)都不能写入或执行需要锁定的文件。以下是数字的含义:
假设Web服务器拥有文件,则您的管理员在该组中,当然,每个人都是第三个数字。
644:权限设置为644的文件对所有人都是可读的,并且只能由文件/文件夹所有者写入。
755:权限设置为755的文件对所有人都是可读和可执行的,但只能由文件/文件夹所有者写入。
777:权限设置为777的文件对所有人都是可读,可写和可执行的。出于安全原因,除非绝对必要,请不要在您的Web服务器上使用这组权限,这只是暂时的。这是一场灾难,等待着发生,尤其是如果目录拥有这些权限。.这意味着任何人都可以上传文件并执行它们。
这是设置Joomla的Linux命令!从命令行推荐的权限。推荐的Joomla文件权限
Set ownership: sudo chown -R www-data:myName /path/to/your/domain.com
Set Directories: sudo find /path/to/your/domain.com -type d -exec chmod 755 {} \;
Set files : sudo find /path/to/your/domain.com -type f -exec chmod 644 {} \;
注意-许多人会向您显示这些命令,但不带路径,但是我宁愿始终使用完整路径,因为如果您忘记将目录更改为Joomla根目录!安装目录并在没有路径的情况下运行它们,您刚刚更改了该顶层目录中每个文件和目录的权限,并造成了巨大混乱。
运行这些命令后,您将需要修复所有需要更多权限的目录的权限...例如,用户上载图像等。
如果仅使用JOOMLA!界面,并且您没有对该服务器的管理员或FTP访问权限,则请使用所有权和以上权限。
如果您是新手,请在这里停止。.以下内容仅适用于真正了解权限和所有权的人。
但是,我发现拥有所有权和权限非常不方便,因为我大部分时间都喜欢使用FileZilla和Terminal会话命令行,并且手动上载了很多文件。但是我不能覆盖任何文件,因为我不拥有这些文件,也没有写权限。我可以让FileZilla在Web服务器帐户下登录,但是...我希望FileZilla在我的帐户下登录,所以我也可以浏览其他目录,而不仅仅是Web服务器可以访问的文件。我将所有权和权限更改为此:
Filename Size Filetype Last Modified Permissions Owner/Group
somefile.txt 11KB txt file 2014-04-23 3:43:00 AM drwxr-xr-x myName www-data
我将自己设为所有者,然后将Web服务器放入“组”中,然后将目录的权限更改为775,将文件的权限更改为664。这使我的生活变得更加轻松...但我不建议这样做大家。
如果按照我的方式做,这些是命令:
Set ownership: sudo chown -R myName:www-data /path/to/your/domain.com
Set Directories: sudo find /path/to/your/domain.com -type d -exec chmod 775 {} \;
Set files : sudo find /path/to/your/domain.com -type f -exec chmod 664 {} \;
其他答案很好地说明了应该做什么,如果您已经上传了组件并且无法使用ftp访问文件,我只想添加一个脚本来修复权限。
在这种情况下,我会将文件上传fix.php
到FTP服务器,然后在浏览器中将其打开:http://example.com/fix.php
<?php
file_fix_directory(dirname(__FILE__));
function file_fix_directory($dir, $nomask = array('.', '..')) {
if (is_dir($dir)) {
// Try to make each directory world writable.
if (@chmod($dir, 0777)) {
echo "<p>Made writable: " . $dir . "</p>";
}
}
if (is_dir($dir) && $handle = opendir($dir)) {
while (false !== ($file = readdir($handle))) {
if (!in_array($file, $nomask) && $file[0] != '.') {
if (is_dir("$dir/$file")) {
// Recurse into subdirectories
file_fix_directory("$dir/$file", $nomask);
}
else {
$filename = "$dir/$file";
// Try to make each file world writable.
if (@chmod($filename, 0666)) {
echo "<p>Made writable: " . $filename . "</p>";
}
}
}
}
closedir($handle);
}
}
该脚本将所有文件的权限设置为666,将所有目录的权限设置为777。World writable 不是共享主机的最佳权限集,但是您将能够再次访问文件,然后使用FTP将其设置为正确的值。
晚会了。我到这里是在其他地方寻找有关joomla需要写哪些文件夹的权威指南。
对不起,人们成为坏消息的先兆。
对于所有目录使用权限755,对所有文件夹使用权限644的建议至少是不负责任的。
只要所有者不是Web服务器,就可以使所有文件夹和文件成为所有者可写的(apache等)。
我知道这是推荐的常见做法,但是我可以向您保证这不是好习惯。您要提供的写入文件夹功能的最后一个软件是Web服务器本身。它是供黑客使用的Web服务器,以利用尚未修补(甚至未发现)的漏洞。
您认为.htaccess会拯救您的Kevin吗?忘记它了,因为您允许Web服务器进行写访问,我们亲爱的黑客朋友可以创建自己的.htaccess文件,为他们提供所需的任何权限!像哦,我不知道Umm可以让服务器执行.jpg文件。而且您认为防止.php执行将覆盖您的A。
但是,请确保只有需要写访问权限的文件夹才具有此权限。以下文件夹分别为755和644。
public_html/images
public_html/cache
public_html/tmp
并确保对所有可写文件夹(如上述文件夹)使用AllowOveride关闭.htaccess文件
对于共享托管主机上的那些人,祝您好运,因为这是您无法控制的配置元素。
不要认为将.htaccess文件设置为只读会有所帮助。如果我们的黑客朋友可以创建一个新文件夹(可以),那么他们可以创建自己的.htaccess。
对于那些为所有神圣的事情运行共享主机的人,请获取有关安全性的线索。
如果您不了解安全性,请退出托管业务,这对我们其他人来说变得很艰难。
现在回到我对需要写访问权的文件夹的权威指南的搜索...