跳转到主要内容
一路上有亮 提交于 8 March 2012

原文链接:http://drupal.org/security/secure-configuration

 

应配置服务器的文件系统,使网络服务器(例如Apache)无权编辑或写入文件,然后执行。也就是说,你的所有文件应为Apache进程的“只读”,由一个单独的用户拥有写权限。

作为一个快速测试,以确认您的网站是否是安全的,或没有,你可以运行的安全审查模块。

请注意,这整篇文章是“纵深防御”。Drupal可以运行相当安全与权限的一个小小的“宽松”,他们应该。但是,如果管理员帐户被攻击或攻击损害获得的能力来执行任意代码,然后在下面的配置将限制他们的能力,进一步开拓您的网站。

配置实例

例如,许多系统上运行的Apache进程作为一个用户名为“WWW数据”。用户应该能够阅读你的Drupal目录的所有文件通过组权限或“其他”权限。它不应该有写权限的代码在你的Drupal目录。如果你使用Drupal的功能需要的“文件”目录,然后给www-data用户的写权限的文件,只在该目录。

下面是一个例子文件列表显示在网站的两个文件上传的文件存储在“文件”目录安全配置。为了看到你设置的文件权限设置,进入命令行和类型:LS-AL

drwxrwx---  7 www-data    greg-group  4096 2008-01-18 11:02 files/ drwxr-x--- 32 greg-user   www-data    4096 2008-01-18 11:48 modules/ -rw-r-----  1 greg-user   www-data     873 2007-11-13 15:35 index.php

在上面的例子中,Web服务器的用户有能力写在文件的目录,组中的“格雷格”任何用户可以读取和写入数据,但不允许其他用户与数据交互。“格雷格”和“index.php”的文件(代表所有的代码文件)可以编辑,可以通过WWW的数据组(我们假设在WWW组数据是www-data用户)读取。没有其他用户可以读取该文件。这是一个相当安全的方法配置您的网站。你一般不希望那些有能力读您的服务器上的文件,看到里面那些文件的随机用户,因此过去三年的权限,而不是RX ---。

下面是一个不安全的设置:

NOTE: THIS IS AN INSECURE CONFIGURATION drwxrwx---  7 www-data  www-data  4096 2008-01-18 11:02 files/ drwxrwx--- 32 greg-user www-data  4096 2008-05-16 11:48 modules/ -rw-rw-rw-  1 www-data  www-data   873 2007-11-13 15:35 index.php

这种配置允许www-data用户编辑index.php文件(因为它是代表其他文件中,我们假设每一个文件,使Drupal站点)。此配置是危险的,下面列出的原因。如果您正在使用这样的配置,请立即改变它更喜欢第一个版本。

在许可的数字等值的快速教训

特别号码是小于“读写执行”。  “ 在一般情况下,如特殊的数字4表示读,2表示写,1表示执行”不到有用的“R表示读,w表示写,并利用X执行。”

然而,一些人/软件需要数字,所以:

rwxrwx ---也是770  为了代表其他用户组。有关权限的更多信息,可以发现在本文档后面。

如何不安全的权限问题

如果你让你的网站修改您的网站运行的代码的文件形成,使它更容易为别人接手你的服务器。

最坏的情况:在Drupal中的文件上传工具,允许用户上传任何名义,任何内容的文件。这允许用户上传邮件中继PHP脚本到您的网站,他们可以放置的地方,他们希望到您的服务器变成一台机器,不请自来的商业电子邮件转发。这个脚本也可以用来读取每一个电子邮件地址,您的数据库,或其他个人信息。

不良的情况下以任何名义,如果恶意用户可以上传文件,但无法控制的内容,那么他​​们可以轻松地上传一个文件,它会覆盖你的index.php(或其他重要文件),打破你的网站。

不良的情况:如果代码,使用户能够看到文件的内容,攻击者可以看到的信息,这可能揭示潜在的攻击媒介。

如果你是一个系统管理员

主办的Drupal安装的注意事项

重要的是要注意到,Drupal的核心目录/子目录和文件的用户所有权给下辖的Drupal(通常是root)和组所有权给你的apache运行在该组的用户。“网站”目录内的文件和目录的托管服务器上的网站的用户是谁,是他们的雇主。做到这一点的最好办法是Drupal的根目录下,删除“网站”目录,使一个符号链接到/ home或其他的路径,你用它来存储用户的主目录。这样,如果你创建的用户名相匹配的客户的网站的网址,没有权限将需要改变。唯一需要做的是改变你的Apache上运行组目录的组所有权。

 

cd /path_to_drupal_installation mv sites/* /home rmdir sites ln -s /home sites useradd www.example.com chown -R www.example.com:www-data /home/www.example.com

apache的权限是通过组权限和其他人没有一个Drupal安装上的任何文件和目录的访问。不要以任何方式许可给他人,否则,如果您的系统通过一个给定的用户弱口令的黑客攻击,黑客访问您的服务器上安装的所有网站不仅是一个侵略的所有文件和目录。甚至必须避免一个只读权限,请记住,数据库用户名和密码为每个站点存储在settings.php配置。更糟糕的是,如果你给别人给写权限,黑客将改​​变文件损坏您的网站或您的服务器上传恶意脚本。

本指南中的说明假定一个非托管的安装,因此需要修改的所有权。所以,你看到格雷格,可以取代用户下辖Drupal的,通常是根,但不一定。

按照本指南中,正是因为它是使你的Drupal安装尽可能安全。本指南进行了测试工作。如果出现安装错误,检讨步骤,你可能错过了一些东西。如果真的不起作用发表评论您的疑问,我们会解决这个指南。

Linux服务器

要设置的所有权限一次可以发出从Drupal根目录中的这些命令。我假设,格雷格用户是格雷格组的一部分,格雷格是网站所有者。确保你Drupal的根目录内运行下面的命令,否则你会搞乱你的文件系统的所有权限

 

[root@localhost]cd /path_to_drupal_installation [root@localhost]chown -R greg:www-data . [root@localhost]find . -type d -exec chmod u=rwx,g=rx,o= {} \; [root@localhost]find . -type f -exec chmod u=rw,g=r,o= {} \;

第二个命令将递归用户格雷格和WWW的数据组对Drupal的根目录的所有权。不这样做,如果你在安装托管。到Drupal的根文件和目录root用户必须是主人,不是格雷格。

第三个命令会发现Drupal的根目录上的所有目录和子目录,并执行CHMOD,这将改变权限,读,写和访问用户格雷格,只读访问WWW组数据并没有给别人。总结:rwxr-X ---

第四个命令会发现Drupal的目录内的所有文件,并执行1 CHMOD,这将改变权限,读来读,写用户格雷格WWW组数据并没有给他人。总结:RW-R ---

现在的“文件”目录的权限稍有不同,因为它必须有写权限WWW组数据:

 

[root@localhost]cd /path_to_drupal_installation/sites [root@localhost]find . -type d -name files -exec chmod ug=rwx,o= '{}' \; [root@localhost]for d in ./*/files do    find $d -type d -exec chmod ug=rwx,o= {} \;    find $d -type f -exec chmod ug=rw,o= {} \; done  

上面的“for”循环书面方式为SH-风格的外壳(SH时,bash,ksh的)。如果您使用csh或tcsh,bash的类型,然后执行命令。

这些命令会读取,写入和访问用户格雷格和WWW的数据组和所有“文件”内Drupal的“地盘”的子目录的目录没有给他人(rwxrwx ---),并给予读写权限为用户格雷格组和WWW的数据,并没有其他人发现每个“文件”的子目录内的所有文件(RW-RW ----)。

请记住,任何新安装的模块/主题或任何插件必须有其权限的变化太大,这是之前做它安装在适当的Drupal目录。

的CHMOD非数字权限表示的增编

意义的标志: “+添加权限已分配的 “ - ”撤销获准保持已分配的人 “=”忽略已分配权限,并给出了所列出的 “U”=用户 “G”=组 “O”=  “”=大家(用户,组,人)

对于文件: r =读 瓦特=写 X =执行

目录: R =清单(目录内容 )W =写 X =可以访问的目录。谁拥有一个X目录不能让一张CD。

使用CHMOD没有数值,使得它更可读的。这里是一些如何使用它的例子:

chmod commands and results for a file with permissions rwxrwx--- (770)
chmod human chmod numeric resulting permission
ugo=rwx 777 rwxrwxrwx
u-wx 470 r--rwx---
o+r 774 rwxrwxr--
g-wx,o+r 744 rwxr--r--
u-w,g-wx,o+r 544 r-xr--r--
g=,o=r 704 rwx---r--
a-wx 440 r--r-----

Windows服务器

默认情况下,Apache运行在内置系统帐户。因此,所有你必须​​做的是改变的方式,只有SYSTEM帐户,管理员组和用户格雷格访问Drupal根目录,子目录和文件(假设格雷格是网站所有者)的许可。

你应该排除所有其他用户和组从ACL。对于SYSTEM帐户,提供只读访问所有的Drupal目录,sudirectories,除了“文件”需要写权限的目录中的文件。对于用户格雷格放弃读取,修改和写入权限。管理员组,并给予完全访问。转到Drupal根目录,右击它,去属性,然后安全。

使事情更容易为自己,让使用权限继承。记住,任何新安装的模块/主题或插件必须有其权限的变化太大。最好之前做它安装在适当的Drupal目录。对于那些使用权限继承,它是由Windows自动完成。

特别考虑的settings.php

settings.php文件包含纯文本数据库的密码和用户名,一旦产生,应设置,因此,只有适当的用户可以读取它。这通常意味着删除“其他”用户的阅读权限。

总结权限

  • drupal_admin:在服务器上的用户,下辖Drupal的,不一定是根。
  • site_admin:托管网站的所有者(客户)

所有权

核心模块/主题文件和目录:drupal_admin:www的数据 托管网 ​​站模块/主题/档案文件和目录:site_admin:www的数据

权限

核心模块/主题目录:rwxr-X ---  核心模块/主题文件:RW-R ---  托管网 ​​站模块/主题目录:rwxr-X ---  托管网 ​​站模块/主题文件:RW-R --- -  托管网 ​​站“文件”目录:rwxrwx ---  托管网 ​​站“文件”目录下的文件:RW-RW ----  托管网 ​​站“文件”目录下的子目录:rwxrwx ---

脚本基于上述的指导方针

如果你需要修复权限,然后重复下面的脚本将帮助您,它是基于上述的指导方针和执行任何修改前的一些检查,以确保它不会对你的Drupal安装目录以外的文件/应用。

 

#!/bin/bash path=${1%/} user=${2} group="www-data" help="\nHelp: This script is used to fix permissions of a drupal installation\nyou need to provide the following arguments:\n\t 1) Path to your drupal installation\n\t 2) Username of the user that you want to give files/directories ownership\nNote: \"www-data\" (apache default) is assumed as the group the server is belonging to, if this is different you need to modify it manually by editing this script\n\nUsage: (sudo) bash ${0##*/} drupal_path user_name\n" if [ -z "${path}" ] || [ ! -d "${path}/sites" ] || [ ! -f "${path}/modules/system/system.module" ]; then echo "Please provide a valid drupal path" echo -e $help exit fi if [ -z "${user}" ] || [ "`id -un ${user} 2> /dev/null`" != "${user}" ]; then echo "Please provide a valid user" echo -e $help exit fi cd $path; echo -e "Changing ownership of all contents of \"${path}\" :\n user => \"${user}\" \t group => \"${group}\"\n" chown -R ${user}:${group} . echo "Changing permissions of all directories inside \"${path}\" to \"750\"..." find . -type d -exec chmod u=rwx,g=rx,o= {} \; echo -e "Changing permissions of all files inside \"${path}\" to \"640\"...\n" find . -type f -exec chmod u=rw,g=r,o= {} \; cd $path/sites; echo "Changing permissions of \"files\" directories in \"${path}/sites\" to \"770\"..." find . -type d -name files -exec chmod ug=rwx,o= '{}' \; echo "Changing permissions of all files inside all \"files\" directories in \"${path}/sites\" to \"660\"..." find . -name files -type d -exec find '{}' -type f \; | while read FILE; do chmod ug=rw,o= "$FILE"; done echo "Changing permissions of all directories inside all \"files\" directories in \"${path}/sites\" to \"770\"..." find . -name files -type d -exec find '{}' -type d \; | while read DIR; do chmod ug=rwx,o= "$DIR"; done  

复制上面的代码到一个文件,命名它“修复permissions.sh的”,并运行如下:须藤bash的修复permissions.sh / Drupal的/路径your_user_name

注:假设服务器组的名称“WWW数据”,如果它不同于修改它的脚本代码