一、FTP服务概述
FTP(File Transfer Protocol,文件传输协议)是典型的C/S结构的应用层协议,需要由服务端软件、客户端软件共同实现文件传输功能
FTP服务器默认使用TCP协议的20、21端口与客户端实现通信。20端口用于建立数据连接,并传输数据文件;21端口用于建立控制连接,并传输FTP控制命令。FTP数据连接分为主动模式和被动模式
主动模式:服务器主动发起数据连接
被动模式:服务器被动等待数据连接
vsftpd软件
vsftpd是目前在Linux/Unix领域应用十分广泛的一款FTP服务软件,vsftpd服务的名称来源于“Very Secure FTP Deamon”,该软件针对安全特性方面做出了大量的设计,并且在速度和稳定性方面的表现也相当突出
vsftpd的配置文件
使用vsftpd服务需要先安装Linux系统中的RPM软件包,安装完后会自动添加名为 vsftpd 的系统服务。vsftpd服务的配置文件位于 /etc/vsftpd 目录下:分为以下三种
ftpusers文件:此文件中的用户将禁止登陆vsftpd服务。默认包括root、bin、daemon等用于系统运行的特殊用户
user_list文件:此文件中的用户可能被禁止,也可能被允许登陆,具体取决于vsftpd.conf主配置文件
vsftpd.conf主配置文件:下面是最常用的一些配置参数
二、基于系统用户的FTP服务
vsftpd服务可以使用Linux主机中的系统用户账号作为登陆FTP的账号,包括匿名访问和用户验证两种形式
1.匿名访问的FTP访问目录
FTP匿名访问时,对应的系统用户为ftp,不需要密码验证,任何人都可以访问,宿主目录为 /var/ftp也就是匿名访问时所在的FTP根目录。基于安全考虑,根目录的权限只有读取权限
(1)准备匿名FTP访问目录
/var/ftp/ 目录下默认设置了一个名为pub的子文件夹,可以给匿名访问FTP时提供上传文件使用
例如:执行下面操作可以使匿名用户对该目录具有写入权限,以便上传文件
# chown ftp /var/ftp/pub
(2)匿名用户配置并启动vsftpd服务
例如:设置服务器提供匿名访问,允许匿名用户上传、下载,但禁止使用删除、重命名,可修改以下配置
# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES //允许匿名用户访问
local_enable=NO //不需要启用本地用户
write_enable=YES //开发服务器的写入权限
anon_umask=022 //设置匿名用户上传数据的权限掩码
anon_upload_enable=YES //允许匿名上传文件
anon_mkdir_write_enable=YES //允许匿名用户创建目录
dirmessage_enable=YES
# service vsftpd start
(3)测试匿名FTP服务器
在Linux中,可使用FTP命令进行测试
# ftp 192.168.1.1
最常用的命令有:
ls 列出远程机的当前目录
cd 在远程机上改变工作目录
lcd 在本地机上改变工作目录
get(mget) 从远程机传送指定文件到本地机
put(mput) 从本地机传送指定文件到远程机
quit 断开与远程机的连接并退出ftp
2.用户验证的ftp服务
使用Linux主机的系统用户作为FTP账号,提供基于用户名/密码的登陆验证,登陆FTP后,将默认位于自己的宿主目录,且在宿主目录中拥有读写权限
(1)基本的本地用户验证
# vim /etc/vsftpd/vsftpd.conf
local_enable= YES //启用本地用户
write_enable=YES //开发服务器的写入权限
local_umask=077 //仅属主拥有权限
chroot_local_user=YES //禁锢在宿主目录
# service vsftpd
(2)使用user_list用户列表文件
例如:只允许yang、shu、fan这三个用户登陆
# vim /etc/vsftpd/user_list
yang
shu
fan
# vim /etc/vsftpd/vsftpd.conf
userlist_enable=YES //启用user_list列表中的用户
userlist_deny=NO //不禁用user_list列表中的用户
三、基于虚拟用户的FTP服务
使用虚拟用户的好处在于,可以将ftp登陆账号和系统登陆账号分开,用户名和密码都不相同,进一步提高FTP服务器的安全性
1.建立虚拟用户的账号数据库
(1)创建文本格式的用户名、密码列表
奇数行为用户名,偶数行为上一行用户名的密码
例如:添加yangshufan、51cto这两个用户登陆,密码为123、456
# vim /etc/vsftpd/vusers.list
yangshufan
123
51cto
456
(2)创建Berkeley DB格式的数据库文件
通过db_load工具创建Berkeley DB格式的数据库文件
# cd /etc/vsftpd/
# db_load -T -t hash -f vusers.list vusers.db
(3)添加虚拟用户的映射文件、创建FTP根目录
vsftpd服务器对虚拟用户的控制采用了映射的控制方法,将所有的虚拟用户对应到同一个系统用户,该用户的宿主目录为所有虚拟用户登陆后公用的FTP根目录
例如:使用FTP根目录设为/var/ftproot,映射账号的名称为virtual
# useradd -d /var/ftproot -s /sbin/nologin virtual
# chmod 755 /var/ftproot
2.为vsftpd服务添加虚拟用户支持
(1)为虚拟用户建立PAM认证文件
# vim /etc/pam.d/vsftpd.vu
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
(2)修改vsftpd配置,添加虚拟用户支持
# vim /etc/vsftpd/vsftpd.conf
local_enable= YES //需映射本地用户
write_enable=YES //开发服务器的写入权限
anon_umask=022 //设置上传数据的权限掩码
guest_enable=YES //启用用户映射功能
guest_username=virtual //指定映射的系统用户名称
pam_service_name=vsftpd.vu //指定PAM认证文件
3.为不同的虚拟用户建立独立的配置文件
通过上面的几个步骤,虚拟用户已经可以登录FTP并下载文件了,若要为不同的虚拟用户建立不同的权限,可以为每个虚拟用户建立单独配置文件来实现
例如:使用户yangshufan能够上传文件、创建目录,而用户51cto仍然只有默认的下载权限
# vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_dir
# mkdir /etc/vsftpd/vusers_dir/ //创建用户配置文件
# cd /etc/vsftpd/vusers_dir/
# vim yangshufan //为用户yangshufan创建独立配置文件
anon_upload_enable=YES
anon_mkdir_write_enable=YES
# touch 51cto //为其他用户创建空的配置文件
//为其他用户创建空配置文件
# service vsftpd reload