User: 用户访问与管理设置

用户(user)模块允许用户注册,登录以及退出。用户的信任来自能登录,因为他关联他们用他们的账号创建的内容,并允许对他们的角色设置不同的权限。用户模块支持用户角色,可以设置正确的权限,使得每个角色只能做管理员允许的事情。每个用户可以被指定一个或多个角色。缺省情况一般有两个角色,匿名用户-没有登录,和授权用户-登录并被授权

在他们个人的我的帐户页面中,用户可以使用他们的名称,也能自由调整某些个人配置。
注册用户需要一个本地用户名和口令来得到授权,或者远程的用户名和口令(比如delpiforms id,或者另外的基于drupal的站点的用户名和口令),访问者访问你的站点注册了一个通用ID,被称为session ID,保存在cookie中。基于安全考虑,cookie不包含个人信息,但是可以作为拿到保存在服务器上的信息的钥匙。

你可以:

  • 显示你的用户页面
  • 管理>>用户 管理用户
  • 管理>>用户>>添加用户 创建新用户
  • 管理>>设置>>用户 修改用户注册信息,email,用户头像等
  • 管理>>主题 允许用户选择他们自己的主题
  • 管理>>帮助>>个人资料 查看用户文件帮助
  • 管理>>管理控制 设置访问权限

使用分布式认证

分布认证

访问新网站时,填写注册表格是个非常繁闷的时刻。在drupalchina.org,如果你已经是drupal的成员,就不需再填写注册信息。这种功能就是分布式认证,也是基于drupal的网站所独一无二的。

当一个新用户在输入栏终输入用户名和密码,即使是用户从来没有在本地注册过,分布式认证也能进行识别。由于drupal知道如何同外部的注册数据库进行通讯。比如,假设一个用户已经用“joe”注册成为了一个“Delphi forums”的成员,drupal在注册和登录界面告诉joe,他可以用他的delphi id在drupalchina.org上注册。Joe认为这很好,用joe@romote.delphiforums.com 和他的口令来登录。Drupal在后台同 remote.delphiforums.com 的服务器通讯(通常使用xml-rpc, http post 或 soap),询问“用户joe的口令是否正确?”。如果 Delphi回答说是,那么我们就为joe创建一个新的帐户,并使他登录。Joe可以用同样的方法登录进入drupalchina.org,他也可以用同样的帐户登录。

Drupal

Drupal是drupal.org所用的软件的名称。世界各地都有drupal的网站,他们中的许多都在共享他们的注册数据库以便于用户可以使用同一个drupal id自由的登录任何drupal网站。

所以,请随意用你在drupalchina.org帐户登录其他的drupal站点。 Drupal id的格式类似于一个email地址:username@server.
示例 :ifly3years@drupal.org 或ifly3years@drupalchina.org

使用权限和用户角色来管理访问控制

角色(role),是指定一个群组的权限一种方法。允许你对安全,使用和管理进行微调。被指定属于某种角色(或某个群组)的用户被认为拥有这个角色的权限。通常使用的角色包含:匿名用户,授权用户,mederater 和管理员

缺省情况,drupal在安装后,自动定义了两种角色

  • 匿名用户――没有账户或没有登录的浏览者
  • 授权用户――drupal站点指定给新帐户的角色

匿名用户角色一般有最小的权限。授权用户,由于他们花了时间来注册,应该授予更多大权限,比如创建某些内容的能力。如果新用户需要管理权限,或者他们符合某种标准(比如拥有一个公司的email地址),你可以用上面的方法给他们更多的权限。

第一个drupal帐户在安装后被创建,被认为是“根用户”,拥有完全的权限,包括管理、内容创建、编辑、删除。

通过管理员创建角色可以给更多的信任用户可以被赋予某些特权,这必须要在管理界面中手工添加角色。要创建新角色,你必须:

  1. 点击 管理>>访问>>访问控制
  2. 在当前角色列表下面的可以输入文字的地方给新角色输入一个标签,
  3. 添加完角色后,选择权限标签
  4. 你的新角色将会在权限表中以新的一列中列出
  5. 要把用户添加到这个角色中,你可以编辑用户帐户信息,点击 管理>>用户 然后点击编辑链接,把用户添加到希望的那个角色中。

为用户分配角色并制定权限

几乎所有的drupal模块可以用对指定角色允许或禁止来控制访问权限,出于安全考虑,站点安装后的匿名和授权用户只被配置了最小化的权限。你必须考虑哪些权限是可以放开的。

到权限管理页面(管理>>访问控制>>权限 列表)中允许或禁止权限,考虑一下下面关于权限的描述

  • 管理员――管理权限。比如管理内容,管理用户,通常是站点内最被信任的保留用户。这些管理权力可以通过权限表中对指定模块的声明状态来达到。举例来说,当对针对指定类型节点的某个模块的管理权限被声明,该用户将能编辑和删除该类型节点的内容。
    提醒:你可以把访问管理页的权限开放给任何需要在管理菜单设置站点权限的角色
  • 访问――声明用户只读访问权限,模块常用的权限(没有明显的配置的话)。典型的是,这些角色不能被允许创建内容。多数访问权限对于任意访问角色来说是安全的,但还是对多数信任用户收回了访问管理的权限。
  • 创建――允许用户创建,但是稍后不需要编辑的类型的内容。通常用于节点类型。
  • 维护――这些权限通常使得用户可以创建内容,并允许提及内容的作者编辑他们自己的内容。如果你想允许新的成员拥有自己的weblog或协同编写手册,你需要给这些授权用户相关的维护权限。

分类访问控制

你还可以按术语分类(taxonomy)来对内容进行访问控制,参见分类访问控制模块(Taxonomy Access Control)的介绍:

基于对术语分类的用户角色访问控制

  • 对术语关键词和节点(基于他们的分类词)自动控制访问
  • 为每种用户角色配置页面
  • 5种类型的权限(显示、升级、删除、创建、列表)

(如果你想对独立的用户进行分类访问控制,请查看tac_lite模块)

增加模块后调整权限

当启用一个模块是,就算是他是关掉后又打开的,针对这个模块的权限将被重新指定到所有的用户角色种。出于安全考虑,管理员需要在启用模块时指定权限给角色。

用户偏好与个人资料

每个drupal用户都有个人资料(profile)和一系列的偏好设定(perference),可以通过点击“我的帐户”来进行编辑。当然,用户必须登录才能看到这个页面。用户可以改变时区、语言、用户名、email地址、口令、主动、签名、主页和分布授权用户名等。修改将立即生效。另外,管理员可以在 管理>>用户 中修改他们描述和偏好。

模块开发者需要提供几个hook来添加自定义的区域来给用户浏览或编辑。在druapl 手册中提供这些hook的说明。比如,可以在/modules/jabber.module中查看jabber_user()函数。

用户认证

注册用户需要一个本地用户名和口令来得到授权,或者远程的用户名和口令,比如jabber,delphi ,或者是另外的基于drupal的站点的用户名和口令。参看分布式认证得到更多信息。

本地用户名和密码,用md5哈西算法,保存在数据库中。输入的密码也要经过哈西运算,然后跟保存在数据库中的数据进行比较。如果哈西符合,用户名和密码就是正确的。

一旦一个授权用户的进程启动,用户就不可能被再次授权,直到这个进程结束。要保持跟踪这个独立的进程,drupal使用了php的进程支持。用户访问站点时被指定了一个唯一的ID,这个所谓的ID,被保存在cookie中。出于安全考虑,cookie不包含个人信息,但是将作为取回保存在服务器上信息的钥匙。当有人访问站点时,drupal将检查该指定的进程ID是否已经发送过请求,如果是,上次的环境将会被再次创建。

NTLM认证

NTLM is a proprietary (and not so good) protocol for deploying Single Sign On in predominantly Windows oriented networks (our company network also). NTLM sits on top of HTTP, so users who are logged on to the Windows Active Directory network can transparently log-on to web services using their Microsoft Windows credentials (and thereby having Single Sign On). Getting IIS servers working with NTLM is easy (it should be), but traditionaly Apache servers have had problems in doing this.
NTLM是一种在windows导向的网络(也是我们公司的网络)中使用的单一签名独占(不一定很好)的协议。NTLM在HTTP的最顶端,登录到windows活动目录的用户可以传输。。。

这篇文档说明了如何在LINUX+apache 的drupal中通过NTLM认证

有几种方式在Apache中可以通过NTLM认证:

  • Mod_ntlm-是一个可以添加NTLM支持的apache模块。该模块并不常用,并且,在不同的版本的apache中编译和运行是一个非常困难的工作。要使用他,编译可能会弹出很多警告信息,使人感到很不方便。
  • mod_ntlm_winbind-为有winbind的box设置的。这个模块可以为apache提供NTLM认证。然而,这个模块还在继续开发并且没有得到很好的测试。

总之,为了帮助在这样不友好的情况下工作的人们,有一个出色的perl 模块可以提供对NTLM的很好的支持。

按照下面的步骤来实现NTLM认证:

  1. 在apache下安装/配置 mod_perl,并使之正常工作。
  2. 下载下面的文件(英文)
  3. 安装下载的模块
                 tar xvfz Apache*AuthenNTLM*.tgz
                 cd Apache*AuthenNTLM*
                 perl Makefile.PL
                 make
                 make test
                 make install
       

  4. 编辑apache的配置文件,启用keepalive。
             KeepAlive On
        

    重启动apache服务

  5. 配置apache进行认证。例如在.htaccess中添加:
       	     # Enable the Authentication module
                 PerlAuthenHandler Apache2::AuthenNTLM
                 
                 # Do NTLM and basic authentication
                 AuthType ntlm,basic
                 
                 # The name that should be displayed in the Auth box, if NTLM fails
                 AuthName OurCompany
                 
                 # Ask for a valid user.
                 require valid-user
                 	
                 #                    domain      pdc         bdc
                 # Domain : Your windows domain
                 # pdc : Primary Domain Controller
                 # bdc : Backup Domain controller.
                 #
                 # Note : Multiple domains can be specified.
                 
                 PerlAddVar ntdomain  "OURDOMAIN  domainpdc domainsdc"
                 
                 # What should be the default domain
                 PerlSetVar defaultdomain OURDOMAIN
                 
                 # The user names are in the form "OURDOMAIN\user_name". Let us split it.
                 PerlSetVar splitdomainprefix 1
                 
                 # Set the debug variables
                 PerlSetVar ntlmdebug 0
                 PerlSetVar ntlmauthoritative off
       

    可以在tarballlink中的readme文件中看到更多的文档信息。

    一旦这些做完了,域用户将作为在apache服务器中设置为REMOTE_USER变量,可以被用来进行验证

  6. 现在,我们需要启用drupl来检查用户ID和自动创建用户。一旦我们启用了NTLM验证,用户ID将作为REMOTE_USER。Webserver auth模块可以使用这个变量来自动登录用户。

    下载,安装,启用和配置webserver auth 模块。你就可以把drupal嵌入一个基于windows的活动目录的网络中了。

过滤email地址

在用户设置里你还可以对用户注册的email地址进行过滤,比如只允许drupalchina.org地址的用户注册,而拒绝使用公用邮箱(比如yahoo.com或者gmail.com)的用户注册。

可以在管理>>访问控制>>访问规则 下面添加下面的访问规则:

Deny "%@%" (这一条先拒绝所有用户注册)
Allow "%@drupalchina.org" (这一条将允许drupalchina.org的用户注册)