- 论坛徽章:
- 0
|
在 Linux 上安装 Squid + mysql_auth 的代理服务器
by nemo (nemo@263.net) 2004.6.14
本文可随意转载,但请注明出处和作者姓名,谢谢.
摘要:本文主要讨论如何在Linux上安装结合mysql进行身份认证的squid代理服务器的安装,
至于squid的其它设置不在本文的讨论范围之内.
写本文的目的,一是前几天工作的一个简单终结,二是觉得网上有关squid+mysql_auth的中文
文档过少,希望能给那些象我一样E文糟糕的人一点帮助
好了,废话不多说了,进入正题.
操作系统环境 Redhat Linux 9.0
所需软件
1. Mysql mysql-3.23.58.tar.gz
2. Squid squid-2.5.STABLE5.tar.gz
3. Mysql_auth mysql_auth-0.6beta.tar.gz
第一步:安装Mysql
这步比较简单,我是把Mysql安装在了/soft/mysql下,请根据自己的实际情况,决定Mysql
的安装目录.有关安装Mysql的中文文档非常多,安装也比较容易,这里,我只是把我的安装步骤
简单列举一下,尽供参考
#groupadd mysql
#useradd -g mysql -c 'mysql user' -d /var/empty/ -s /bin/false mysql
#cd mysql-3.23.58
#./configure --prefix=/soft/mysql
#make
#make install
#./scripts/mysql_install_db
#chown -R root /soft/mysql
#chown -R mysql /soft/mysql/var
#chgrp -R mysql /soft/mysql
#cp ./support-files/my-medium.cnf /etc/my.cnf
#cp /soft/mysql/share/mysql/mysql.server /etc/init.d/mysqld
#chkconfig --add mysqld
#chkconfig --levels 3 mysqld on
#service mysqld start
#cd /soft/mysql/bin
#mysqladmin -u root -p password <newpasswd>;
第二步:安装Squid
Squid的安装也比较容易,同样我也是把Suqid装在了/soft/squid下,一下是我安装Squid
的步骤
#cd squid-2.5.STABLE5
#./configure --prefix=/soft/squid \
--enable-arp-acl \
--enable-linux-netfilter \
--enable-pthreads \
--enable-storeio=ufs,null \
--enable-default-err-language="Simplify_Chinese" \
--enable-auth="basic" \
--enable-baisc-auth-helpers="NCSA" \
--enable-underscore \
--enable-delay-pools \
--enable-snmp \
--enable-ssl \
--with-openssl=/usr/local/ssl \
--enable-cache-digests \
--disable-ident-lookups \
--disable-hostname-checks
#make all
#make install
这里的配置选项,我也不作过多说明了,因为相关文档也是相当丰富而且详实,以下两个说明文
档供大家参考
http://www.chinaunix.net/jh/38/115326.html
http://www.chinaunix.net/jh/38/63081.html
至此,Squid就安装完成了,按照以上两个文档的说明进行简单配置,Squid就可以很好的工作了,
接下来,我会详细说明如何使用mysql_auth模块,来实现Squid+mysql的身份认证.
第三步:安装mysql_auth,实现squid+mysql的身份认证
squid本身并不带身份认证功能,但是它可以结合其它程序来实现对客户端用户的身份认证,比
较常用的程序是NCSA,但是采用这种方式管理起来比较麻烦,而且用户自己不能修改密码,对管
理员的工作要求过高;而如果采用mysql_auth的话,可以结合apache+php来实现用户的轻松管理,
而且用户还可以自己根据需要来修改密码,非常方便.
首先解压缩mysql_auth-0.6beta.tar.gz
#tar zxf mysql_auth-0.6beta.tar.gz
3.1. 接下来修改Makefile文件,有几个地方需要修改
3.1.1. 第二行CFLAGS部分,你要根据你的实际情况进行修改,把两个路径都改成跟你系统相符的
因为我的mysql安装在/soft/mysql下,所以我的就改成
CFLAGS = -I/soft/mysql/include -L/soft/mysql/lib/mysql
3.1.2. 修改install部分
原来的内容是
install:
$(INSTALL) -o nobody -g nogroup -m 755 mysql_auth /usr/local/squid/bin/mysql_auth
$(INSTALL) -o root -g wheel -m 700 mypasswd /usr/local/bin/mypasswd
$(INSTALL) -o nobody -g nogroup -m 600 $(CONF) /usr/local/squid/etc/mysql_auth.conf
$(INSTALL) -o nobody -g nogroup -m 600 $(CONF) /usr/local/squid/etc/mysql_auth.conf.default
因为Linux没有nogroup这个工作组,需要改成nobody,同样系统默认也没有wheel工作组,改成root
接下来要修改的是安装的路径,你可以根据自己的情况来修改,下边是我修改之后的install
install:
$(INSTALL) -o nobody -g nobody -m 755 mysql_auth /soft/squid/bin/mysql_auth
$(INSTALL) -o root -g root -m 700 mypasswd /soft/squid/bin/mypasswd
$(INSTALL) -o nobody -g nobody -m 600 $(CONF) /soft/squid/etc/mysql_auth.conf
$(INSTALL) -o nobody -g nobody -m 600 $(CONF) /soft/squid/etc/mysql_auth.conf.default
我把mysql_auth和mypasswd安装到了squid的bin目录,mysql_auth.conf和mysql_auth.conf.default装到了
squid的etc目录
3.2. 现在要修改src下的define.h和mysql_auth.conf,mysql_auth.conf这时不修改也可以,安装完成后再改也行
3.2.1. 修改define.h
这个文件,主要是修改#define CONFIG_FILE "/usr/local/squid/etc/mysql_auth.conf"这行,它指定了
安装后mysql_auth.conf的位置,因为我们在修改Makefile文件时,已经修改了mysql_auth.conf的安装位置
这里如果不改的话,安装完成后mysql_auth就找不到mysql_auth.conf文件了,当然也就无法完成认证功能,
这里的修改一定要和修改后的Makefile文件里的相应修改相符,这行我改成了
#define CONFIG_FILE "/soft/squid/etc/mysql_auth.conf"
还有一个比较重要的修改是#define DEF_MYSQLD_SOCKET "/tmp/mysqld.sock"
因为在linux里,使用的是/tmp/mysql.sock,所以要修改成
#define DEF_MYSQLD_SOCKET "/tmp/mysql.sock"
其它的部分,就是些mysql主机名,用户名,密码,库名等信息,请根据个人喜好进行修改吧,以下是我修改
后的define.h文件,去掉了注释部分
#define CONFIG_FILE "/soft/squid/etc/mysql_auth.conf"
#define VAR_HOST_NAME "hostname"
#define DEF_HOST_NAME "localhost"
#define VAR_USER_NAME "user"
#define DEF_USER_NAME "squid"
#define VAR_USER_PASSWORD "password"
#define DEF_USER_PASSWORD "password"
#define VAR_DATABASE_NAME "database"
#define DEF_DATABASE_NAME "squid"
#define VAR_MYSQLD_SOCKET "mysqld_socket"
#define DEF_MYSQLD_SOCKET "/tmp/mysql.sock"
#define VAR_TABLE_NAME "table"
#define DEF_TABLE_NAME "squiduser"
#define VAR_USER_COLUMN "user_column"
#define DEF_USER_COLUMN "user"
#define VAR_PASSWORD_COLUMN "password_column"
#define DEF_PASSWORD_COLUMN "password"
#define VAR_ENCRYPT_PASSWORD_FORM "encrypt_password_form"
#define DEF_ENCRYPT_PASSWORD_FORM "no"
#define MAXLENGTH 512
#define MAX_STRLEN 64
struct my_params {
char *var_host_name;
char *var_user_name;
char *var_user_password;
char *var_database_name;
char *var_mysqld_socket;
char *var_table_name;
char *var_user_column;
char *var_password_column;
char *var_encrypt_password_form;
};
3.2.2. 修改mysql_auth.conf文件
根据刚才对define.h文件的修改内容,将mysql_auth.conf中的相应内容进行修改就可以了
以下我修改后的define.h文件,同样的,去掉了注释部分
hostname localhost
user squid
password password
database squid
mysqld_socket /tmp/mysql.sock
table squiduser
user_column user
password_column password
encrypt_password_form NO
3.3. 安装mysql_auth
做完以上的修改以后,就可以编译安装mysql_auth了
#cd mysql_auth-0.6beta
#make
#make install
接下来,可以到squid的etc目录里检查一下mysql_auth.conf文件的内容是否正确,如果不对,请进行
相应的修改
3.4. 建立mysql_auth使用的mysql库,用户和表
可以用mysql_auth源码目录scripts目录里的create_script来做这步操作,当然,你还得根据自己
的情况进行修改才可以,以下是我修改后的create_script文件
DROP DATABASE IF EXISTS squid;
USE mysql;
DELETE FROM user WHERE User LIKE 'squid';
DELETE FROM db WHERE User LIKE 'squid';
DELETE FROM tables_priv WHERE User LIKE 'squid';
CREATE DATABASE squid;
USE squid;
CREATE TABLE squiduser
(user VARCHAR(16) NOT NULL PRIMARY KEY,
password VARCHAR(64) BINARY NOT NULL);
GRANT SELECT,INSERT,UPDATE,DELETE ON squid.* TO squid@localhost IDENTIFIED BY 'password';
好了,现在可以使用这个文件了
到mysql的bin目录
#cd /soft/mysql/bin
#./mysql -uroot -p < /path/to/create_script
Enter password:
输入正确的密码后,mysql_auth需要的库环境就建立完成了
下边我们为mysql_auth建立一个用户
#./mysql -usquid -p
Enter password:
mysql>;use squid
Database changed
mysql>;insert into squiduser values ('nemo','123456');
Query OK, 1 row affected (0.00 sec)
mysql>;exit
接下来,我们检验一下mysql_auth是否已经正常工作了
到squid的bin目录里
#cd /soft/squid/bin
#./mypasswd nemo
Enter NEW password:
Re-enter NEW password:
Password record UPDATED succesfully.
如果出现让你两次输入新密码的提示,说明mysql_auth的安装已经成功了
改完密码后,你可以到数据库中看看,nemo用户的密码是否已经修改成功
3.5. 修改squid.conf
将squid.conf文件里原来跟认证有关的配置都注释掉,增加如下几行
#use mysql_auth
auth_param basic realm Nemo's proxy-caching Server
auth_param basic program /soft/squid/bin/mysql_auth
auth_param basic credentialsttl 2 hour
auth_param basic children 5
另外在http_access deny all前,增加如下两行
acl auth_user proxy_auth REQUIRED
http_access allow auth_user
保存退出
重启squid,客户端即可用nemo用户使用代理服务器上网了.
至此,安装完成.
如你有什么问题请于我联系nemo(nemo@263.net)
参考文档:
http://www.chinaunix.net/jh/38/63081.html
http://www.chinaunix.net/jh/38/115326.html
http://www.chinaunix.net/jh/38/178899.html |
|