LoveUnix » 网络 & 安全 » 【求助】vsftpd+pam_mysql+mysql验证问题
让LU留住您的每

一天 让LU博客留住您的每一天
2005-8-3 15:02 sjx12880805
使用vsftpd-2.0.3+MySQL-devel-4.1.12+pam_mysql-0.5.tar.gz+mysql4.1.12<br />在登陆的时候出现<br />Jan 26 02:13:01 dns vsftpd: database changed.<br />Jan 26 02:13:01 dns vsftpd: table changed.<br />Jan 26 02:13:01 dns vsftpd: usercolumn changed.<br />Jan 26 02:13:01 dns vsftpd: passwdcolumn changed.<br />Jan 26 02:13:01 dns vsftpd: crypt changed.<br />Jan 26 02:13:01 dns vsftpd: sqllog changed.<br />Jan 26 02:13:01 dns vsftpd: db_connect called.<br />Jan 26 02:13:01 dns vsftpd: pam_mysql: MySQL err Can&#39;t connect to local MySQL server through socket &#39;/var/lib/mysql/mysql.sock&#39; (2) <br />Jan 26 02:13:01 dns vsftpd: returning 7 .<br />Jan 26 02:13:01 dns vsftpd: returning 7 after db_connect.<br />是什么问题?请斑竹跟各位朋友帮帮忙.

2005-8-3 15:06 sjx12880805
vsftpd及mysqld都启动了,我参考的配置方案是<br /><br />VSFTPD是一种在UNIX/Linux中非常安全且快速的FTP服务器,目前已经被许多大型站点所采用。VSFTPD支持将用户名和口令保存在数据库文件或数据库服务器中。VSFTPD称这种形式的用户为虚拟用户。相对于FTP的本地(系统)用户来说,虚拟用户只是FTP服务器的专有用户,虚拟用户只能访问FTP服务器所提供的资源,这大大增强系统本身的安全性。相对于匿名用户而言,虚拟用户需要用户名和密码才能获取FTP服务器中的文件,增加了对用户和下载的可管理性。对于需要提供下载服务,但又不希望所有人都可以匿名下载;既需要对下载用户进行管理,又考虑到主机安全和管理方便的FTP站点来说,虚拟用户是一种极好的解决方案。本文介绍在RedHat Linux 9上如何将VSFTPD的虚拟用户名和密码保存在MySQL数据库服务器中。 <br /><br />  一、VSFTPD的安装 <br /><br />  目前,VSFTPD的最新版本是1.2.0版。官方下载地址为ftp://vsftpd.beasts.org/users/cevan...-1.2.0.tar.gz。<br />在安装前,需要先做以下准备工作: <br /><br />  VSFTPD默认配置中需要“nobody”用户。在系统中添加此用户,如果用户已经存在,useradd命令有相应提示。 <br />  [root@hpe45 root]# useradd nobody <br />  useradd: user nobody exists <br /><br />  VSFTPD默认配置中需要“/usr/share/empty”目录。在系统中此目录,如果目录已经存在,mkdir命令有相应提示。 <br />  [root@hpe45 root]# mkdir /usr/share/empty/ <br />  mkdir: cannot create directory &#39;/usr/share/empty&#39;: File exists <br /><br />  VSFTPD提供匿名FTP服务时,需要“ftp”用户和一个有效的匿名目录。 <br />  [root@hpe45 root]# mkdir /var/ftp/ <br />  [root@hpe45 root]# useradd -d /var/ftp ftp <br />  接下来的操作对于ftp用户是否已经存在都是有用的。 <br />  [root@hpe45 root]# chown root.root /var/ftp <br />  [root@hpe45 root]# chmod og-w /var/ftp <br /><br />  以上准备工作完成后,我们就可以开始编译源代码了。假定我们下载的vsftpd-1.2.0.tar.gz在/root目录,执行以下命令: <br />  [root@hpe45 root]# tar zxvf vsftpd-1.2.0.tar.gz <br />  [root@hpe45 root]# cd vsftpd-1.2.0 <br />  [root@hpe45 vsftpd-1.2.0]# make <br />  [root@hpe45 vsftpd-1.2.0]# make install <br /><br /> //// 上面的“make install”命令将编译好的二进制文件、手册等复制到相应目录。在RHL9上,可能需要手动执行以下复制: <br /> //// [root@hpe45 vsftpd-1.2.0]# cp vsftpd /usr/local/sbin/vsftpd <br /> //// [root@hpe45 vsftpd-1.2.0]# cp vsftpd.conf.5 /usr/local/share/man/man5 <br /> //// [root@hpe45 vsftpd-1.2.0]# cp vsftpd.8 /usr/local/share/man/man8 <br /><br />  接下来,我们复制一个简单的配置文件作为基础供后面修改。 <br />  [root@hpe45 vsftpd-1.2.1]# cp vsftpd.conf /etc <br />  <br />  复制PAM验证文件,以允许本地用户登录VSFTPD。 <br />  [root@hpe45 vsftpd-1.2.1]# cp RedHat/vsftpd.pam /etc/pam.d/ftp <br /><br />  二、创建guest用户 <br /><br />  VSFTPD采用PAM方式验证虚拟用户。由于虚拟用户的用户名/口令被单独保存,因此在验证时,VSFTPD需要用一个系统用户的身份来读<br />取数据库文件或数据库服务器以完成验证,这就是VSFTPD的guest用户。这正如同匿名用户也需要有一个系统用户ftp一样。<br />当然,我们也可以把guest用户看成是虚拟用户在系统中的代表。下面在系统中添加vsftpdguest用户,作为VSFTPD的guest。 <br />  [root@hpe45 vsftpd-1.2.1]# useradd vsftpdguest<br /><br />  当虚拟用户登录后,所在的位置为vsftpdguest的自家目录/home/vsftpdguest。如果要让虚拟用户登录到/var/ftp等其他目录,<br />修改vsftpdguest的自家目录即可。 <br /><br />  三、设置VSFTPD配置文件 <br /><br />  在/etc/vsftpd.conf文件中,加入以下选项: <br />  guest_enable=YES <br />  guest_username=vsftpdguest <br /><br />  然后执行以下命令,让VSFTPD在后台运行: <br />  [root@hpe45 vsftpd-1.2.1]# vsftpd &amp; <br /><br />  四、将虚拟用户保存在MySQL数据库服务器中 <br /><br />  我们建立数据库vsftpdvu,表users,字段name和passwd用于保存虚拟用户的用户名和口令,同时增加两个虚拟用户xiaotong和xiaowang。 <br /><br />  [root@hpe45 vsftpd-1.2.1]# mysql -p <br />  mysql&gt;create database vsftpdvu; <br />  mysql&gt;use vsftpdvu; <br />  mysql&gt;create table users(name char(16) binary,passwd char(16) binary); <br />  mysql&gt;insert into users (name,passwd) values (&#39;xiaotong&#39;,password(&#39;qqmywife&#39;)); <br />  mysql&gt;insert into users (name,passwd) values (&#39;xiaowang&#39;,password(&#39;ttmywife&#39;)); <br />  mysql&gt;quit <br /><br />  然后,授权vsftpdguest可以读vsftpdvu数据库的users表。执行以下命令: <br />  [root@hpe45 vsftpd-1.2.0]# mysql -u root mysql -p <br />  mysql&gt;grant select on vsftpdvu.users to vsftpdguest@localhost identified by &#39;i52serial0&#39;; <br />  mysql&gt;quit <br /><br />  如果要验证刚才的操作是否成功可以执行下面命令: <br />  [root@hpe45 vsftpd]#mysql -u vsftpdguest -pi52serial0 vsftpdvu <br />  mysql&gt;select * from users; <br />  如果成功,将会列出xiaotong、xiaowang和加密后的密码 <br /><br />  五、设置MySQL的PAM验证 <br /><br />  这里我们要用到一个利用mysql进行pam验证的开源项目(http://sourceforge.net/projects/pam-mysql/)。<br />首先从网站下载它的程序包pam_myql-0.5.tar.gz,复制到/root目录中。在编译安装之前,<br />要确保mysql-devel的RPM包已经安装在你的机器上,如果没有请从RHL安装光盘中安装该包。然后,执行以下命令: <br />  [root@hpe45 root]#tar xvzf pam_mysql-0.5.tar.gz <br />  [root@hpe45 root]#cd pam_mysql <br />  [root@hpe45 pam_mysql]#make <br />  [root@hpe45 pam_mysql]#make install <br />  make install这一步可能会出现错误,那只好手动将该目录下生成的pam_mysql.so复制到/lib/security目录下。 <br />  <br />接下来,我们要设置vsftpd的PAM验证文件。在/etc/pam.d/ftp文件中加入以下两行内容就行:<br /><br />  auth required /lib/securitypam_mysql.so user=vsftpdguest passwd=i52serial0 host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2 <br />account required /lib/securitypam_mysql.so user=vsftpdguest passwd=i52serial0 host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2 <br />  <br />上面涉及到的参数,只要对应前面数据库的设置就可以明白它们的含义。这里需要说明的是crypt参数。<br />crypt表示口令字段中口令的加密方式:crypt=0,口令以明文方式(不加密)保存在数据库中;crypt=1,口令使用UNIX系统的DES加密方式加密后保存在数据库中;crypt=2,口令经过MySQL的加密后保存。 <br /><br />  六、进一步的虚拟用户设置 <br /><br />  经过以上的步骤,虚拟用户就可以正常使用了。这里介绍进一步的虚拟用户设置。首先,介绍虚拟用户的权限设置。 <br /><br />  VSFTPD-1.2.0新添了virtual_use_local_privs参数,当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。<br />当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限,这也就是VSFTPD-1.2.0之前版本对虚拟用户权限的处理方法。<br />这两者种做法相比,后者更加严格一些,特别是在有写访问的情形下。默认情况下此参数是关闭的(NO)。 <br />  当virtual_use_local_privs=YES时,只需设置write_enable=YES,虚拟用户就可以就拥有写权限。<br />而virtual_use_local_privs=NO时,对虚拟用户权限的设置就更多一些更严格一些。 <br />  控制虚拟用户浏览目录:如果让用户不能浏览目录,但仍可以对文件操作,<br />那么需要执行以下二个步骤:<br />一,配置文件中,anon_world_readable_only=YES。<br /><br />二,虚拟用户目录的权限改为只能由vsftpdguest操作: <br />  [root@hpe45 root]# chown vsftpdguest.vsftpdguest /home/vsftpdguest <br />  [root@hpe45 root]# chmod 700 /home/vsftpdguest <br />  允许虚拟用户上传文件: <br />  write_enable=YES <br />  anon_upload_enable=YES <br />  允许虚拟用户修改文件名和删除文件: <br />  anon_other_write_enable=YES <br />  由于以上选项的设置同样会对匿名用户生效。如果不想匿名用户趁机拥有同样的权限,最好是禁止匿名用户登录。 <br /><br />  其次,由于虚拟用户在系统中是vsftpdguest身份,所以可以访问到系统的其他目录。为了更加安全,<br />我们可以将虚拟用户限制在自家目录下。<br /><br />有两种做法:<br />一,在配置文件中增加以下选项 <br />  chroot_local_user=NO <br />  chroot_list_enable=YES <br />  chroot_list_file=/etc/vsftpd.chroot_list <br />  然后,在/etc/vsftpd.chroot_list文件中加入虚拟用户名xiaotong和xiaowang。 <br />  <br />第二种做法,在配置文件中修改chroot_local_user=YES。 <br />  经过修改后,虚拟用户登录后其根目录就限制在/home/vsftpdguest下,无法访问其他目录。 <br /><br />  七、虚拟用户的个人目录 <br /><br />  大家可以发现,无论是哪个虚拟用户,登录后所在的目录都是/home/vsftpdguest,<br />即都是guest_username用户的自家目录。<br />下面,介绍如何为每个虚拟用户建立自家目录。<br />首先,在主配置文件中加入以下选项: <br /><br />  user_config_dir=/etc/vsftpd<br />  然后,生成/etc/vsftpd目录,并在该目录下建立与特定虚拟用户同名的文件: <br />  [root@hpe45 root]# mkdir /etc/vsftpd<br />  [root@hpe45 root]# cd /etc/vsftpd<br />  [root@hpe45 vsftpd_user_conf]# touch xiaowang <br />  以上的操作为虚拟用户xiaowang建立了个人配置文件/etc/vsftpd/xiaowang。接下来,<br />在xiaowang的个人配置文件中将xiaowang的自家目录修改为/home/xiaowang,<br />配置选项为: <br />  local_root=/home/xiaowang <br />  然后,新建xiaowang目录,并将权限设为vsftpdguest: <br />  [root@hpe45 vsftpd_user_conf]# mkdir /home/xiaowang <br />  [root@hpe45 vsftpd_user_conf]# chown vsftpdguest.vsftpdguest ./xiaowang <br />  [root@hpe45 vsftpd_user_conf]# chmod 600 /home/xiaowang <br />  经过以上设置,xiaowang登录VSFTPD后,用“pwd”指令就可以发现被自己被定位到自己的“/home/xiaowang”目录。 <br />  从文件系统层次来看,由于“/home/xiaowang”目录的权限是属于vsftpdguest的,<br />所以其他的虚拟用户同样也可以访问xiaowang的自家目录。解决这个问题也很简单,<br />我们只需要让VSFTPD负责将虚拟用户限制在其自家目录,就可以避免虚拟用户的互相访问。<br />具体做法参照前面第六步中所述,这里不再赘述。经过以上设置后,虚拟用户就可以拥有属于自己的目录了。

2005-8-3 15:06 sjx12880805
根据这个资料我在RH9上是配置成功的,但是现在在FC4上配置就是不行,请各位知道的朋友速各知,谢谢了

2005-8-5 10:34 老老鼠
这个我就不行了,是不是考虑转到数据库版去? <!--emo&:redface:--><img src='style_emoticons/default/icon_redface.gif' border='0' style='vertical-align:middle' alt='icon_redface.gif' /><!--endemo-->

页: [1]


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.