首页导航栏 - 网络工程 | 网站建设 | 设计在线 | 精彩图片 | 职业前线 | 创业之路 | 启步工具 | 教程资讯 | 休闲娱乐
帐号:
密码:

Google
Google提供的相关资源
启步网 > 教程资讯 > Linux教程
Linux下FTP服务器vsftp配置完整版
作者: 不详 阅读: 来源:Linux公社 时间:2006-12-1 10:26:03
字体
3、虚拟用户形式实现(db及mysql形式)
# cd /home/xuchen/vsftpd-2.0.3  //进入vsftpd-2.0.3的源代码目录
# make clean  //清除编译环境
# vi builddefs.h  \\\\继续编辑builddefs.h 文件,文件内容如下:
#ifndef VSF_BUILDDEFS_H

#define VSF_BUILDDEFS_H
#define VSF_BUILD_TCPWRAPPERS
#undef VSF_BUILD_PAM
#define VSF_BUILD_SSL

#endif /* VSF_BUILDDEFS_H */
将以上define VSF_BUILD_PAM行的undef改为define,支持tcp_wrappers,支持PAM认证方式,支持SSL,和匿名用户形式是一样的。

# make  //直接在vsftpd-2.0.3里用make编译
# ls -l vsftpd
-rwxr-xr-x  1 root root 86088 Jun  6 22:26 vsftpd  //可执行程序已被编译成功

创建必要的帐号,目录:
# useradd nobody  //可能你的系统已经存在此帐号,那就不用建立
# mkdir /usr/share/empty  //可能你的系统已经存在此目录,那就不用建立
# mkdir /var/ftp  //可能你的系统已经存在此目录,那就不用建立
# useradd -d /var/ftp ftp  //可能你的系统已经存在此帐号,那就不用建立
# chown root:root /var/ftp
# chmod og-w /var/ftp
请记住,如果你不想让用户在本地登陆,那么你需要把他的登陆SHELL设置成/sbin/nologin,比如以上的nobody和ftp我就设置成/sbin/nologin

安装vsftp配置文件,可执行程序,man等:
# install -m 755 vsftpd /usr/local/sbin/vsftpd-pam
# install -m 644 vsftpd.8 /usr/share/man/man8
# install -m 644 vsftpd.conf.5 /usr/share/man/man5
# install -m 644 vsftpd.conf /etc/vsftpd-pam.conf
这样就安装完成了,那么我们开始进行简单的配置

对于用DB库存储用户名及密码的方式来说:
(1)查看系统是否有相应软件包

# rpm –qa | grep db4
db4-devel-4.2.52-7.1
db4-4.2.52-7.1
db4-utils-4.2.52-7.1
(2)建立一个logins.txt的文件,单行为用户名,双行为密码,例如
# vi /home/logins.txt

xuchen
12345

(3)建立数据库文件并设置文件属性
# db_load -T -t hash -f /home/logins.txt /etc/vsftpd_login.db
# chmod 600 /etc/vsftpd_login.db
(4)建立认证文件
# vi /etc/pam.d/ftp 插入如下两行
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login
(5)建立一个虚拟用户
useradd -d /home/vsftpd -s /sbin/nologin vsftpd
ls -ld /home/vsftpd
drwx------  3 vsftpd vsftpd 1024 Jun  6 22:55 /home/vsftpd/
(6)编写配置文件(注意事项请参看匿名用户的配置,这里不再赘述)
# vi /etc/vsftpd-pam.conf
listen=YES
listen_port=21
tcp_wrappers=YES //支持tcp_wrappers,限制访问(/etc/hosts.allow,/etc/hosts.deny)
listen=YES的意思是使用standalone启动vsftpd,而不是super daemon(xinetd)控制它 (vsftpd推荐使用standalone方式)
anonymous_enable=NO
local_enable=YES  //PAM方式此处必须为YES,如果不是将出现如下错误:
500 OOPS: vsftpd: both local and anonymous access disabled!
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES
guest_enable=YES
guest_username=vsftpd //这两行的意思是采用虚拟用户形式
virtual_use_local_privs=YES //虚拟用户和本地用户权限相同

pasv_enable=YES //建立资料联机采用被动方式
pasv_min_port=30000 //建立资料联机所可以使用port 范围的上界,0表示任意。默认值为0。
pasv_max_port=30999 //建立资料联机所可以使用port 范围的下界,0表示任意。默认值为0。
(7)启动程序
# /usr/local/sbin/vsftpd-pam /etc/vsftpd-pam.conf &
(8)测试连通及功能
# vi /home/vsftpd/test //建立一个文件,内容如下
1234567890
# chown vsftpd.vsftpd /home/vsftpd/test

# ftp 127.0.0.1
Connected to 127.0.0.1.
220 (vsFTPd 2.0.3)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (127.0.0.1:root): xuchen
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 \"/\"
ftp> size test
213 11
ftp> quit
221 Goodbye.
OK,用户名为xuchen,密码为12345可以连接到FTP服务器,看不到文件列表,但可以下载已知文件名的文件,不能上传文件,非常安全吧!!

如果我们需要用户看到文件,怎么办?也好办,在配置文件中加入如下语句:
anon_world_readable_only=NO  //匿名登入者不能下载可阅读的档案,默认值为YES

如果需要让用户上传文件和下载文件分开,建议如下这么做
# vi /home/logins.txt
xuchen
12345
upload
45678
//首先建立虚拟用户upload,密码为45678
# db_load -T -t hash -f /home/logins.txt /etc/vsftpd_login.db //更新数据文件

# mkdir /home/vsftpd/upload
# vi /etc/vsftpd-pam.conf 加入如下语句
user_config_dir=/etc/vsftpd_user_conf
# mkdir /etc/vsftpd_user_conf
# vi /etc/vsftpd_user_conf/upload 文件内容如下
local_root=/home/vsftpd/upload
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

# chmod 700 /home/vsftpd/upload
# chown vsftpd.vsftpd /home/vsftpd/upload/

这样,xuchen用户可以下载/home/vsftpd里的文件及upload里的文件,而upload用户可以上传和下载/home/vsftpd/upload文件夹的东西,但不能到/home/vsftpd里下载文件,很简单得实现了分用户上传和下载

对于用Mysql库存储用户名及密码的方式来说:
就是把用户名和密码放在mysql库里,实现起来也相当简单
(1)建立一个库并设置相应权限
# mysql –p
mysql>create database ftpd;
mysql>use ftpd;
mysql>create table user(name char(20) binary,passwd char(20) binary);
mysql>insert into user (name,passwd) values (\'test1\',\'12345\');
mysql>insert into user (name,passwd) values (\'test2\',\'54321\');
mysql>grant select on ftpd.user to ftpd@localhost identified by \'123456\';
mysql>flush privileges; 刷新权限设置
mysql>quit
(2)下载libpam-mysql进行安装编译
下载地址如下:
http://nchc.dl.sourceforge.net/s ... am_mysql-0.5.tar.gz
假设我们把它放在了/home/xuchen目录下
# cd /home/xuchen
# tar xzvf pam_mysql-0.5.tar.gz
# cd pam_mysql
# make
# cp pam_mysql.so /lib/security
(3)建立PAM认证信息
# vi /etc/pam.d/ftp ,内容如下
auth required /lib/security/pam_mysql.so user=ftpd passwd=123456 host=localhost db=ftpd table=user usercolumn=name passwdcolumn=passwd crypt=0

account required /lib/security/pam_mysql.so user=ftpd passwd=123456 host=localhost db=ftpd table=user usercolumn=name passwdcolumn=passwd crypt=0

注意:
crypt= n
crypt=0: 明文密码
crypt=1: 使用crpyt()函数(对应SQL数据里的encrypt(),encrypt()随机产生salt)
crypt=2: 使用MYSQL中的password()函数加密
crypt=3:表示使用md5的散列方式
(4)建立本地虚拟用户
# useradd -d /home/ftpd -s /sbin/nologin ftpd

(5)下面就差修改vsftpd.conf文件了,我把我的提供给大家参考吧:)
# vi /etc/vsftpd-pam1.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
chroot_local_user=YES
guest_enable=YES
guest_username=ftpd
listen=YES
listen_port=21
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30999
anon_world_readable_only=NO
virtual_use_local_privs=YES

#user_config_dir=/etc/vsftpd_user_conf
可以看出,和前面的用db库来验证没有多大区别,其实就是一个东西,一个用mysql来验证,一个用db库,我个人比较倾向于用db库来验证,在这个环境下,相对于Mysql来说,安全系数更高一点。

(6)# /usr/local/sbin/vsftpd-pam /etc/vsftpd-pam1.conf &   //以后台方式启动

(7)测试连通
# ftp 127.0.0.1
Connected to 127.0.0.1.
220 (vsFTPd 2.0.3)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (127.0.0.1:root): test1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 \"/\"
ftp> quit
221 Goodbye.
看,成功了!!这样就实现了mysql的认证方式,很简单吧??

上一页 [1] [2] [3] [4] [5] [6] 下一页

责任编辑:一路狂奔
参与评论(条评论)
请遵守国家法律
笔名:
邮箱:
( 以上评论仅代表网友个人意见,不代表本站观点 )
相关资源
  • Linux下FTP服务器架设方案 [2006-11-30]
  •