php www用户组 为apache_把apache用户加入root用户组 - CSDN
精华内容
参与话题
  • php apache用户写文件夹权限设置

    万次阅读 2011-11-11 21:22:29
    php一般是以apache用户身份去执行的,把apache加入到...的权限,当然,属组最好不要是root,你可以该文件夹改个其它普通用户组。 改apache/php的运行用户方法不安全,不建议使用。 1. 定位httpd.conf文件
    php一般是以apache用户身份去执行的,把apache加入到存储你文件的父文件夹属组里去,然后改该父文件夹权限为775,这样属组成员就有写的权限,而apache属于这个组就可以改写该目录下所有文件


    的权限,当然,属组最好不要是root,你可以为该文件夹改个其它普通用户组。


    改apache/php的运行用户方法不安全,不建议使用。


    1. 定位httpd.conf文件: locate httpd.conf   


    2. 找到配置文件后打开: vim /usr/local/apache2/conf/httpd.conf


    3. 修改apache用户的所在组与其父文件夹一致: vim下x表示删除;i表示插入;将user用户下面的Group的属性值改为存储你文件的父文件夹属组


    4. 重新启动apache: /usr/local/apache2/bin/apachectl restart

    这样属组成员就有写的权限,而apache属于这个组就可以改写该目录下所有文件的权限。





    展开全文
  • apache目录权限设置

    万次阅读 2012-03-13 16:58:42
    环境配置情况: apache安装目录:d:/...专门运行Apache运行所使用的用户:apache-u(可不隶属于任何用户组) PS:这里只说Windows下Apache应用环境相关的目录权限设置,至于其他基本的服务器目录权限设置就不提啦

    环境配置情况:
    apache安装目录:d:/www-s/apache
    php目录:d:/www-s/php5
    mysql目录:d:/www-s/mysql
    网站根目录:d:/www/htdocs
    专门为运行Apache运行所使用的用户:apache-u(可不隶属于任何用户组)
    PS:这里只说Windows下Apache应用环境相关的目录权限设置,至于其他基本的服务器目录权限设置就不提啦!
    Windows下Apache应用环境塔建目录安全设置操作步骤:
    配置目录权限

    Apache所在的根目录(也就是D盘),只需要读取的权限,并且这个读取权限不需要继承到子目录与文件(可以在权限设置高级里选择——应用到:只有该文件夹——权限:列出文件夹/读取数据, 读取属性,读取扩展属性,读取权限——确定)。
    Apache安装目录的上级目录(d:/www-s),需要“读取”的权限(和根目录D盘的权限雷同)。
    Apache安装目录,需要“列出文件夹目录”和“读取”的权限(可以为了方便使用继承)。
    Apache安装目录下的子目录权限设置
    “bin”和“modules”目录需要“读取和运行”、“列出文件夹和目录”、“读取”的权限。
    “logs”目录需要“列出文件夹和目录”、“读取”、“写入”的权限(若Apache安装目录的权限使用啦继承,可只添加“写入”权限即可)。
    到这里Apache的权限已经设置完毕,接下来设置PHP的权限
    PHP目录(PHP5)可简单的设置为“读取和运行”、“列出文件夹和目录”、“读取”的权限。
    Mysql目录下的bin文件夹和文件(mysql)需要为添加apache用户的“遍历文件夹和运行文件”、“列出文件夹和读取数据”的权限(可以在权限高级设置里找到)。

    记得给这个用户php.ini及windows(仅当前目录)目录和system32目录(子目录及子文件)的可读权限


    php.ini中指定的PHP临时上传目录和session保存目录,并给予这个用户此二目录完全控制权限,例如:
    upload_tmp_dir = “X:/wwwroot/Tmp/uploadtmp/”
    session.save_path = “X:/wwwroot/Tmp/sessiontmp/”

    到这里Apache+Mysql+Php已经基本可以使用,接着配置网站根目录权限
    网站根目录(www/htdocs)的上级目录www需要读取(“列出文件夹和读取数据”、“读取属性”、“读取扩展属性”、“读取权限”)的权限(和Apache的上级目录权限雷同,不需要继承到子目录和文件中去)。
    网站根目录(htdocs)可简单的设置“读取”权限就可以啦(然后可以根据需要对缓存文件夹设置可写权限)。
    到这里Apache+PHP+Mysql的环境受限制权限设置基本完成。
    为Apache服务启用受限制用户
    进入服务管理器(Services.msc,或者“我的电脑——属性——管理——服务”),找到Apache的服务项(Apache2.2),设置属性,登录用户选择受限用户(Apache-u)输入受限用户的密码,应用,确定。
    这里“确定”之后一般会有提示(已授予账户./apache-u“以服务方式登录”的权利)。这个提示相当于在组策略(开始->管理工具->本地安全策略,或者使用gpedit.msc打开)中的“用户权利分配”中选择“作为服务登陆”,添加apache-u用户。
    可在任务管理器中查看httpd.exe进程的用户名为apache-u,使用PHP+Mysql的程序都可正常运行。
    到这里已经完成啦“Windows下Apache应用环境目录权限”的受限制使用设置。
    补充3:
    可以在目录(具有可写权限的)下建个 .htaccess 内容写上:

    RewriteEngine On
    Order Allow,Deny
    Deny from all
    <files ~ “.(css|js)$”>
    Allow from all
    </files> 

    css和js为允许的文件扩展类型!
    补充2:
    1.Apache的权限设置错误提示
    apache目录,php目录,网站目录中的一个权限设置不够都不能正常启动Apache服务,一般提示为:

    Windows 不能再 本地计算机 启动 Apache2.2。有关更多信息,查阅系统事件日志。如果这是非 Microsoft服务,请与服务厂商联系,并参与特定服务错误代码 1。

    查看系统事件日志中的提示为:

    Apache2.2 服务因 1 (0×1) 服务性错误而停止。

    若是php的权限配置错误会在应用程序事件日志中有记录。
    2.另外Mysql的目录权限配置错误,不会对正常启动Apache服务造成影响,但不能网站程序使用Mysql服务(PHPINFO中显示并没有加载Mysql模块)。
    补充1:
    这个东东在本地机子上用来做测试基本是不用理会这些权限的,因为默认是使用系统用户来启动这个Apache服务的!不过若是暴露在外网就很危险啦!
    安全是全方面的架构考虑,这里说的仅仅是冰山一角,不能以点盖面!
    发现有遗漏的地方欢迎指正。。

     

    展开全文
  • apache用户名和密码验证

    万次阅读 2014-01-24 15:14:15
    一、Apache服务器已经内置用户验证机制 大家只要适当的加以设置,便可以控制网站的某些部分要用户验证。前期准备,必须已经安装apache,如果还没安装,或者对安装很模糊的话,  第1步:我们在/var/www(apache的...

    一、Apache服务器已经内置用户验证机制

    大家只要适当的加以设置,便可以控制网站的某些部分要用户验证。前期准备,必须已经安装apache,如果还没安装,或者对安装很模糊的话,
         第1步:我们在/var/www(apache的主页根目录)下建立一个test目录
                 mkdir /var/www/test
         第2步:然后我们编辑httpd.conf
                 添加
                       Alias /test"/var/www/test"
                       Options Indexes MultiViews
                       AllowOverride AuthConfig #表示进行身份验证
                       Order allow,deny
                       Allow from all
         #AllowOverride AuthConfig 表示进行身份验证这是关键的设置
         第3步:在/var/www/test创建.htaccess文件
                 vi /var/www/test/.htaccess
                        AuthName "frank share web"
                        AuthType Basic
                        AuthUserFile /var/www/test/.htpasswd
                        require valid-user
            #AuthName 描述,随便写
            #AuthUserFile /var/www/test/.htpasswd
            #require valid-user 或者 require user frank 限制是所有合法用户还是指定用户
            #密码文件推荐使用.htpasswd,因为apache默认系统对“.ht”开头的文件默认不允许外部读取,安全系数会高一点哦。
         第4步:就是创建apache的验证用户
              htpasswd -c /var/www/test/.htpasswd frank
              #第一次创建用户要用到-c 参数 第2次添加用户,就不用-c参数
                如果你们想修改密码,可以如下
                                  htpasswd -m .htpasswd frank
         第5步:
         ok,重启apache服务,然后访问 http://你的网站地址/test 如果顺利的话,应该能看到一个用户验证的弹出窗口,只要填入第4步创建的用户名和密码就行
    后话,为了服务器的性能,一般不推荐使用AllowOverride AuthConfig或者AllowOverride ALL,因为这会使服务器会不断的去寻找.htaccess,从而影响服务器的效能,一般我们把一些后台管理界面或者其他特殊目录可能需要加验证这个需求。

    二、经常上网的读者会遇到这种情况:

         访问一些网站的某些资源时,浏览器弹出一个对话框,要求输入用户名和密码来获取对资源的访问。这就是用户认证的一种技术。用户认证是保护网络系统资源的第一道防线,它控制着所有登录并检查访问用户的合法性,其目标是仅让合法用户以合法的权限访问网络系统的资源。基本的用户认证技术是“用户名+密码”。

      Apache是目前流行的Web服务器,可运行在Linux、Unix、Windows等操作系统下,它可以很好地解决“用户名+密码”的认证问题。Apache用户认证所需要的用户名和密码有两种不同的存贮方式:一种是文本文件;另一种是MSQL、Oracle、MySQL等数据库。下面以Linux的Apache为例,就这两种存贮方式,分别介绍如何实现用户认证功能,同时对Windows的Apache用户认证作简要的说明。
      1)采用文本文件存储
      这种认证方式的基本思想是:Apache启动认证功能后,就可以在需要限制访问的目录下建立一个名为.htaccess的文件,指定认证的配置命令。当用户第一次访问该目录的文件时,浏览器会显示一个对话框,要求输入用户名和密码,进行用户身份的确认。若是合法用户,则显示所访问的页面内容,此后访问该目录的每个页面,浏览器自动送出用户名和密码,不用再输入了,直到关闭浏览器为止。以下是实现的具体步骤:
      以超级用户root进入Linux,假设Apache 1.3.12已经编译、安装到了/usr/local/apache目录中。缺省情况下,编译Apache时自动加入mod_auth模块,利用此模块可以实现“用户名+密码”以文本文件为存储方式的认证功能。
      1.修改Apache的配置文件/usr/local/apache/conf/httpd.conf,对认证资源所在的目录设定配置命令。下例是对/usr/local/apache/htdocs/members目录的配置:
      <Directory /usr/local/apache/htdocs/members>
      Options Indexes FollowSymLinks
      allowoverride authconfig
      order allow,deny
      allow from all
      </Directory>
      其中,allowoverride authconfig一行表示允许对/usr/local/apache/htdocs/ members目录下的文件进行用户认证。
      2.在限制访问的目录/usr/local/apache/htdocs/members下建立一个文件.htaccess,其内容如下:
      AuthName "会员区"
      AuthType basic
      AuthUserFile/usr/local/apache/members.txt
      require valid-user
      说明:文件.htaccess中常用的配置命令有以下几个:
      1) AuthName命令:指定认证区域名称。区域名称是在提示要求认证的对话框中显示给用户的(见附图)。
      2)AuthType命令:指定认证类型。在HTTP1.0中,只有一种认证类型:basic。在HTTP1.1中有几种认证类型,如:MD5。
      3) AuthUserFile命令:指定一个包含用户名和密码的文本文件,每行一对。
      4) AuthGroupFile命令:指定包含用户组清单和这些组的成员清单的文本文件。组的成员之间用空格分开,如:
      managers:user1 user2
      5) require命令:指定哪些用户或组才能被授权访问。如:
      require user user1 user2(只有用户user1和user2可以访问)
      requiresgroupsmanagers (只有组managers中成员可以访问)
      require valid-user (在AuthUserFile指定的文件中任何用户都可以访问)
      3.利用Apache附带的程序htpasswd,生成包含用户名和密码的文本文件:/usr/local/apache/members.txt,每行内容格式为“用户名:密码”。
      #cd /usr/local/apache/bin
      #htpasswd -bc ../members.txt user1 1234
      #htpasswd -b ../members.txt user2 5678
      文本文件members.txt含有两个用户:user1,口令为1234;user2,口令为5678。注意,不要将此文本文件存放在Web文档的目录树中,以免被用户下载。
      欲了解htpasswd程序的帮助,请执行htpasswd -h。
      当用户数量比较少时,这种方法对用户的认证是方便、省事的,维护工作也简单。但是在用户数量有数万人,甚至数十万人时,会在查找用户上花掉一定时间,从而降低服务器的效率。这种情形,应采用数据库方式。
      2)采用数据库存储
      目前,Apache、PHP4、MySQL三者是Linux下构建Web网站的最佳搭档,这三个软件都是免费软件。将三者结合起来,通过HTTP协议,利用PHP4和MySQL,实现Apache的用户认证功能。
      只有在PHP4以Apache的模块方式来运行的时候才能进行用户认证。为此,在编译Apache时需要加入PHP4模块一起编译。假设PHP4作为Apache的模块,编译、安装Apache到/usr/local/apache目录,编译、安装MySQL到/usr/local/mysql目录。然后进行下面的步骤:
      1.在MySQL中建立一个数据库member,在其中建立一个表users,用来存放合法用户的用户名和密码。
      1)用vi命令在/tmp目录建立一个SQL脚本文件auth.sql,内容为:
      drop database if exists member;
      create database member;
      use member;
      create table users (
      username char(20) not null,
      password char(20) not null,
      );
      insertsintosusers values("user1",password("1234"));
      insertsintosusers values("user2",password("5678"));
      2)启动MySQL客户程序mysql,执行上述SQL脚本文件auth.sql的命令,在表users中增加两个用户的记录。
      #mysql -u root -pmypwd</tmp/auth.sql
      2.编写一个PHP脚本头文件auth.inc,程序内容为:
      <?php
      function authenticate() {
      Header('WWW-authenticate: basic realm="会员区"');
      Header('HTTP/1.0 401 Unauthorized');
      echo "你必须输入正确的用户名和口令。 ";
      exit;
      }
      function CheckUser(, ) {
      if ( == "" || == "") return 0;
       = "SELECT username,password FROM usersswheresusername='' and password=password('')";
       = mysql_connect('localhost', 'root', 'mypwd');
      mysql_select_db('member',);
       = mysql_query(, );
      =mysql_num_rows();
      mysql_close();
      if (>0) {
      return 1; //有效登录
      } else {
      return 0; //无效登录
      }
      }
      ?>
      函数Authenticate()的作用是利用函数Header('WWW-authenticate: basic realm="会员区"'),向浏览器发送一个认证请求消息,使浏览器弹出一个用户名/密码的对话框。当用户输入用户名和密码后,包含此PHP脚本的URL将自动地被再次调用,将用户名、密码、认证类型分别存放到PHP4的三个特殊变量:、、,在PHP程序中可根据这三个变量值来判断是否合法用户。Header()函数中,basic表示基本认证类型,realm的值表示认证区域名称。
      函数Header('HTTP/1.0 401 Unauthorized')使浏览器用户在连续多次输入错误的用户名或密码时接收到HTTP 401错误。
      函数CheckUser()用来判断浏览器用户发送来的用户名、密码是否与MySQL数据库的相同,若相同则返回1,否则返回0。其中mysql_connect('localhost', 'root', 'mypwd')的数据库用户名root和密码mypwd,应根据自己的MySQL设置而改变。
      3.在需要限制访问的每个PHP脚本程序开头增加下列程序段:
      <?php
      require('auth.inc');
      if (CheckUser(,)==0) {
      authenticate();
      } else {
      echo "这是合法用户要访问的网页。"; //将此行改为向合法用户输出的网页
      }
      ?>
      把需要向合法用户显示的网页内容放到else子句中,取代上述程序段的一行:
      echo "这是合法用户要访问的网页。";
      这样,当用户访问该PHP脚本程序时,需要输入用户名和密码来确认用户的身份。
      Windows的Apache用户认证
      1.采用文本文件存放用户名和密码时,其方法同前,但需要注意的是表示路径的目录名之间、目录名与文件名之间一律用斜线“/”分开,而不是反斜线“”。
      2.采用MySQL数据库存放用户名和密码时,首先按下列方法将PHP 4.0.3作为Apache的模块来运行,然后按上述“采用数据库存储用户名和密码的用户认证”的方法完成。
      1)下载Windows版的Apache 1.3.12、PHP 4.0.3、MySQL 3.2.32,将三个软件分别解压、安装到C:pache、C:PHP4、C:mysql目录。
      2) C:PHP4SAPI目录有几个常用Web服务器的PHP模块文件,将其中php4apache.dll拷贝到Apache的modules子目录(C:pachemodules)。
      3)修改Apache的配置文件C:pachenfhttpd.conf,增加以下几行:
      LoadModule php4_module modules/ php4apache.dll
      AddType application/x-httpd-php .php3
      AddType application/x-httpd-php-source .phps
      AddType application/x-httpd-php .php
      第一行使PHP4以Apache的模块方式运行,这样才能进行用户认证,后三行定义PHP脚本程序的扩展名。
      4)在autoexec.bat文件的PATH命令中增加PHP4所在路径“C:PHP4”,重新启动电脑。

    三、apache排除特定目录地址实现方法

         我们经常会碰到要在apache排除特定目录地址,下面我来给各位朋友详细介绍实现方法,有需要参考的朋友可学习学习。同事看到http://ip/a这个url地址之后,要求改成访问a目录,url地址就是http://ip,b目录是软链接在a目录中,还要求访问a目录是有apache身份认证的,而访问http://ip/b是没有身份认证的,下面就是我的解决方案.

     系统:centos 5.5
     环境:lamp环境
    1.修改apache配置文件

    代码如下 复制代码
    vi /etc/httpd/conf/httpd.conf
    NameVirtualHost 192.168.1.104:80

    <VirtualHost 192.168.1.104:80>
    ServerAdmin rocdk890@gmail.com
    directoryIndex  index.html index.php index.htm index.shtml login.php
    ServerName 192.168.1.104
    DocumentRoot /var/www/vhosts/wwwroot/a
    <Directory "/var/www/vhosts/wwwroot/a">
       Options -Indexes

       AllowOverride All

       Order allow,deny
       Allow from all

    </Directory>
    </VirtualHost>

    把这两项指向a目录

    代码如下 复制代码
    DocumentRoot /var/www/vhosts/wwwroot/a
    <Directory "/var/www/vhosts/wwwroot/a">


    保存后,重启apache.

    代码如下 复制代码
    service httpd restart


    2.去a目录下添加修改.htaccess文件

    代码如下 复制代码
    vi /var/www/vhosts/wwwroot/a/.htaccess
    AuthUserFile    /var/www/vhosts/wwwroot/.htpasswd
    AuthName        "Please Enter Your Password"
    AuthType        Basic
    Require         valid-user

    3.去b目录下添加修改.htaccess文件

    代码如下 复制代码
    vi /var/www/vhosts/wwwroot/b/.htaccess
    Satisfy Any
    Order Deny,Allow
    Allow from all

    这样就可以让b目录不被身份认证限制住.

    4.软链b目录到a目录中

    代码如下 复制代码
    ln -s /var/www/vhosts/wwwroot/b/ /var/www/vhosts/wwwroot/a/b

    点击查看原图

    5.验证



    好了,大家可以看到访问http://ip是有apache身份认证的,访问http://ip/b是没有apache身份认证的



    展开全文
  • 配置apache服务器的用户认证

    万次阅读 2011-01-27 20:21:00
    用户认证是保护网络系统资源的第一道防线,它控制着所有登录并检查访问用户的合法性,其目标是仅 让合法用户以合法的权限访问网络系统的资源。基本的用户认证技术是“用户名+密码”。    Apache是目前...

          经常上网的读者会遇到这种情况:访问一些网站的某些资源时,浏览器弹出一个对话框,要求输入用户名和密码来获取对资源的访问。这就是用户认证的一种技术。用户认证是保护网络系统资源的第一道防线,它控制着所有登录并检查访问用户的合法性,其目标是仅 让合法用户以合法的权限访问网络系统的资源。基本的用户认证技术是“用户名+密码”。

     

       Apache是目前流行的Web服务器,可运行在Linux、Unix、Windows等操作系统下,它可以很好地解决“用户名+密码”的认证问题。
        apache用户认证所需要的用户名和密码有两种不同的存贮方式:一种是文本文件;另一种是MSQL、Oracle、MySQL等数据库。

     

    下面以Linux的Apache为例,就这两种存贮方式,分别介绍如何实现用户认证功能。

    一,采用文本文件存储

      这种认证方式的基本思想是:Apache启动认证功能后,就可以在需要限制访问的目录下(其对应的子目录也会起作用)建立一个名为.htaccess 的文件,指定认证的配置命令。当用户第一次访问该目录的文件时,浏览器会显示一个对话框,要求输入用户名和密码,进行用户身份的确认。若是合法用户,则显示所访问的页面内容,此后访问该目录的每个页面,浏览器自动送出用户名和密码,不用再输入了,直到关闭浏览器为止。
        
          以下是实现的具体步骤:

          假设Apache已经编译、安装到了/usr/local/apache目录中。缺省情况下,编译Apache时自动加入mod_auth模块,
        利用此模块可以实现“用户名+密码”以文本文件为存储方式的认证功能。
        (通过下面的命令,可以查看apache是否已经安装指定的模块,/usr/local/apache/bin/apachectl -l )

      1.修改Apache的配置文件/usr/local/apache/conf/httpd.conf,对认证资源所在的目录设定配置命令。
          下例是对/data/home/tenfyguo/proj/soso/htdocs目录的配置,对对应的虚拟机配置增加下面的配置:

      <Directory /data/home/tenfyguo/proj/soso/htdocs>
         Options Indexes FollowSymLinks
         allowoverride authconfig #关键是增加这句
         order allow,deny
         allow from all
      </Directory>

      其中,allowoverride authconfig一行表示允许对/data/home/tenfyguo/proj/soso/htdocs目录下的文件进行用户认证。

      2.在限制访问的目录/data/home/tenfyguo/proj/soso/htdocs下建立一个文件.htaccess (其实是一个隐藏文件),其内容如下:

          AuthName "这里的文字会显示在浏览器弹出的提示登录窗口中"
          AuthType basic
          AuthUserFile /data/home/tenfyguo/proj/soso/valid.txt #这里放用户名和密码文件,不能放在可以下载的地方
          require valid-user

      说明:文件.htaccess中常用的配置命令有以下几个:

      1) AuthName命令:指定认证区域名称。区域名称是在提示要求认证的对话框中显示给用户的。
      2) AuthType命令:指定认证类型。在HTTP1.0中,只有一种认证类型:basic。在HTTP1.1中有几种认证类型,如:MD5。
      3) AuthUserFile命令:指定一个包含用户名和密码的文本文件,每行一对。
      4) AuthGroupFile命令:指定包含用户组清单和这些组的成员清单的文本文件。组的成员之间用空格分开,如:
         managers:user1 user2
      5) require命令:指定哪些用户或组才能被授权访问。如:
         require user user1 user2(只有用户user1和user2可以访问)
         requires groups managers (只有组managers中成员可以访问)
         require valid-user (在AuthUserFile指定的文件中任何用户都可以访问)

      3.利用Apache附带的程序htpasswd,生成包含用户名和密码的文本文件:/data/home/tenfyguo/proj/soso/valid.txt,
          每行内容格式为“用户名:密码”。

        #cd /usr/local/apache/bin
        #htpasswd -bc /data/home/tenfyguo/proj/soso/valid.txt user1 1234
        #htpasswd -b /data/home/tenfyguo/proj/soso/valid.txt user2 5678

        文本文件/data/home/tenfyguo/proj/soso/valid.txt含有两个用户:user1,口令为1234;user2,口令为5678。

    打开该文本文件可以发现对应的密码已经加密存储
          注意,不要将此文本文件存放在Web文档的目录树中,以免被用户下载。

      欲了解htpasswd程序的帮助,请执行htpasswd -h。

          完成后,重启apache使得配置生效.
          /usr/local/apache/bin/apachectl restart
     
          当用户第一次打开浏览器请求:http://test.soso.com:13601/test/,此时浏览器会弹出提示框,让用户输入用户名和密码。转包查看apache的响应:
          (1)apache的响应返回:
     HTTP/1.1 401 Authorization Required
     Date: Thu, 27 Jan 2011 11:10:07 GMT
     Server: Apache/2.2.4 (Unix)
     WWW-Authenticate: Basic realm="test"
     Content-Length: 401
     Keep-Alive: timeout=5, max=100
     Connection: Keep-Alive
     Content-Type: text/html; charset=iso-8859-1

     <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
     <html><head>
     <title>401 Authorization Required</title>
     </head><body>
     <h1>Authorization Required</h1>
     <p>This server could not verify that you
     are authorized to access the document
     requested.  Either you supplied the wrong
     credentials (e.g., bad password), or your
     browser doesn't understand how to supply
     the credentials required.</p>
     </body></html>

     

           可以看出,apache的返回的状态码是401, 对应的提示信息:Anthorization Required,并且返回一个很重要的响应头:
            WWW-Authenticate: Basic realm="test"
          
           (2)浏览器弹出提示框让用户输入用户名和密码,输入后浏览器发送如下:
     GET /test/ HTTP/1.1
     Host: test.soso.com:13601
     User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
     Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
     Accept-Language: zh-cn,zh;q=0.5
     Accept-Encoding: gzip,deflate
     Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
     Keep-Alive: 115
     Connection: keep-alive
     If-Modified-Since: Fri, 12 Jun 2009 03:43:20 GMT
     Authorization: Basic dGVuZnlndW86dGVuZnlndW8=

     

     可以看到,此时浏览器发送请求中带上了请求头:
            Authorization: Basic dGVuZnlndW86dGVuZnlndW8=
     apache正是利用这个头信息进去权限验证的。


        当用户数量比较少时,这种方法对用户的认证是方便、省事的,维护工作也简单。但是在用户数量有数万人,甚至数十万人时,
          会在查找用户上花掉一定时间,从而降低服务器的效率。这种情形,应采用数据库方式。

     

    二,采用数据库存储

       目前,Apache、PHP、MySQL三者是Linux下构建Web网站的最佳搭档,这三个软件都是免费软件。将三者结合起来,通过HTTP协议, 利用PHP和MySQL,实现Apache的用户认证功能。
       只有在PHP以Apache的模块方式来运行的时候才能进行用户认证。为此,在编译Apache时需要加入PHP模块一起编译。假设PHP作为Apache的模块,编译、安装Apache到/usr/local/apache目录,编译、 安装MySQL到/usr/local/mysql目录。然后进行下面的步骤:

      1.在MySQL中建立一个数据库member,在其中建立一个表users,用来存放合法用户的用户名和密码。

      1)用vi命令在/tmp目录建立一个SQL脚本文件auth.sql,内容为:
      drop datebase if exists member;
      create database member;
      use member;
      create table users (
         username char(20) not null,
         password char(20) not null,
      );

      insert into users values("user1",password("1234"));
      insert into users values("user2",password("5678"));

     

      2)启动MySQL客户程序mysql,执行上述SQL脚本文件auth.sql的命令,在表users中增加两个用户的记录。

      #mysql -u root -pmypwd < /tmp/auth.sql

     

      2.编写一个PHP脚本头文件auth.inc,程序内容为:
    <?php
     /*
     “PHP_AUTH_USER”
     当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名。
     “PHP_AUTH_PW”
     当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码。
     “AUTH_TYPE”
     当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型。
     */

     

     function authenticate() {
      header("HTTP/1.0 401 Authorization Required");
      header("WWW-Authenticate: Basic realm='test'");
      echo "请输入认证的用户名和密码";
      exit;
     }

     

     function check_user() {
        if(isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
           //这里可以改成访问DB获取用户名和密码即可
           if($_SERVER['PHP_AUTH_USER']=='tenfyguo' && $_SERVER['PHP_AUTH_PW']=='tenfyguo'){
           return 0;
           }

        return -1;
        }

        return -1;

     }

     

     if(check_user() < 0 ){
        authenticate();
     }

     echo "验证正常";
     exit;
     ?>

     

      函数authenticate()的作用是利用函数header("WWW-Authenticate: Basic realm='test'"),向浏览器发送一个认证请求消息,
        使浏览器弹出一个用户名/密码的对话框。当用户输入用户名和密码后,包含此PHP脚本的URL将自动地被再次调用,
        将用户名、密码、认证类型分别存放到PHP的三个特殊变量:“PHP_AUTH_USER”、“PHP_AUTH_PW”、“AUTH_TYPE”,在PHP程序中可根据这三个变量值来判断是否合法用户。
        header()函数中,basic表示基本认证类型,realm的值表示认证区域名称。

     

      函数header("HTTP/1.0 401 Authorization Required")使浏览器用户在连续多次输入错误的用户名或密码时接收到HTTP 401错误。

        
        文章转载自网管之家:http://www.bitscn.com/pdb/php/200701/95251.html 并根据笔者实验作了部分修改。

    展开全文
  • 用惯了在Windows上一个appserv或phpStudy压缩包搞定,要在MAC上捣腾一个PHP开发环境还不大习惯。但自己亲自配一下环境还是...apache的配置apache已经自带了,只需如下三个命令就可以了。 开启apache服务 sudo apach
  • Linux下Apache网站目录读写权限的设置

    千次阅读 2013-06-20 10:30:31
    我们假设http服务器运行的用户和用户组www,网站用户centos,网站根目录是/home/centos/web。 方法/步骤 1 我们首先设定网站目录和文件的所有者和所有组centos,www,如下命令: chown ...
  • 一台新的linux CentOS服务器,安装好php环境后,发现apache默认解析路径是/var/www/html,如果不想使用这个默认路径,可以自己设置一个目录。 例:在根目录下新建/data/website文件夹用来存放项目。 准备工作: ...
  • 背景:暑假 给学校校长办公室做网站,因为都回家,外网需要能访问到的原因,所以把 网站搬到了阿里云主机上CentOS的系统 ,已经安装好了 apache php mysql常规排错过程(ps:没耐心的童鞋请直接看最后一步,学习在...
  • apache配置网站目录的读写权限

    千次阅读 2013-09-09 06:27:31
    假设http服务器运行用户和用户组www,网站用户centos,网站根目录是/home/centos/web。 操作方法与步骤: 1,首先,设定网站目录和文件的所有者和所有组centos,www。 例如:   复制代码代码示例: chown -...
  • 目的:为Apachephp配置受限制的用户权限。保护系统安全。需要的朋友可以参考下。 环境配置情况: ...apache安装目录:d:\...专门运行Apache运行所使用的用户:apache-u(可不隶属于任何用户组) PS
  • LAMP环境安装(最好的PHP环境搭建)
  • Apache服务 403 Forbidden 问题

    千次阅读 2011-04-27 21:07:00
    在 fedora14中搭建了一个 Apache+ mysql + php 环境(使用源码安装),为了开发方便,我想把apache的工作目录改到当前用户目录下面 /home/currentUser/htdocs (其中“currentUser”当前用户人名称)...
  • php利用root权限执行shell脚本(二)

    万次阅读 多人点赞 2012-12-02 20:16:54
    今天晚上:19:30分,这个困扰了我好久的问题终于解决,其中的原理也终于弄清楚了,总之是利用sudo来赋予Apache用户root的执行权限,下面记录一下: 利用php利用root权限执行shell脚本必须进行以下几个步骤:...
  • Linux下Apache服务的部署和配置

    万次阅读 2019-01-19 13:34:34
    Apache服务的安装 yum源安装: 目录文件 源码包安装: 目录文件: Apache中添加对php的支持 Apache中添加php对mysql数据库的支持 Apache服务的高级配置 1:配置基于ip的虚拟主机 2. 配置基于端口的虚拟主机...
  • Apache部署超详细教程

    万次阅读 多人点赞 2019-05-24 17:16:26
    Apache服务器部署背景Apache与Nginx对比Apache的部署安装Apache的基础信息修改Apache默认配置修改默认端口修改默认发布文件修改默认发布目录Apache的虚拟主机如何配置虚拟主机排错思路Apache内部的访问控制基于IP...
  • centOS下,yum安装Apache过程

    万次阅读 2018-03-09 12:41:11
    第一步:安装Apache服务程序(apache服务的软件包名称叫做httpd)yum install httpd -y第二步: 将Apache服务添加到 开机自启中第三步:打开firefox浏览器 测试 127.0.0.1这样 我们的apache服务就安装好了 !...
  • apache笔记

    万次阅读 2020-09-02 17:05:02
    【1】win7 64 位 安装Apache 【2】ubuntu安装apache(从apt源安装) 【3】ubuntu卸载apache 【4】修改网站根目录(ubuntu) 【5】修改网站端口(ubuntu) 【6】ubuntu中Apache的一些配置 【7】centos安装apache 【8...
  • 在本地使用PHP脚本操作文件可以成功,等放到服务器上就不行。
  • 文件存放在中心版本库,这个版本库很像一个普通的文件服务器,只是它可以记录每一次文件和目录的修改,这便使你可以取得数据以前的版本,从而可以检查所作的更改。从这个方面看,许多人把版本控制系统当作一种...
  • Ubuntu下安装配置Apache http server

    万次阅读 2014-04-25 10:26:00
    安装指令:sudo apt-get install apache2安装结束后: 产生的启动和停止文件是:/etc/init.d/apache2 启动:sudo apache2 start 停止:sudo apache2 stop 重新启动:sudo apache2 restart 配置文件保存在 /etc/...
1 2 3 4 5 ... 20
收藏数 62,730
精华内容 25,092
关键字:

php www用户组 为apache