Chinaunix

标题: [配置 转载] Debian Linux下vsftpd+mysql虚拟用户作法 [打印本页]

作者: HonestQiao    时间: 2006-07-19 11:53
标题: [配置 转载] Debian Linux下vsftpd+mysql虚拟用户作法
[配置 转载] Debian Linux下vsftpd+mysql虚拟用户作法

Debian Linux下vsftpd+mysql虚拟用户作法

今天闲来无事做了个ftp,原因很简单就是为了能在别处看到的好东西直接放到我的机器上,嘿嘿!linux下选择ftp服务器还真是不容易,经过一阵思索后就选择了vsftpd,理由就是它号称是linux下最安全的ftp服务器还有还有好多的大型站点都用它来做服务器(这样用起来也比较有面子  。为了怕在我输入密码时被别人偷看到然后登入我机器乱搞,在加上我本来就讨厌系统有那么多的用户(其实也是像显示自己的手平),所以我决定采用虚拟用户,因为机器中装有Mysql,于是我就想将虚拟用户数据放在mysql中,好了,就侃到这里,下面进入正题!

第一步:

安装vsftpd

apt-get install vsftpd (Debian就是爽啊!)

系统会自动生成一个配置文件和一个ftp用户供匿名用户使用,vsftpd使用PAM方式来验证虚拟用户,因为虚拟用户的信息保存在数据库中,所以我们还需要一个能够读取数据库内容的本地用户,而且还需要设置它的本地目录:

#mkdir /var/ftp

#useradd -d ftpguest /var/ftp

#chown ftpguest.nogroup /var/ftp

第二步:安装mysql

apt-get install mysql-server mysql-clent

建立数据库,并添加用户

#mysql -p mysql>create ftpu;

mysql>use ftpu;

mysql>create table user(name char(20) binary,passwd char(20) binary);

mysql>insert into user (name,passwd) values ('test1',password('1234567'));

mysql>insert into user (name,passwd) values ('test2',password('7654321'));

mysql>quit

让ftpguest能访问ftpu和表user:

#mysql -u root mysql -p mysql>grant select on ftpu.user to ftpguest@localhost identified by '123456';

mysql>quit

第三步:因为vsftpd是通过PAM验证,所以我们还需要一个mysql通过PAM验证的包,在Debian下它叫做libpam-mysql

apt-get install libpam-mysql

然后打开vsftpd的PAM验证:

#vi /etc/pam.d/vsftpd

将以前的内容注释掉,然后加入以下内容:

auth required pam_mysql.so user=ftpguest passwd=123456 host=localhost db=ftpu table=user usercolumn=name passwdcolumn=passwd crypt=2

account required pam_mysql.so user=ftpguest passwd=123456 host=localhost db=ftpu table=user usercolumn=name passwdcolumn=passwd crypt=2

上面的内容应该能看明白吧,那个crypt=2表示经过mysql的password()机密后的东西!

第四步:修改vsftpd.conf文件

#vi /etc/vsftpd.conf

加入:

uest_enable=YES

guest_username=ftpguest

#表示ftpguest为vsftp的虚拟用户

virtual_use_local_privs=YES

#虚拟用户与本地用户有相同的权限

write_enable=YES

anon_upload_enable=YES

anon_other_write_enable=YES

#允许虚拟用户上传,修改和删除文件

chroot_local_user=YES

#虚拟用户只能访问自己的目录

anonymous_enable=NO

local_enable=YES

#关闭匿名用户访问,开启本地用户访问

第五步:

本来来到第四步已经完成了,可是后来一想,不对,那要是每次上传的东西都不同,到时把那个目录弄得乱七八糟的怎么管理啊,能不能为每个虚拟用户创建一个目录呢,比如说将music用户上传的文件放在放在~/music下,将doc用户上传的文件放在~/doc下呢?

能!当然能了,看看我怎么做?

首先在数据库中添加music和doc两个虚拟用户接下来:

#mkdir /etc/vsftpd_user_conf

#cd /etc/vsftpd_user_conf

#touch music

#echo "local_root=/home/username/music" > music

#touch doc

#echo "local_root=/home/username/doc" > doc

#mkdir /home/username/music

#chown ftpguest.nogroup /home/username/music

#chmod 600 /home/username/music

#chown ftpguest.nogroup /home/username/doc

#chmod 600 /home/username/doc

然后在vsftpd.conf中加入: user_config_dir=/etc/vsftpd_user_conf

大功告成,你明白了吗?

转载自:http://www.blogcn.com/user50/guangleiw/
作者: wolfg    时间: 2006-07-20 11:36
注意:
如果用crypt=2的验证方式,即使用mysql的password函数,要注意mysql的版本和你用户表里的password字段的长度。
http://dev.mysql.com/doc/refman/5.0/en/password-hashing.html
作者: aib    时间: 2006-07-23 15:16
是呀,
你那
mysql>create table user(name char(20) binary,passwd char(20) binary);

mysql>insert into user (name,passwd) values ('test1',password('1234567'));

放得下的么?经过PASSWORD加密后长度为41,你那才20
mysql> SELECT LENGTH(PASSWORD('test'));
+--------------------------+
| LENGTH(PASSWORD('test')) |
+--------------------------+
|                       41 |
+--------------------------+
1 row in set (0.01 sec)


MD5加密后也有32位.

[ 本帖最后由 aib 于 2006-7-23 15:17 编辑 ]
作者: npcomet    时间: 2006-07-26 05:06

有点启发
作者: keer2345    时间: 2006-07-26 21:24
值得学习!
作者: tankejin    时间: 2006-08-13 22:24
楼主 ,我的配置过程和你的一样,vsftpd.conf中的参数也对比过了,没有什么区别,但是还是登陆出错,信息如下:
[右] 正在连接到 vsftpd -> IP=192.168.0.88 PORT=21
[右] 正在连接到 vsftpd
[右] 500 OOPS: cannot locate user entry:ftpsecure
[右] 500 OOPS: child died
[右] 连接失败
请各位指点
作者: wolfg    时间: 2006-08-13 23:12
cannot locate user entry:ftpsecure

显然是pam没有找到对应的用户信息
作者: tankejin    时间: 2006-08-14 12:22
我按照 http://vod.sjtu.edu.cn/help/Article_Show.asp?ArticleID=1239 的方式安装并配置好了vsftpd,但是在我登陆的时候出现如下错误:
[右] 正在连接到 vsftpd -> IP=192.168.0.88 PORT=21
[右] 正在连接到 vsftpd
[右] 500 OOPS: cannot locate user entry:ftpsecure
[右] 500 OOPS: child died

是访问目录的时候出错吧?

下面是我的vsftpd.conf的部分信息:
guest_enable=yes
guest_username=vsftpdguest
virtual_use_local_privs=YES
chroot_local_user=YES
listen=yes
listen_port=21
user_config_dir=/etc/vsftpd/vsftpd_user_conf

在 /etc/vsftpd/vsftpd_user_conf下有个用虚拟用户名命名的文件: kjava
其中内容为:  local_root=目录路径

我已经将这个目录设置为系统的vsftpdguest可读可写了

我的配置和下面这个链接的也差不多,不知道是不是哪里细节没有注意到呢?


http://bbs.chinaunix.net/viewthr ... mp;highlight=vsftpd


/etc/pam.d/ftp中的内容如下:
#%PAM-1.0
auth       required        /lib/security/pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
auth       required        /lib/security/pam_unix.so shadow nullok
auth       required        /lib/security/pam_shells.so
account    required        /lib/security/pam_unix.so
session    required        /lib/security/pam_unix.so
auth required pam_mysql.o user=vsftpdguest passwd=1q2w3e4r host=localhost db=ftpuser table=users usercolumn=name passwdcolumn=passwd crypt=2
account required pam_mysql.o user=vsftpdguest passwd=1q2w3e4r host=localhost db=ftpuser table=users usercolumn=name passwdcolumn=passwd crypt=2
作者: hp999    时间: 2006-08-15 05:48
那个关于passwd字段长度的问题我也遇到了。之前一直没找到问题所在,后来将passwd字段的长度改为41后,就没有提示密码错了。但却遇到了其它形式的问题。
我的问题是:
[root@localhost vsftpd_user_conf]# ftp 192.168.1.20
Connected to 192.168.1.20.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (192.168.1.20:root):
331 Please specify the password.
Password:
500 OOPS: cannot change directory:/home/ftp/test
Login failed.
421 Service not available, remote server has closed connection
---------------------
我已在vsftpd.conf里加了这行:user_config_dir=/etc/vsftpd_user_conf
也在vsftpd_user_conf设置了test的内容为local_root=/home/ftp/test,
执行:
mkdir /home/ftp/test
chown vsftpdguest.vsftpdguest /home/ftp/test
chmod 600 /home/ftp/test
可是却总提示cannot change directory:/home/ftp/test,就算建立其它用户名及对应的目录也一样出错。

不知哪位大侠能帮帮忙啊?
作者: wolfg    时间: 2006-08-15 14:53
http://www.chinaunix.net/jh/15/704820.html
作者: hp999    时间: 2006-08-16 00:57
谢谢wolfg,但我不是执行了setsebool ftpd_disable_trans 1 之后禁用SELinux就解决问题的。
而是后来我执行 chmod 700 /home/ftp/test,将testr属性改了之后,就可以正常登录了。
却没弄明白为何使用600不行(因为楼主的帖子以及我找到的其它帖子里写的都是用chmod 600 来设置用户的目录。)

Connected to 192.168.1.20.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (192.168.1.20:root): test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

[ 本帖最后由 hp999 于 2006-8-16 01:10 编辑 ]
作者: enjoy48    时间: 2006-10-24 11:19
按照那些精华帖做了一遍,发现crypt=2时就是不成功,改为0就成功,今天才看到说password长度问题,于是兴致冲冲的去将长度改为60,结果还是不行,我select length(passwd) from user;发现长度怎么是16?
作者: enjoy48    时间: 2006-10-24 11:51
非常抱歉,我发现版主已经在“pam_mysql 安装配置总结 (结合vsftpd)  ”中进行了解释:(
作者: nicsky    时间: 2008-05-05 16:13
谢谢楼主了。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2