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

简介:
编译安装vsftpd-2.3.4(配置虚拟用户登录)高级应用全攻略[连载之电子商务系统架构]
原文出处:
http://jimmyli.blog.51cto.com/  Jimmy Li Blog
作者:Jimmy Li 

联系讨论、扣扣:柒⑥柒陆叁⑤叁伍
关联博文:
http://jimmyli.blog.51cto.com/3190309/683599
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_lixw 51CTO博客,原文链接:http://blog.51cto.com/jimmyli/685293 ,如需转载请自行联系原作者




相关文章
|
5天前
|
机器学习/深度学习 API 语音技术
|
25天前
|
Cloud Native Devops 持续交付
构建未来:云原生架构在现代企业中的应用与挑战
【2月更文挑战第31天】 随着数字化转型的加速,云原生技术已经成为推动企业IT架构现代化的关键力量。本文深入探讨了云原生架构的核心组件、实施策略以及面临的主要挑战。通过分析容器化、微服务、DevOps和持续集成/持续部署(CI/CD)等关键技术,揭示了如何利用这些技术实现敏捷性、可扩展性和弹性。同时,文章还讨论了企业在采纳云原生实践中可能遇到的安全性、复杂性和文化适应性问题,并提供了解决这些问题的策略和建议。
|
1月前
|
数据库 Android开发 开发者
构建高性能微服务架构:从理论到实践构建高效Android应用:探究Kotlin协程的优势
【2月更文挑战第16天】 在当今快速迭代和竞争激烈的软件市场中,微服务架构以其灵活性、可扩展性和独立部署能力而受到企业的青睐。本文将深入探讨如何构建一个高性能的微服务系统,涵盖从理论基础到具体实现的各个方面。我们将重点讨论服务拆分策略、通信机制、数据一致性以及性能优化等关键主题,为读者提供一个清晰、实用的指南,以便在复杂多变的业务环境中构建和维护健壮的微服务体系结构。 【2月更文挑战第16天】 在移动开发领域,性能优化和流畅的用户体验是至关重要的。随着技术的不断进步,Kotlin作为一种现代编程语言,在Android开发中被广泛采用,尤其是其协程特性为异步编程带来了革命性的改进。本文旨在深入
238 5
|
1月前
|
网络协议 Linux
Linux DNS服务详解——DNS主从架构配置
Linux DNS服务详解——DNS主从架构配置
403 4
|
1月前
Web应用基本架构
Web应用基本架构。
37 6
|
3天前
|
运维 监控 自动驾驶
构建可扩展的应用程序:Apollo与微服务架构的完美结合
构建可扩展的应用程序:Apollo与微服务架构的完美结合
27 10
|
5天前
|
机器学习/深度学习 PyTorch API
|
5天前
|
机器学习/深度学习 语音技术 算法框架/工具
|
26天前
|
Cloud Native 安全 Devops
构建未来:云原生架构在现代企业中的应用与挑战
【2月更文挑战第30天】 随着数字化转型的深入,企业正迅速采纳云原生技术以适应不断变化的市场环境。本文探讨了云原生架构的关键组成部分,包括容器化、微服务、持续集成/持续部署(CI/CD)和DevOps实践,并分析了它们如何促进企业的敏捷性和可扩展性。同时,文章也识别了企业在采用云原生技术时面临的安全、文化和技术挑战,并提出了相应的解决策略,以帮助企业在云时代保持竞争力。
|
27天前
|
敏捷开发 jenkins Serverless
Serverless 应用架构转型
【2月更文挑战第29天】