CentOS通过vsftpd及pam-mysql,php实现FTP虚拟用户管理.docx_第1页
CentOS通过vsftpd及pam-mysql,php实现FTP虚拟用户管理.docx_第2页
CentOS通过vsftpd及pam-mysql,php实现FTP虚拟用户管理.docx_第3页
CentOS通过vsftpd及pam-mysql,php实现FTP虚拟用户管理.docx_第4页
CentOS通过vsftpd及pam-mysql,php实现FTP虚拟用户管理.docx_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

CentOS系统通过vsftpd及pam-mysql、php等实现FTP虚拟用户管理辣汉堡 QQ:15070380 最近因为工作需要,摸索着实现了在linux环境下使用vsftpd及pam_mysql实现FTP服务器的虚拟用户管理,并通过简单的php页面为用户提供自助修改密码的功能。实现过程中遇到了不计其数的小问题,还好现在有互联网,一路边查边改,最终实现了当初对linux下FTP服务器的设想。网上的信息虽多,但复制粘贴的更多。许多资料都是雷同而且带有错误的,我把解决问题过程中用到的一些经验证正确无误的资料集中起来,希望能给有相似需求的网友造福。其中引用到大量互联网上的资料没有办法查到源头,如有冒犯之处敬请谅解。一、CentOS操作系统在虚拟机上的安装 打开VMware vSphere Client,用本地的CentOS6.3光盘映像文件安装即可,选择了最小安装。CentOS是redhat Linux的再编译免费版本。二、CentOS系统安装完成后的网络配置 编辑文件 /etc/sysconfig/network-scripts/ifcfg-eth0,内容大致如下:DEVICE=eth0BOOTPROTO=staticHWADDR=00:10:51:9D:54:4CNM_CONTROLLED=yesONBOOT=yesIPADDR=xxx.xxx.0.16NETMASK=GATEWAY=xxx.xxx.0.254TYPE=EthernetUUID=da0b8894-8adf-4a54-a3d0-b0586e08209e 重启系统后网络配置就可以生效。虽然也可以使用命令行设置且立即生效,但重启系统后需要重新设置。三、无互联网环境下yum安装命令的使用 yum是linux下一个非常好用的软件安装/卸载软件,但若linux不能联网,若想使用yum安装软件,可以依照下面的方法。 1、挂载CentOS安装光盘mount -t iso9660 /dev/cdrom /media/cdrom 2、修改yum配置文件cd /etc/yum.repos.d/会看到三个文件,第一个CentOS-Base.repo是yum网络源的配置文件,第三个CentOS-Media.repo是本地源的配置。修改CentOS-Media.repo在baseurl中,修改第2个路径为/mnt/cdrom(即为光盘挂载点)将enabled=0改为1 3、将yum网络源配置文件改名为CentOS-Base.repo.bak,否则会先在网络源中寻找适合的包,改名之后直接从本地源读取。好了,现在可以在不联网的环境下安装包了,比如要安装gcc,输入命令yum install gcc即可!四、vsftpd的安装 使用CentOS光盘自带的yum安装vsftpd是可以满足一般需要的,但在使用pam-mysql方式验证用户时遇到了许多不好解决的问题,后来还是下载了vsftpd-3.0.2.tar.gz编译安装的。1、需要先安装编译用的gccyum -y install gcc gcc-c+ db4-utils pam-devel 然后展开下载的vsftpd安装包,修改部分参数后编译:tar -zxf vsftpd-3.0.2.tar.gzcd vsftpd-3.0.2#vi builddefs.h #define VSF_BUILD_TCPWRAPPERS /允许使用TCP Wrappers(默认是undef) #define VSF_BUILD_PAM /允许使用PAM认证 #define VSF_BUILD_SSL /允许使用SSL(默认是undef)make & make installmkdir /etc/vsftpd/cp vsftpd.conf /etc/vsftpd/vsftpd.bakgrep -v # /etc/vsftpd/vsftpd.bak /etc/vsftpd/vsftpd.conf#为了让vsftpd支持本地用户登录,将身份认证模块拷贝至系统目录中cp RedHat/vsftpd.pam /etc/pam.d/vsftpd2、配置vsftpd独立启动#vi /etc/xinetd.d/vsftpd将disable中no改成yes3、服务启动脚本的制作在standalone 模式中,经常用上面的命令启动服务比较麻烦,我们做一个脚本来启动和停止服务。建立一个新文件/etc/rc.d/init.d/vsftpd,把以下内容复制到文件中:#!/bin/bash# vsftpd This shell script takes care of starting and stopping# standalone vsftpd.# chkconfig: - 60 50# description: Vsftpd is a ftp daemon, which is the program # that answers incoming ftp service requests.# processname: vsftpd# config: /etc/vsftpd/vsftpd.conf# Source function library. /etc/rc.d/init.d/functions# Source networking configuration. /etc/sysconfig/network# Check that networking is up. $NETWORKING = no & exit 0 -x /usr/local/sbin/vsftpd | exit 0RETVAL=0prog=vsftpdstart() # Start daemons. if -d /etc/vsftpd ; then for i in ls /etc/vsftpd/*.conf; do site=basename $i .conf echo -n $Starting $prog for $site: /usr/local/sbin/vsftpd $i & RETVAL=$? $RETVAL -eq 0 & touch /var/lock/subsys/$prog success $prog $site echo done else RETVAL=1 fi return $RETVALstop() # Stop daemons. echo -n $Shutting down $prog: killproc $prog RETVAL=$? echo $RETVAL -eq 0 & rm -f /var/lock/subsys/$prog return $RETVAL# See how we were called.case $1 in start) start ; stop) stop ; restart|reload) stop start RETVAL=$? ; condrestart) if -f /var/lock/subsys/$prog ; then stop start RETVAL=$? fi ; status) status $prog RETVAL=$? ; *) echo $Usage: $0 start|stop|restart|condrestart|status exit 1esacexit $RETVAL保存文件,再给该文件加上执行权限:# chmod 755 /etc/rc.d/init.d/vsftpd这样我们就可以通过下面的方法来管理服务了:# service vsftpd start|stop|restart|condrestart|status例如重新启动服务:# service vsftpd restartShutting down vsftpd: OK Starting vsftpd for vsftpd: OK 五、Centos下编译安装mysql5.6.161、下载mysql5.6.16安装包tar -zxvf mysql-5.6.16.tar.gzcd mysql-5.6.162、编译cmake -DCMAKE_INSTALL_PREFIX=/data/apps/mysql5.6.16 -DMYSQL_DATADIR=/data/mysqldata -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_cimake & make install3、配置&初始化cp ./support-files/f /etc/fgroupadd mysqluseradd -g mysql mysqlchown -R mysql:mysql /data/apps/mysql5.6.16/data/apps/mysql5.6.16/scripts/mysql_install_db -user=mysql -basedir=/data/apps/mysql5.6.16 -datadir=/data/mysqldata/data/apps/mysql5.6.16/bin/mysqld_safe -user=mysql &/data/apps/mysql5.6.16/bin/mysqladmin -uroot password mypassword4、加入到系统服务cp ./support-files/mysql.server /etc/rc.d/init.d/mysqldchmod 700 /etc/init.d/mysqldchkconfig -add mysqldchkconfig mysqld on可以用# service mysqld start命令启停mysql服务了。六、vsftpd用pam_mysql实现mysql虚拟用户认证vsftpd默认使用系统用户方式,不方便管理,可以用pam_mysql实现mysql虚拟用户认证,实现用mysql数据库管理用户名和密码。1、建立数据库vsftpdmysql -uroot -pcreate database vsftpd;grant all on vsftpd.* to vsftpdlocalhost identified by yourpassword ;2、建立数据表users来保存用户信息,将下面的内容编辑成create_table.sh,用chmod +x增加执行权限后运行。里面的character set gbk是用来设置中文字符集的,否则会在各种不同环境使用时出现乱码。mysql -uvsftpd pyourpassword !use vsftpd;create table users ( name char(16) binary character set gbk NOT NULL, chnname char(16) binary character set gbk NOT NULL, dept char(32) binary character set gbk NOT NULL, passwd char(48) binary NOT NULL, primary key(name) ) default charset=gbk;describe users;quit!可以使用insert语句插入用户数据:insert into users(name,chnname,dept,passwd)values(cwf,chenwenfeng,ITdept,password(123456);3、编译安装pam_mysql下载pam_mysql-0.7RC1.tar.gztar xfz pam_mysql-0.7RC1.tar.gz -C /usr/local/srccd /usr/local/src/pam_mysql-0.7RC1./configure -with-openssl -with-mysql=/usr/local/mysqlmake & make install加上with-openssl可以避免make时报有关md5.h的编译错误vi /etc/pam.d/vsftpd.mysqlauth required /usr/lib/security/pam_mysql.so config_file=/etc/security/pam_mysql.confaccount required /usr/lib/security/pam_mysql.so config_file=/etc/security/pam_mysql.confvi /etc/security/pam_mysql.confusers.host=8users.database=vsftpdusers.db_user=vsftpdusers.db_passwd=vsftpdusers.table=usersusers.user_column=nameusers.password_column=passwdusers.password_crypt=2#此处为2指使用mysql的password函数转换后存储的密码,0则为不转换。verbose=0log.enabled=0log.table=logslog.message_column=msglog.pid_column=pidlog.user_column=userlog.host_column=hostlog.rhost_column=rhostlog.time_column=logtime 对加密标志的说明如下:crypt=0:表示口令使用明文方式保存在数据库中crypt=1:表示口令使用UNIX的DES加密方式加密后保存在数据库中crypt=2:表示口令使用MySQL的password()函数加密后保存在数据库中crypt=3:表示口令使用MD5散列值的方式保存在数据库中 建立/etc/vsftpd/vsftpd.mysql.conf(对已有的vsftpd服务,最好将原来的vsftpd.conf改名或将PORT端口改掉,否则执行service vsftpd restart时会启动两个vsftpd服务,同端口的话会造成启动失败)主要的内容如下:local_enable=YESwrite_enable=YESlocal_umask=022dirmessage_enable=YESxferlog_enable=YESxferlog_std_format=YESxferlog_file=/var/log/xferlogdual_log_enable=YESvsftpd_log_file=/var/log/vsftpd.loguse_localtime=YESftpd_banner=Welcome to Jinan Intranet FTP server!listen=YESpam_service_name=vsftpd.mysqluserlist_enable=YESchroot_local_user=YESchroot_list_enable=NOchroot_list_file=/etc/vsftpd/chroot_listtcp_wrappers=YESmax_clients=100max_per_ip=8listen_port=21pasv_enable=YESpasv_min_port=30000pasv_max_port=30100guest_enable=YESguest_username=vsftpdguestvirtual_use_local_privs=YESanonymous_enable=NOuser_config_dir=/etc/vsftpd/vsftpd_user_confhide_ids=YESssl_enable=NOssl_tlsv1=NOforce_local_data_ssl=NOforce_local_logins_ssl=NO 重新启动vsftpdservice vsftpd restart 4、创建虚拟用户VSFTPD采用PAM方式验证虚拟用户。由于虚拟用户的用户名/口令被单独保存,因此在验证时,VSFTPD需要用一个系统用户的身份来读取数据库文件或数据库服务器以完成验证,这就是VSFTPD的guest用户。这正如同匿名用户也需要有一个系统用户ftp一样。我们也可以把guest用户看成是虚拟用户在系统中的代表。下面在系统中添加vsftpdguest用户,作为VSFTPD的guest。useradd vsftpdguest当虚拟用户登录后,所在的位置为vsftpdguest的自家目录/home/vsftpdguest。通过在/etc/vsftpd/vsftpd.mysql.conf中设置user_config_dir=/etc/vsftpd/vsftpd_user_conf,可以为每个虚拟用户设置不同的个人home目录。mkdir -p /etc/vsftpd/vsftpd_user_confcd /etc/vsftpd/vsftpd_user_conf以用户名为cwf为例,编辑文件cwfvi cwflocal_root=/usr/local/www修改目录权限:chown -R vsftpdguest.vsftpdguest /usr/local/www七、使用apache和php建立一个FTP用户密码自助修改页面使用vsftpd结合pam_mysql后,用户管理已经非常方便了,但毕竟对每一个用户而言,如果能自助修改密码,那才算真正完善的FTP服务器。我使用CentOS自带的httpd和php软件,自建了一个简单的页面来提供给用户修改密码。1、yum install httpdchkconfig -levels 235 httpd onservice httpd start2、yum install php php-mysql完成后在/var/www/html 里面新建info.php文件 能够在web浏览器端访问http:/localhost/inofo.php显示出php信息,表示正确安装PHP和apache。php-mysql需要安装,否则php不能识别mysql数据库函数。配置httpd.conf文件(/etc/httpd/conf/httpd.conf),添加LoadModule php5_module modules/libphp5.so找到AddType application/x-gzip .gz .tgz,在后面添加AddType application/x-httpd-php .phpAddType application/x-httpd-php .html3、修改/etc/php.ini中的配置mysql.default_socket = /tmp/mysql.sock否则web服务器会报Cant connect to local MYSQL server through socket /tmp/mysql.sock错。4、建立两个页面,一个用于输入用户名及旧密码、新密码,提交到另一个页面直接在mysql数据库中修改用户密码即可。以下为第二个页面中有关数据库操作的部分,仅供参考: ?php $mysql=mysql_connect(localhost:3306,vsftpd,vsftpd) or die(Could not connect .mysql_error); mysql_select_db(vsftpd) or die(Could not select database vsftpd); $query=SELECT * FROM users where name=.$_POSTusername. and passwd=password(.$_POSToldpassword.); mysql_query(set names utf8); /此处为解决中文显示乱码的问题。经实践linux服务端和mysql均指定了gbk字符集,但页面端均指定为utf8则一切正常。否则如果此处和页首指定为gbk的话,只能在ie端浏览时强制指定编码为gbk才可以正常显示。 $result = mysql_query($query) or die(Invalid query.mysql_error(); $rowNum = mysql_num_rows($result); if($rowNum=0) echo 原密码错误或用户不存在.; else $result_array=mysql_fetch_row($result) or die(Invalid query fetch.mysql_error();echo ;if($_POSTnewpassword!=$_POSTnewpasswordb) echo 您输入的新密码和确认密码不一致.else if($_POSTnewpassword=)echo 新密码不能为空.;elsemysql_query(update users set passwd=password(.$_POSTnewpassword.) where name=.$_POSTusername.);echo 用户名:.$result_array0.;姓名:.$result_array1.;单位:.$result_array2.您的密码修改成功,谢谢使用!; ?八、几个需要注意解决的问题1、注意防火墙要关闭或设置增加要用的端口号vi /etc/sysconfig/iptables至少要包含以下几行,以保证web,ftp,mysql等服务可以在外部访问。-A INPUT -p tcp -m state -state NEW -m tcp -dport 80 -j ACCEPT-A INPUT -p tcp -m state -state NEW -m tcp -dport 22 -j ACCEPT-A INPUT -p tcp -m state -state NEW -m tcp -dport 21 -j ACCEPT-A INPUT -p tcp -m state -state NEW -m tcp -dport 3306 -j ACCEPT-A INPUT -p tcp -m state -state NEW -m tcp -dport 30000:30100 -j ACCEPT编辑完成后运行service iptables restart2、解决vsftpd的中文乱码问题由于linux系统默认使用UTF-8字符集,而早期的ftp客户端(包括xp系统自带的资源管理器)对中文只支持GBK,两端发生不兼容而导致中文文件名乱码。(1)进入vsftpd-3.0.2源码目录:(2)使用命令vi features.c修改 features.c文件;将原内容为:vsf_cmdio_write_raw(p_sess, UTF8rn);修改为:/vsf_cmdio_write_raw(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论