Linux FTP文件传输服务
2019-02-24 本文已影响3人
yangqing
一、vsftpd服务基础
1.1 FTP服务概述
1. FTP连接及传输模式
主动模式:服务器主动发起数据连接。 客户端向服务端的21端口建立ftp控制连接,传输数据时,客户端以PORT命令告知服务器“我打开了某端口,你过来连接我”,于是服务器从20端口向客户端的该端口发送请求并建立数据连接
被动模式:服务器被动等待数据连接。首先有客户端向服务端的 21 端口建立ftp控制连接,当需要传输数据时,服务器以PASV命令告知客户端“我打开了某端口,你过来连接我”,于是客户端向服务器的该端口(非20)发送请求并建立数据连接。
在传输文件时,根据是否进行字符转换,分为文本模式和二进制模式。
文本模式:又称为ASCII模式,一般只用于纯文本文件的传输。
二进制模式:又称为Binary模式,这种模式不会转换文件中的字符序列,更适合传输程序,图片等非纯文本字符的文件。
2. FTP用户类型
使用ftp客户端软件访问服务器,通常要用到一类特殊的用户账号,其用户名为ftp和anonymous,提供任意密码都可以通过服务器的建造这样的用户称为“匿名用户”。
除了不需要密码验证的用户以外,ftp服务器还可以直接使用本机的系统用户账号来进行验证,这些用户通常被称为“本地用户”。匿名用户也有对应的本地系统用户账号“ftp”,但对于vsftpd服务来说,本地用户指的是除了匿名用户以外的其他系统用户。
独立数据库文件中的ftp用户账号,通常被称为“虚拟用户”。
3. FTP服务器软件的种类
Windows系统中,常见的FTP服务器软件包括IIS、Serv-U等。Linux系统中,有proftpd、pureftpd、vsftpd等。vsftpd可以支持15000个用户并发连接。
4. FTP客户端工具的种类
图形化ftp客户端工具,Windows中常用:CuteFTP、FlashFXP、LeapFTP、Filezilla等。Linux中较常用的有gftp、kuftp等。
下载工具:FlashGet、Wget等。
1.2 vsftpd的配置文件
1. 用户列表文件ftpusers和user_list
ftpusers文件:此文件中列出的用户将禁止登录vsftpd服务器,不管该用户是否在user_list文件中出现。默认已包括root、bin、daemon等用于系统运行的特殊用户。
user_list文件:此文件中包含的用户可能被禁止登录,也可能被允许登录,具体取决于主配置文件vsftpd.conf中的设置。当存在“userlist_enables=YES”的配置项时,user_list列表文件方可生效;若指定“userlist_deny=YES”,则仅禁止此列表中的用户登录;若指定“userlist_deny=NO”,则仅允许列表中的用户登录
ftpusers文件相当于黑名单,为vsftpd服务器提供了一份进制登录的用户列表。
2. 主配置文件vsftpd.conf
作用范围 配置项及示例 含义说明
匿名用户 anonymous_enable=YES 是否允许匿名访问
anon_umask=022 设置匿名用户所上传文件的默认权限掩码值
anon_root=/var/ftp 设置匿名用户的FTP根目录(缺省为/var/ftp)
anon_upload_enable=YES 是否允许匿名用户上传文件
anon_mkdir_write_enable=YES 是否允许匿名用户有其他写入权限,如对文件改名、覆盖及删除文件等。
anon_max_rate=0 限制匿名用户的最大传输速率(0为无限制),单位为字节/秒
本地用户 local_enable=YES 是否允许本地系统用户访问
local_umask=022 设置本地用户所上传文件的默认权限掩码值
local_root=/var/ftp 设置本地用户的FTP根目录(缺省为用户的宿主目录)
chroot_local_user=YES 是否将FTP本地用户禁锢在宿主目录中
local_max_rate=0 限制本地用户的最大传输速率(0为无限制),单位为字节/秒
全局配置 listen=YES 是否以独立运行的方式监听服务
listen_address=0.0.0.0 设置监听FTP服务的IP地址
listen_port=21 设置监听FTP服务的端口号
write_enable=YES 启用任何形式的写入权限(如上传、删除文件等)都需要开启此项
ftpd_banner=FTP Server 欢迎信息:Welcome to this FTP server!
download_enable=YES 是否允许下载文件(建立仅限于浏览、上传的FTP服务器时可将其设为“NO”)
dirmessage_enable=YES 用户切换进入目录时显示 .message 文件(如果存在)的内容
xferlog_enable=YES 启用xferlog日志,默认记录到/var/log/xferlog,指定:xferlog_file=/var/log/xferlog
xferlog_std_format=YES 启用标准的xferlog日志格式,若禁用此项,将使用vsftpd自己的日志格式
connect_from_port_20=YES 允许服务器主动模式(从20端口建立数据连接)
pasv_enable=YES 允许被动模式连接
pasv_min_port=24500 设置用于被动模式的服务器最小端口号
pasv_max_port=24600 设置用于被动模式的服务器最大端口号
pam_service_name=vsftpd 设置用于用户认证的PAM文件位置(/etc/pam.d/目录中对应的文件名)
userlist_enable=YES 是否启动user_list用户列表文件,注:使user_list文件生效
userlist_deny=YES 是否禁止user_list列表文件中的用户账号,注:YES禁止(NO允许)此列表用户登录
max_clients=0 最多允许多少个客户端同时连接(0为无限制)
max_per_ip=0 对来自同一个IP地址的客户端,最多允许多少个并发连接(0为无限时)
tcp_wrappers=YES 是否启用tcp_wrappers主机访问控制
二、基于系统用户的FTP服务
2.1 匿名访问的FTP服务
1. 准备匿名访问的FTP服务
在/var/ftp/目录下创建一个文件:tar zcf /var/ftp/vsftpdconf.tar.gz /etc/vsftpd
设置一个名为pub子文件夹,拥有写入权限:chown ftp /var/ftp/pub
2.开放匿名用户配置,并启动vsftpd服务。允许上传、下载,禁止删除操作,如下:
[root@localhost ~]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=NO
write_enable=YES
#local_umask=022
anon_umask=022
anon_root=/var/ftp
anon_upload_enable=YES
anon_mkdir_write_enabled=YES
hide_ids=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=NO
tcp_wrappers=YES
2.2 用户验证的FTP服务
1.基本的本地用户验证
[root@localhost ~]# cat /etc/vsftpd/vsftpd.conf
# ===============================================================
# 如果为 NO 一般就是选择用 xinet 启动 ftp 服务
listen=YES
# 只监听来访问10.10.10.10(适用本机多网卡、多IP的情况)的FTP服务请求
# listen_address=10.10.10.10
# 禁止匿名用户登录
anonymous_enable=NO
# 启用本地用户能够登录 ftp
local_enable=YES
write_enable=YES
local_umask=022
# 欢迎信息
ftpd_banner=Welcome to the FTP server !
# 上传下载配置信息
xferlog_enable=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
# 启用默认端口
connect_from_port_20=YES
# 最多可连接的客户端数
max_clients=10
# 是否隐藏文件的所有者和组信息, YES: 当用户使用"ls -al"之类的指令时,
# 在目录列表中所有文件的拥有者和组信息都显示为ftp. 默认为NO
hide_ids=YES
# 限制用户在自己的家目录之内
chroot_local_user=YES
# 启用不被 chroot 的使用者账号(启用跳出家目录配置文件)
chroot_list_enable=YES
# 不被 chroot 的使用者账号的列表文件(跳出家目录用户)
chroot_list_file=/etc/vsftpd/chroot_list
# 针对不同的用户做不同的配置,这个目录下都是以用户名作为文件名
user_config_dir=/etc/vsftpd/vsftpd_user_conf
# [root@localhost vsftpd]# cat vsftpd_user_conf/yq
# local_root=/home/yq
# 限制某些用户的访问
userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list
pam_service_name=vsftpd
pam_service_name=/etc/pam.d/vsftpd
# ===============================================================
2.允许user_list用户列表文件登录
# 限制某些用户的访问
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
2.3 vsftpd服务的其他常用配置
1.修改vsftpd服务的监听地址、端口
listen=YES
listen_address=10.10.10.10
listen_port=2121
2.允许使用FTP服务器的被动模式
pasv_enable=YES
pasv_min_port=24500
pasv_max_port=24600
3.限制FTP连接的并发数、传输速度
max_clients=10
max_per_ip=1
anan_max_rate=50000
local_max_rate=200000
三、基于虚拟用户的FTP服务
3.1 建立虚拟用户的账号数据库
1.创建文本格式的用户名、密码列表
[root@localhost ~]# cat /etc/vsftpd/vusers.list
yq
123
jack
123
2.创建BerkeleyDB格式的数据库文件
[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# db_load -T -t hash -f vusers.list vusers.db
[root@localhost vsftpd]# file vusers.db
vusers.db: Berkeley DB (Hash, version 9, native byte-order)
[root@localhost vsftpd]# chmod 600 vusers.*
[root@localhost vsftpd]# ll vusers.*
-rw------- 1 root root 12288 3月 10 19:31 vusers.db
-rw------- 1 root root 16 3月 10 19:28 vusers.list
3.添加虚拟用户的映射账号、创建FTP跟目录
[root@localhost ~]# useradd -d /var/ftproot -s /sbin/nologin virtual
[root@localhost ~]# chmod 755 /var/ftproot/
3.2 为vsftpd服务添加虚拟用户支持
1.为虚拟用户建立PAM认证文件
[root@localhost ~]# cat /etc/pam.d/vsftpd.vu
#%PAM-1.0
# 需要认证 auth
auth required pam_userdb.so db=/etc/vsftpd/vusers
# 是否合法认证 account
account required pam_userdb.so db=/etc/vsftpd/vusers
2.修改vsftpd配置,添加虚拟用户支持
[root@localhost ~]# cat /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.为不用的虚拟用户建立独立的配置文件
[root@localhost ~]# cat /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_dir
[root@localhost ~]# mkdir /etc/vsftpd/vusers_dir
[root@localhost ~]# cd /etc/vsftpd/vusers_dir
[root@localhost vusers_dir]# cat yq
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_max_rate=200000
四、配置支持SSL加密传输的FTP
4.1 生成SSL证书
[root@localhost ~]# openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
4.2 配置SSL
#vim /etc/vsftpd/vsftpd.conf
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
rsa_cert_file=/etc/vsftpd/vsftpd.pem
SSL参数含义
ssl_enable=yes/no 是否启用 SSL,默认为no
allow_anon_ssl=yes/no 是否允许匿名用户使用SSL,默认为no
rsa_cert_file=/path/to/file rsa证书的位置
dsa_cert_file=/path/to/file dsa证书的位置
force_local_logins_ssl=yes/no 非匿名用户登陆时是否加密,默认为yes
force_local_data_ssl=yes/no 非匿名用户传输数据时是否加密,默认为yes
force_anon_logins_ssl=yes/no 匿名用户登录时是否加密,默认为no
force_anon_data_ssl=yes/no 匿名用户数据传输时是否加密,默认为no
ssl_sslv2=yes/no 是否激活sslv2加密,默认no
ssl_sslv3=yes/no 是否激活sslv3加密,默认no
ssl_tlsv1=yes/no 是否激活tls v1加密,默认yes
ssl_ciphers=加密方法 默认是DES-CBC3-SHA