有关Linux系统上的Joomla文件/目录权限和所有权的建议做法?


26

过去,我经常遇到Linux系统上Joomla文件/目录的权限和所有权问题。

包括的问题

  • 无法使用WinSCP等程序将文件传输到服务器。
  • 无法安装Joomla扩展程序,插件等。
  • 由于危险的权限和所有权设置,文件和文件夹不安全。

在Linux系统上的Joomla中设置权限和所有权的建议最佳做法是什么?

Answers:


22

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。


1
就我而言,我认为PHP处理程序是问题的很大一部分。
TryHarder 2014年

1
+1您的答案并没有真正解决我的问题,但是我得到启发来检查我的服务器的PHP设置-安全模式,事实证明它已启用-已启用。因此,将其关闭是解决方案。因此,如果以后的读者都
无法解决

12

请检查权限级别,文件和文件夹的权限级别分别为644和755。

很多时候,即使遇到一些问题,权限级别也很好。这意味着您将必须检查特定文件和文件夹的所有权和组。通常,对于apache(在基于ubuntu的Web服务器中使用),可以将组和所有权更改为www-data。

根据验证的文件权限,随时查看这个有趣的Joomla文档


Joomla通常是否属于www-data组吗?
TryHarder 2014年

1
连同Shyam的答案,我们使用SuPHP Apache模块。我们发现,安装扩展程序后,便无法通过FTP修改这些文件,反之亦然(文件所有权问题)。SuPHP通过确保PHP脚本在其所有者的权限下运行为我们解决了此问题。
Zachary Draper 2014年

1
apache进程在unix-group的“ www-data”下运行。它不仅是joomla,还是所有基于Apache的应用程序。
Shyam

是否可以开发和运行Shell脚本来自动修复所有文件权限?
NivF007 2014年

1
是。gist.github.com/ssv445/11204300您可以在cron中运行脚本。
Shyam

8

对我来说,一个简单的解决方案是经常让PHP以(Fast-)CGI模式运行,并将Joomla目录的所有权设置为FTP用户。因此,您将能够通过FTP上传和覆盖文件,而Joomla也将能够写入文件。

在共享主机环境(如果允许)上执行此操作的一种方法是,将以下内容添加到您的.htaccess文件中:

AddHandler php53-cgi .php

另请参阅有关不同模式的概述。


7

如Shyam所述,权限应为644和755。

在Joomla中,您可以使用以下方法避免提到的所有问题。

无法使用WinSCP等程序将文件传输到服务器。

  • 这可能是由于(444)的许可而发生的,例如Joomla configuration.php具有此许可,默认情况下是不允许的(出于安全性考虑)。
  • 此相同错误的另一种情况是将站点或文件夹从一台服务器传输到另一台服务器时。

无法安装Joomla扩展程序,插件等。

  • 由于temp/log文件夹权限错误,将发生这种情况。(要求755)

  • 或另一个原因是temp/log路径错误configuration.php

由于危险的权限和所有权设置,文件和文件夹不安全。

  • 这是最重要的Joomla总是建议不要使用777文件和文件夹,如果你不知道这个

希望能有所帮助


7

如Shyam所述,权限应为644和755。

您面临的问题很可能与服务器的设置方式有关。大多数情况下,这是在共享主机上发生的,在这些主机上Apache在与FTP帐户不同的用户下运行。由于您通常使用FTP上传Joomla,因此Apache不是文件的所有者,因此没有更改文件所需的权限。

Joomla中有一个FTP模式,您可以绕过此问题。您可以在Joomla全局配置中启用它。然后,它将使用FTP用户而不是常规Apache用户进行所有文件访问。

但是,更好的方法是要求您的主机解决此问题。他们可以将PHP(Apache)设置为在特殊用户下运行,在这种情况下,您应该是您的FTP用户。然后一切都会正常。


用户/组就是答案,正如您所说的,使用PHP的特殊用户可以解决此问题,尤其是当它与FTP用户重合时。
jackJoe 2014年

5

是的,如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 {} \;  

“ drwxr-xr-x是755”-这将是751(对于公共用户来说缺少读权限),而不是755。(尽管755对于目录来说更“正常”。)
MrWhite 2014年

4

其他答案很好地说明了应该做什么,如果您已经上传了组件并且无法使用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将其设置为正确的值。


1

晚会了。我到这里是在其他地方寻找有关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。

对于那些为所有神圣的事情运行共享主机的人,请获取有关安全性的线索。

如果您不了解安全性,请退出托管业务,这对我们其他人来说变得很艰难。

现在回到我对需要写访问权的文件夹的权威指南的搜索...


感谢Chris,但我可能会坚持使用标准的755和644文件权限,而Joomla官方网站和Sucuri等安全专家建议使用此权限:docs.joomla.org/Security_and_Performance_FAQs blog.sucuri.net/2015/09/ …
尼尔·罗伯逊

是的,我知道它的“建议”,但是一旦您被利用并弄清楚为什么被利用,我可以向您保证“建议”会被抛在窗外并从头开始。建议是阻力最小的途径。不是最安全的。
DeveloperChris

joomla.stackexchange.com/a/180/120上的“保持Joomla网站安全”列表中的第1步到第10 以及标准文件权限对于我一直在寻找的50个左右网站都可以正常工作最近几年。当然,您的里程可能会有所不同。
尼尔·罗伯逊

@NeilRobertson我同意该列表,但是如果存在未被其利用的漏洞利用,您的最后一道防线是不向Web服务器授予写许可权(apache等)。顺便说一句,这不是关于joomla的建议。同样,大多数人也无法执行该列表中的许多建议。他们只是没有资源或正在使用便宜的(不是最便宜的)托管。
DeveloperChris
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.