drupal文件目录功能介绍以及目录权限设置,读写权限设置 - 小众知识

drupal文件目录功能介绍以及目录权限设置,读写权限设置

2014-10-28 11:53:16 苏内容
  标签: drupal/权限/目录
阅读:4297
文件夹目录中的每一元素的详解如下:
 
includes :包含了Drupal常用的函数库。
 
misc:用来存储Drupal安装中可用的JavaScript,和其它各种图标和图片文件。
 
modules:包含了所有核心模块,其中一个模块对应一个文件夹。最好不要乱动这个文件夹(包括profiles和sites以外的其它目录)下面的任何东西,你要添加的其它模块须放到sites目录下。
 
profiles:包含一个站点的不同安装轮廓。如果在这个子目录下面,除了默认的轮廓以外,还有其它的轮廓,那么在你第一次安装你的Drupal站点时,Drupal将向你询问想要安装哪一个轮廓。安装轮廓的主要目的是,用来自动的启用核心的或者第3方的模块。比如一个电子商务轮廓,它将自动把Drupal安装成为一个电子商务平台。
 
scripts:包含了许多脚本,这些脚本可用于语法检查,代码清洁,从命令行运行Drupal,使用cron处理特定情况等等。在Drupal的请求生命周期中,用不到它;里面包含一些shell和Perl的实用脚本。
 
sites:包含了你对Drupal所进行的修改,包括设置、模块、主题等形式(参看图1-5)。你从第3方模块库中下载的模块,或者你自己编写的模块,都放在sites/all/modules下面。这使得你对Drupal所进行的任何修改都保存在单个文件夹里。在目录sites下面有一个名为default的子目录,里面包含了你的Drupal站点的默认的设置文件--- default.settings.php。Drupal安装器,将会基于你提供的信息来修改这些原始设置,并为你的站点创建一个settings.php文件。站点的部署人员,通常会拷贝默认目录,并将其重命名为你站点的URL,所以你最终的设置文件就位于sites/www.example.com/settings.php.
 
sites/default/files:Drupal默认是不包含这个文件夹,但是当你需要上传文件接着提供对外访问时,就需要用到这个目录了。一些示例包括,定制的logo,启用用户头像,或者向你的站点上传其它媒体文件时,你就用到了这个文件夹。运行Drupal的web服务器需要具有对这个子目录进行读和写的权限。如果可以的话,Drupal的安装器将会为你自动的创建这个子目录,并检查是否设置了相应的权限。
 
themes:包含了Drupal的模板引擎和默认主题。你下载的或者创建的其它主题,不能放在这里;应该放在sites/all/ themes中。
 
cron.php:用来执行周期性任务,比如清理过期缓存数据,以及计算统计信息。
 
index.php:处理请求的主入口。
install.php: Drupal安装器的主入口。
update.php: Drupal版本升级后,用来更新数据库模式(schema)。
xmlrpc.php: 用来接收XML-RPC请求,如果你的网站不打算接收XML-RPC请求的话,那么可以将其从中删除。
robots.txt:它是搜索引擎爬虫排除标准的默认实现。


安装成功后,需将sites目录及目录下所有文件夹文档的所有者设定为web服务器虚拟用户【例如:chown -R apache.apache /var/www/drupal/sites】,然后更改目录及目录下所有文件夹文档的权限为所有者拥有全部权限【chmod -R 700 /var/www/drupal/sites】。
P.S.我想应该不需要给其他用户什么权限了,因为操作这个目录的一般情况只有服务器的寄宿账户,而且一般也不会出现不一般的情况。
 
 
P.s.没有安装时需要知道的:
1.就上面的这些吧。
2.可能需要自己在原目录下复制粘贴./sites/default/default.settings.php并重命名为settings.php。

切记,安装成功后要检查好权限,当然如果你把整个网站目录的权限全部设置成任何用户都拥有全部权限【chmod -R 777 /var/www/drupal】也是可以的——如果你不在乎这个网站出问题的话!


如何在nginx下控制Drupal文件的访问权限
By g089h515r806 on 15 4月 2009
当你上线了一个Drupal站点时,你有没有发现有些黑客能够盗取你的.module文件,你的服务器并不安全。你编写的代码很有可能会被人轻易的盗走。在Apache下面,这种情况不会发生,但是有些服务器下面,如果你不进行配置,有些人会根据一些线索下载你的模块的。
       我就曾经把国内一个比较出名的Drupal网站的模块,一个一个的下载了下来,并读了他们的源代码。我从来没有敢把这件事告诉别人,很多人拿那个Drupal网站,问我能不能实现同样的功能,其实那个网站的源代码我都下载过,而且读过一遍。
 
       以前我的网站zhupou.cn放在了apache上,后来搬到了lonlife提供的服务器上,这个服务器不是apache,而是nginx,我就遇到了同样的问题,我能够根据路径下载我的模块,刚开始还行,上面没有放置很多东西。现在有些模块,有些功能我打算卖钱了。这样就有了安全的考虑了。
       Nginx下控制Drupal站点的访问权限,其实很简单,配置一下就可以了。需要配置一个地方nginx.conf,添加以下内容:
 
  # hide protected files
  location ~* \.(engine|inc|info|install|module|profile|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(code-style\.pl|Entries.*|Repository|Root|Tag|Template)$ {
    deny all;
  }
 
这样黑客就不会下载你的模块资源了。



  服务器的文件系统应该做好安全性的配置,以确保服务器程序(如 apache)没有对文件的编辑和写权限,即是说,对服务器端口程序而言,文件是“只读”的,而文件所有权则被赋予单独的系统用户。

配置示例

  例如,大多数系统中,apache的进程由用户"apache“执行,因此这个用户应该具备对Drupal站点内的所有文件的“可读”权限,这个权限可以通过组(group)权限或者其它用户(other)权限赋予。服务器进程用户(如 apache)不应当具备对Drupal站点内文件(及目录)的“写”权限,不过对于 files 目录(上传文件的默认目录),则可以设置一个例外。

  以下是一个安全的文件权限配置示例,其中 lugir 为常规用户,apache 为服务器进程用户,files 目录是指 Drupal 的默认上传目录(即 sites/default/files),modules  目录在此作为 Drupal 站点中的目录代表,index.php 则作为 Drupal 站点内的文件代表,分别用来展示 Drupal 站点中目录和文件应有的文件权限。通过在命令行下键入 ls -al,可以得到以下输出,以查看文件权限的配置情况。

drwxrwx--- 7  apache lugir  4096 2008-01-18 11:02 files/
drwxr-x--- 32 lugir  apache 4096 2008-01-18 11:48 modules/
-rw-r----- 1  lugir  apache 873  2007-11-13 15:35 index.php
  在上例中,服务器用户(apache)对 files 目录有写权限,任何属于"lugir"组的用户对此目录也有相同的权限,但其它用户则不被允许对此目录有任何交互行为。index.php 文件(在此代表所有文件)可以被"lugir"组的成员进行编辑,apache组的成员则只能读取该文件,其它用户则不允许读写此文件(通常情况下你不希望其它用户读取你的文件,因此目录和文件的后三个权限位被设置为 ---,而不是 r-x)。

以下是一个不安全的权限配置示例:

NOTE: THIS IS AN INSECURE CONFIGURATION
drwxrwx--- 7  apache apache 4096 2008-01-18 11:02 files/
drwxrwx--- 32 lugir  apache 4096 2008-05-16 11:48 modules/
-rw-rw-rw- 1  apache apache 873  2007-11-13 15:35 index.php
  这个示例允许 apache 用户编辑 index.php 文件(因为示例中,我们以index.php代表所有其它文件,所以可以可能发生的安全问题同等假设到此Drupal站点中的所有其它文件)。将这种配置定为危险配置的原因将在下文中一一说明,如果你正使用这样一个文件权限配置,请立即将其改为第一种版本的形式。

文件权限与数值对应关系

  文件的权限使用 rwx 表示,其分别是 read(读)、write(写)、execute(执行)的缩写。

  除了用 r,w,x 这三个字母缩写外,还可以用数值来进行权限表示,其中 4 表示 read,2 表示 write,1 表示 execute。

  因此文件权限 rwxrwx--- 也可能视作 770

Drupal 站点文件权限修正脚本 - Linux 服务器
(Windows用户请从文末的参考文档中阅读适用于Windows的修正方法)

  为了修正Drupal站点中的文件权限问题,可以从Drupal站点根目录执行以下命令,此命令假设服务器进程用户为apache,假设用户 webmaster 为站点管理员,且用户 webmaster 属于 webmaster 组。请确保你在Drupal站点的权限目录运行以下命令,否则可能搞乱你的文件系统权限。

第一部分

[root@localhost]cd /path_to_drupal_installation
[root@localhost]chown -R webmaster:apache .
[root@localhost]find . -type d -exec chmod u=rwx,g=rx,o= {} \;
[root@localhost]find . -type f -exec chmod u=rw,g=r,o= {} \;
第一行命令,将当前路径切换到Drupal站点安装目录;
第二行命令,递归地查看Drupal站点下的目录和文件,并将用户webmaster和组apache设为目录和文件的所有者。不要在托管环境下执行这个命令;
第三行命令,从Drupal站点根目录开始寻找目录和子目录,并执行chmod命令将所有目录的权限更改为所有者(此例为webmaster)“可读”“可写”“可执行”,所有者组(此例为apache组)用户“可读”“可执行”,其它用户无权限;
第四行命令,从Drupal站点根目录开始寻找所有文件,并执行chmod命令将所有文件的权限更改为所有者“可读”“可写”,所有者组“可读”,其它用户无权限
  因为 files 目录与其它目录稍有不同,因此还需要执行以下命令为apache组添加“写”权限

第二部分

[root@localhost]cd /path_to_drupal_installation/sites
[root@localhost]find . -type d -name files -exec chmod ug=rwx,o= '{}' \;
[root@localhost]find . -name files -type d -exec find '{}' -type f \; | while read FILE; do chmod ug=rw,o= "$FILE"; done
[root@localhost]find . -name files -type d -exec find '{}' -type d \; | while read DIR; do chmod ug=rwx,o= "$DIR"; done
  这些命令在 sites 目录下执行,将 files 目录及其下的所有子目录赋予以下权限:所有者“可读”“可写“”可执行”,所有者组“可读”“可写”“可执行”,其它无权限;为 files 目录下的所有文件赋予以下权限:所有者“可读“”可写“,所有者组”可读“”可写“,其它无权限。

  请记得,任何后添加的模块/主题的权限都要做相应的修改,因此最好在安装模块/主题之前先配置好其所在目录的权限。

完整的脚本

  以下提供了一个基于以上本文以上准则的权限修复脚本,你可以在每次需要修复Drupal站点的文件权限时使用此脚本。此脚本还添加了目录检测机制,以防止因为路径不正确而造成错误的文件权限修改。

#!/bin/bash

path=${1%/}
user=${2}
group="apache"
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: \"apache\" (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
使用方法:

  请将以上代码复制到一个新建的脚本文件中,将其命令为 fix-permission.sh,并通过以下命令执行此脚本,以实现权限修复。

sudo bash fix-permissions.sh your/drupal/path your_user_name
参考文档:http://drupal.org/node/244924

扩展阅读
相关阅读
© CopyRight 2010-2021, PREDREAM.ORG, Inc.All Rights Reserved. 京ICP备13045924号-1