概述
vsftp 全称Very Secure FTP,是FTP服务的一种。FTP会话包含了两个通道,控制通道和数据通道。它有两张工作模式:主动模式和被动模式
主动模式
FTP客户端连接到服务器的21号端口,发送用户名和密码,客户端随机开放一个(1024以上)端口,发送PORT命令到FTP服务器,告诉服务器客户端采用主动模式开放端口;FTP服务器收到PORT命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据,原理图如下:
被动模式
工作原理:FTP客户端连接到FTP服务器的21号端口,发送用户名,密码,PASV命令道FTP服务器服务器开放一个(1024以上)的端口,并把这个端口告诉客户端,客户端再连接到这个开服的端口进行数据传输,原理图如下:
安装
安装环境CentOS 6.5
服务端
yum -y install vsftpd
客户端
yum -y install vsftp lftp
启动
/etc/init.d/vsftpd start
chkconfig vsftpd on
注意: 在用netstat -antup | grep ftp 查看不到20端口是因为这个端口没有数据通信。
用客户端访问测试
[root@xs171 ~]# lftp 192.168.0.170
lftp 192.168.0.170:~> ls
drwxr-xr-x 2 0 0 4096 May 11 06:17 pub
配置文件
/etc/vsftpd/vsftpd.conf: 核心配置文件
/etc/vsftpd/user_list: 白名单,指定使用ftp的用户列表
/etc/vsftpd/ftpusers:黑名单,指定那些用户不能访问ftp
Demo
创建两个用户:ftpuser1,ftpuser2 并将用户锁定在/var/ftp/appdata
添加用户
useradd -s /sbin/nologin ftpuser1
useradd -s /sbin/nologin ftpuser2
echo "123456" | passwd --stdin ftpuser1
echo "123456" | passwd --stdin ftpuser2
编辑配置文件
vim /etc/vsftpd/vsftpd.conf
#禁止匿名用户访问
anonymous_enable=NO允许匿名用户访问
#允许本地用户登录
local_enable=YES
#设置用户根目录
local_root=/var/ftp/appdata
#激活chroot 功能
chroot_list_enable=YES
#设置锁定用户文件,文件存放要锁定的用户名
chroot_list_file=/etc/vsftpd/chroot_list
建立数据存储目录
mkdir /var/ftp/appdata
chown ftp.ftp /var/ftp/appdata
chmod -R o+w /var/ftp/appdata
建立要锁定的用户文件
建立要锁定的用户文件,并把ftpuser1,和ftpuser2添加到文件中,每个用户名占用一行。
touch /etc/vsftpd/chroot_list
vim /etc/vsftpd/chroot_list
注意:如何要想在ftp服务器上删除文件要用rmdir 命令,rm 不是ftp上的命令。
FTP 虚拟账号
创建FTP虚拟账号,账号normaluser可以下载文件,vipuser可以上传和下载
创建用户数据库
先建立用户文本文件vsftpd_virtualuser.txt。并添加用户normaluser 和vipuser
创建文本文件
vim /etc/vsftpd/vsftpd_virtualuser.txt
内容如下,用户和密码独立成行
normaluser
12345
vipuser
12345
生成数据库文件
用db_load 命令生成db文件,这样可以由FTP服务直接调用
rpm -qf `which db_load`
db_load -T -t hash -f /etc/vsftpd/vsftpd_virtualuser.txt /etc/vsftpd/vsftpd_virtualuser.db
//文本文件此时可以删除
rm -rf /etc/vsftpd/vsftpd_virtualuser.txt
参数说明:
- -T 允许程序将文本文件转译载入数据库。
- -t hash 使用hash 码加密
修改数据库文件访问权限
数据库文件保存着账号的密码信息,为了防止非法用户盗取,应设为只对root用户可读可写,即600
chmod 600 /etc/vsftpd/vsftpd_virtualuser.db
配置PAM 文件
为了使服务器能够使用数据库文件,对客户端进行身份验证,需要调用系统的PAM(Plugable Authentication Module)模块。PAM 模块配置文件的路径为 /etc/pam.d/目录,此目录下面保存着大量与认证有关的配置文件,并以服务名称命名。
修改vsftpd 对应的PAM 配置文件/etc/pam.d/vsftpd。
#%PAM-1.0
#session optional pam_keyinit.so force revoke
#auth required pam_listfile.so item=user #sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so
#auth include password-auth
#account include password-auth
#session required pam_loginuid.so
#session include password-auth
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_virtualuser
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_virtualuser
设置共享目录
对于普通用户和vip用户需要设置不同的权限,所以可以将两个账号的目录进行隔离,控制用户文件的访问。账号normaluser 对应的主目录为/var/ftp/share, 账号vipuser对应的主目录为/var/ftp/vip
添加用户
useradd -d /var/ftp/share normaluser
useradd -d /var/ftp/vip vipuser
修改权限
share 目录为可读执行rx,vip目录为可读可写执行rwx。
chmod -R 500 /var/ftp/share/
chmod -R 700 /var/ftp/vip/
建立配置文件
### 修改vsftpd.conf 主配置文件
anonymous_enable=NO
local_enable=YES
chroot_local_user=YES
pam_service_name=vsfptd
#设置虚拟账号的主目录为vuserconfig
user_config_dir=/etc/vsftpd/vuserconfig
max_clients=300
max_per_ip=10
建立虚拟账号配置文件
在user_config_dir 指定的路径下,建立与虚拟账号同名的配置文件
mkdir /etc/vsftpd/vuserconfig
touch /etc/vsftpd/vuserconfig/normaluser
touch /etc/vsftpd/vuserconfig/vipuser
normaluser 中的内容
#开启虚拟账号登陆
guest_enable=yes
#设置normaluser 对用的登陆账号为normaluser
guest_username=normaluser
#允许匿名用户浏览服务器文件系统
anon_world_readable_only=no
#限定传输速率
anon_max_rate=50000
vipuser中的内容
guest_enable=yes
guest_username=vipuser
anon_world_readable_only=no
write_enable=yes
anon_mkdir_write_enable=yes
anon_upload_enable=yes
anon_max_rate=100000