您的位置:首页 > 运维架构 > 网站架构

编译安装vsftpd-2.3.4(配置虚拟用户登录)高级应用全攻略[连载之电子商务系统架构]

2011-10-11 16:06 1026 查看
编译安装vsftpd-2.3.4(配置虚拟用户登录)高级应用全攻略[连载之电子商务系统架构]

原文出处:http://jimmyli.blog.51cto.com/ Jimmy Li Blog

作者:Jimmy Li

联系讨论、扣扣:柒⑥柒陆叁⑤叁伍

关联博文:/article/4322094.html

centos5.6 (64bit)编译安装vsftpd-2.3.4的配置(两种用户登录)[连载之电子商务系统架构]

------[连载之电子商务系统架构]访问量超过100万的电子商务网站技术架构

续上一博文,再深入解说vsftpd配置FTP服务器,实现更深层次的功能,达到更安全的、高效、高级应用技巧。
本文旨在解说,系统安装过程中需要注意的地方,关键环节,工具包之间的依存关系,互换相承支持关系。

详细说明为啥我要这样操作,并且在操作过程遇到的问题,和相应的解决方法。

本文要点:

1.实现多虚拟用户。实现多个虚拟宿主用户(本地用户),一个宿主本地用户可以关联多个虚拟用户。

例如,宿主本地用户www,关联多个虚拟用户jimmyli.blog.51cto.com(目录/data/jimmyli.blog.51cto.com),user1(目录/data/user1),…………,N用户(目录N)可自己权限可读写,更改文件、文件夹属性。

2.vsftp手工编译及配置虚拟用户过程。版本vsftpd-2.3.4,系统Centos32位,64位。

3.虚拟用户权限,单独控制目录\文件的权限,读,写,修改,删除,创建目录\文件。

目录:

一、完整的实例

二、编译安装要点分析,详细解说

三、提供参考

四、重要提示

五、配置文件操作解说

六、简单配置实例

七、参考实例

八、常见错误及解决方法

一、完整的实例:

yum install pam-devel db4-utils

wget http://www.92csz.com/downloads/vsftpd-2.3.4.tar.gz

tar zxvf vsftpd-2.3.4.tar.gz

cd vsftpd-2.3.4

make && make install
mkdir -p /data/www/user1

chown wwwftp:wwwftp /data/www/user1

useradd -d /data/www -s /sbin/nologin wwwftp
mkdir -p /etc/vsftpd/
vim /etc/vsftpd/vftpuser.txt

jimmyli.blog.51cto.com

123456

user1

password1

格式为第一行为用户名名,第二行为密码,然后类推
db_load -T -t hash -f /etc/vsftpd/vftpuser.txt /etc/vsftpd/vsftpd_login.db

chmod 600 /etc/vsftpd/vsftpd_login.db
vim /etc/pam.d/vsftpd.vu

auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
vim /etc/vsftpd.conf

local_enable=YES

local_umask=022

dirmessage_enable=YES

xferlog_enable=YES

xferlog_file=/var/log/vsftpd.log

connect_from_port_20=YES

xferlog_std_format=YES

listen=YES

pam_service_name=vsftpd.vu

guest_enable=YES

virtual_use_local_privs=YES

user_config_dir=/etc/vsftpd/vsftpd_user_conf

pasv_min_port=5000

pasv_max_port=6000

# 限制所有用户都在家目录

chroot_local_user=yes
mkdir -p /etc/vsftpd/vsftpd_user_conf

vim /etc/vsftpd/vsftpd_user_conf/user1

guest_username=wwwftp

write_enable=YES

anonymous_enable=NO

anon_world_readable_only=NO

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

local_umask=022

download_enable=Yes

local_root=/data/www/user1

二、编译安装要点分析,详细解说:

(一).安装支持工具包

主要使用了PAM数据方式的虚拟用户配置
1、首先是安装PAM、db4工具包
yum install pam-devel db4-utils
确认安装DB4部件包:

查看是否安装 db4 db4-utils

rpm -qa|grep db4 运行后出现下面内容 说明已经安装可以使用db_load命令(主要是 db4-utils)

[root@gb ~]# rpm -qa|grep db4

db4-utils-4.3.29-10.el5_5.2

db4-java-4.3.29-10.el5_5.2

db4-4.3.29-10.el5_5.2

db4-tcl-4.3.29-10.el5_5.2

db4-devel-4.3.29-10.el5_5.2
确认安装PAM服务相关部件:

查看是否安装pam

rpm -qa|grep pam

[root@gb ~]# rpm -qa|grep pam

pam_smb-1.1.7-7.2.1

pam_pkcs11-0.5.3-23

pam-devel-0.99.6.2-6.el5_5.2

pam_ccreds-3-5

pam_passwdqc-1.0.2-1.2.2

pam-0.99.6.2-6.el5_5.2

pam_krb5-2.2.14-21.el5
1.安装Vsftpd服务相关部件:

2.确认安装PAM服务相关部件:

[root@beidou8.com ~]# yum install pam*

开发包,其实不装也没有关系,主要的目的是确认PAM。

3.安装DB4部件包:

这里要特别安装一个db4的包,用来支持文件数据库。

[root@beidou8.com ~]# yum install db4*
===

使用yum泛字符搜索并安装

yum -y install db4* pam*
Running Transaction

Updating : pam_krb5 1/5

Installing : db4-tcl 2/5

Installing : db4-java 3/5

Installing : db4-devel 4/5

Cleanup : pam_krb5 5/5
Installed:

db4-devel.i386 0:4.3.29-10.el5_5.2 db4-java.i386 0:4.3.29-10.el5_5.2

db4-tcl.i386 0:4.3.29-10.el5_5.2
Updated:

pam_krb5.i386 0:2.2.14-21.el5
===

(二).下载编译安装包,编译,编译安装

1.下载

wget http://www.92csz.com/downloads/vsftpd-2.3.4.tar.gz

wget http://xiazai.xiazaiba.com/Soft/V/vsftpd-2.3.4.tar.gz

wget http://down1.chinaunix.net/distfiles/vsftpd-2.3.4.tar.gz

wget http://www.92csz.com/downloads/vsftpd-2.3.4.tar.gz

wget http://source.ipfire.org/source-2.x/vsftpd-2.3.4.tar.gz

wget ftp://ftp.pku.edu.cn/open/ftp/vsftpd/vsftpd-2.3.4.tar.gz

wget http://www.baiyuxiong.com/wp-content/uploads/2011/07/vsftpd-2.3.4.tar.gz

上面是目前互联网有效的下载地址,使用我惯用的方法,从资源中找到目前互联网有效的下载的地址。探寻下载地址的方法非常好用,百发百中。

http://download.chinaunix.net/download/0001000/19.shtml
2.解压

tar zxvf vsftpd-2.3.4.tar.gz

cd vsftpd-2.3.4

3.建立默认文件夹,编译,安装编译

3A.建立默认文件夹

mkdir -p /usr/local/man/man8 #//安装编译的时候保存的默认文件目录。可能你的系统已经存在此目录,那就不用建立

mkdir -p /usr/local/man/man5 #//安装编译的时候保存的默认文件目录。可能你的系统已经存在此目录,那就不用建立

3B.编译,安装编译

make && make install

cd ../

三、提供参考

创建必要的帐号,目录:

# 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

========================================================================

touch /etc/vsftpd.user_list

mkdir /etc/vsftpd

touch /etc/vsftpd/chroot_list

echo "/usr/local/sbin/vsftpd &" >> /etc/rc.local

mkdir /var/ftp

touch /etc/vsftpd/userlist.chroot

touch /etc/vsftpd/userlist_deny.chroot

touch /var/log/vsftpd.log

mkdir -p /usr/share/empty

========================================================================

四、重要提示:

由于这里建立vsftpd的虚拟用户登录,编译前请一定要确定 支持PAM认证方式

虚拟用户形式实现(db及mysql形式)

# cd vsftpd-2.3.4 //进入vsftpd-2.0.3的源代码目录

# make clean //清除编译环境

# vi builddefs.h \\继续编辑builddefs.h 文件,文件内容如下:

#ifndef VSF_BUILDDEFS_H
#define VSF_BUILDDEFS_H

#undef VSF_BUILD_TCPWRAPPERS

#define 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 108300 Sep 27 11:15 vsftpd //可执行程序已被编译成功
========================================================================

源码安装默认不支持tcp_wrappers和ssl

需要修改builddefs.h
/*默认值如下:*/

#undef VSF_BUILD_TCPWRAPPERS /*是否支持TCP WRAPPERS*/

#define VSF_BUILD_PAM /*是否支持自定义虚拟用户登录*/

#undef VSF_BUILD_SSL /*是否支持SSL传输*/

/*支持则将对应项设为define,否则设为undef*/

========================================================================
如何查看vsftpd是否支持PAM认证方式?

查看编译的vsftpd二进制文件是否加载了pam

ldd vsftpd

如下:

linux-gate.so.1 => (0x00393000)

libwrap.so.0 => /lib/libwrap.so.0 (0x00969000)

libnsl.so.1 => /lib/libnsl.so.1 (0x00af7000)

libpam.so.0 => /lib/libpam.so.0 (0x00b9d000)

libdl.so.2 => /lib/libdl.so.2 (0x00947000)

libresolv.so.2 => /lib/libresolv.so.2 (0x00106000)

libutil.so.1 => /lib/libutil.so.1 (0x041a1000)

libcap.so.1 => /lib/libcap.so.1 (0x00b12000)

libc.so.6 => /lib/libc.so.6 (0x007ec000)

libaudit.so.0 => /lib/libaudit.so.0 (0x00b82000)

/lib/ld-linux.so.2 (0x007c8000)

看到libpam.so.0 => /lib/libpam.so.0 (0x00fc4000)表示已成功加载pam认证模块

五、配置文件操作解说

1.建立虚拟用户对应的系统真实用户

useradd -d /data/www -s /sbin/nologin wwwftp

/data/www是用户的默认home目录;不想让用户在本地登陆,那么你需要把他的登陆SHELL设置成/sbin/nologin

useradd -d /home/vftpsite -s /sbin/nologin vftpuser
2.建立db数据库,同时只有root用户才能读写

#vim /etc/vsftpd/vftpuser.txt
jimmyli.blog.51cto.com

123456

user1

password1

格式为第一行为用户名名,第二行为密码,然后类推
建立db数据库,同时只有root用户才能读写

db_load -T -t hash -f /etc/vsftpd/vftpuser.txt /etc/vsftpd/vsftpd_login.db

chmod 600 /etc/vsftpd/vsftpd_login.db
3.配置pam文件

(32位系统)

vim /etc/pam.d/vsftpd.vu
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
vim /etc/pam.d/vsftpd.vu (64位系统)
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

cat /etc/pam.d/vsftpd
注意:上面的/etc/vsftpd/vsftpd_login 与 建立的 /etc/vsftpd/vsftpd_login.db 是对应关系。
4.默认的配置文件位置

vim /etc/vsftpd.conf

六、简单配置实例:

/etc/vsftpd.conf

===

local_enable=YES

local_umask=022

dirmessage_enable=YES

xferlog_enable=YES

xferlog_file=/var/log/vsftpd.log

connect_from_port_20=YES

xferlog_std_format=YES

listen=YES
pam_service_name=vsftpd.vu
guest_enable=YES

virtual_use_local_privs=YES

user_config_dir=/etc/vsftpd/vsftpd_user_conf

pasv_min_port=5000

pasv_max_port=6000
===touch user1 user2

vim /etc/vsftpd/vsftpd_user_conf/user1
guest_username=wwwftp

write_enable=YES

anonymous_enable=NO

anon_world_readable_only=NO

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

local_umask=022

download_enable=Yes

local_root=/data/www/user1
===

vim /etc/vsftpd/vsftpd_user_conf/user2
write_enable=YES

anon_world_readable_only=NO

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

local_root=/home/vftpsite/jimmyli.blog.51cto.com
===

停止vsftpd进程

pkill vsftpd
启动vsftp

/usr/local/sbin/vsftpd &

七、参考实例

vsftpd.conf 配置参考说明:

========================================================================

# 以独立的FTP服务运行

listen=yes
# 允许本地用户登录

local_enable=YES

# 本地用户的写权限

write_enable=YES

# 使用FTP的本地文件权限,默认为077

# 一般设置为022

local_umask=022
# 切换目录时

# 是否显示目录下.message的内容

dirmessage_enable=YES
# 激活上传/下载的日志

xferlog_enable=YES
# 启用FTP数据端口的数据连接

connect_from_port_20=YES
pam_service_name=vsftpd

tcp_wrappers=YES
# 用userlist来限制用户访问

#userlist_enable=yes
one_process_model=NO #无说明
# 允许匿名登录

anonymous_enable=NO
guest_enable=YES #启动vsftpd的虚拟用户功能

guest_username=wwwftp

user_config_dir=/etc/vsftpd_user_config

user_sub_token=$USER
========================================================================

八、常见错误及解决方法

登录错误1:

500 OOPS: cannot locate user entry:wwwftp

当guest_username=wwwftp配置时,系统没有建立wwwftp系统账号导致错误。

解决方法:创建账号
登录错误2:

500 OOPS: cannot change directory:/data/www

当配置文件设置了local_root=/data/www/,但系统没有建立文件夹

解决方法:创建目录
登录错误3:

配置文件开启虚拟用户登陆,但用户无法登陆:

[右] USER adminftp

[右] 331 Please specify the password.

[右] PASS (隐藏)

[右] 530 Login incorrect.

[右] 连接失败

解决方法:检查VSFTP编译安装的时候,时候支持pam,有无加载了pam。
登录错误4:

单独用户未指定用户home目录时候,默认转到的目录为“/var/ftp/”

解决方法:建立默认目录
请关注连载续篇,欢迎朋友一起交流,讨论。扣扣:柒⑥柒陆叁⑤叁伍。

[End]本文出自 “Jimmy Li我站在巨人肩膀上” 博客,请务必保留此出处http://jimmyli.blog.51cto.com/3190309/685293
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: