1.什么是vsftp
vsftp是linux服务器上的一款使用ftp协议的软件,是linux上使用最广泛的ftp服务端软件
ftp协议是使用明文传输的,很不安全,一般用于局域网内的文件上传、下载
2.vsftp连接类型
ftp连接要用到2个端口:21、20端口。
21端口用于用户收发FTP命令,如登录等;20端口则用于传送上传、下载的数据
3.vsftp的2种工作模式
(1)主动模式(port模式)
(2)被动模式(passive)
(3)2种模式的选择
主动模式:传送数据时,服务器连接到客户端的端口。需要客户端开放端口给服务器
被动模式:传送数据时,客户端连接到服务器的端口。服务器端开放端口给客户端连接
linux中FTP默认是被动模式,因为客户端往往在防火墙后面,服务器很难连接到客户端。如果要把被动模式改为主动模式,可以在ftp界面下键入passive
4.vsftp的2种传输模式
(1)Binary模式(默认模式):不对数据进行任何处理。适合可执行文件、压缩文件、图片等
(2)ASCII模式:进行文本传输时,自动适应目标操作系统的结束符
(3)切换方式:在ftp互动界面中输入ascii就切换为ASCII模式,输入bin,就转换到Binary模式。
5.软件信息
服务端软件名 | vsftpd |
客户端软件名 | ftp |
服务名 | ftpd |
配置文件 | /etc/vsftpd/vsftpd.conf |
6.匿名登录
6.1安装ftp、vsftpd
yum -y install ftp vsftpd
需要BASE yum源,Media源安装不了
6.2开启ftp服务并设置为开机自启
systemctl start vsftpd
systemctl enable vsftpd
6.3使用匿名用户登录
(1)登录流程
在客户端键入命令:ftp FTP服务器ip
然后在用户名一栏输入ftp或anonymous,代表匿名用户
密码一栏直接回车跳过。这样就可以通过匿名用户登录上了
*匿名用户登录后的所在的服务器目录为/var/ftp,但不建议直接在这个目录下上传下载文件,因为所有的匿名用户都是使用这个目录,很容易造成文件混乱,所以最好再建一层三级目录
(2)权限设置
匿名用户的权限取决于2部分,一是ftp配置文件中对匿名用户的权限设置,二是登录后所在服务器目录的权限设置。
配置文件中匿名用户权限的设置见下表:
配置文件中有关匿名用户权限的设置 | 作用 | 在配置文件中的状态 |
anonymous_enable=YES | 启用匿名访问 | 默认开启 |
anon_umask=022 | 使匿名用户可以下载自己上传的文件 | 无,需要手动写入 |
anon_root=/var/ftp | 匿名用户的FTP根目录 | 无,需要手动写入 |
anon_upload_enable=YES | 允许上传文件 | 默认被注释 |
anon_mkdir_wirte_enable=YES | 允许创建目录 | 默认被注释 |
anon_other_write_enable=YES | 开放其他写入权(删除、覆盖、重命名等) | 无,需要手动写入 |
vim打开文件后可以通过/关键字来快速搜索
除此之外,还要通过chmod命令对FTP根目录的other用户权限进行设置
*如果出现下图这样的错误,说明是SElinux防火墙没关,在服务器端setenforce 0关闭SElinux防火墙即可
6.4 使用服务器本地用户登录
(1)登录流程
*在服务器端创建一个不可以登录系统,专用于FTP登录的用户:
useradd -s /sbin/nologin ymyx
*给新创建的这个用户设置密码:
passwd ymyx
通过上述方法创建不可登录系统的用户后,还需要修改/etc/shells文件,在文件中添加下图中的内容
如果是使用正常创建的可以登录系统的用户,则不需要修改/etc/shells
*在客户端登录FTP服务器:
ftp FTP服务器ip
并输入用户名与密码
(2)权限设置
配置文件中有关匿名用户权限的设置 | 作用 | 在配置文件中的状态 |
local_enable=YES | 启用服务器本地用户访问 | 默认开启 |
local__umask=022 | 使服务器本地用户可以下载自己上传的文件 | 默认开启 |
local__root=/var/ftp | 服务器本地用户的FTP根目录(如果不写,) | 无,需要手动写入 |
chroot_local_user=YES | 是否将用户禁锢在主目录 | 默认被注释 |
chroot_list_enable=YES | 开启白名单,白名单中用户可以随意切换目录 | 默认被注释 |
chroot_list_file=/etc/vsftpd/chroot_list | 白名单位置(需手动创建,在里面直接写用户名即可) | 默认被注释 |
经试验,在centos7环境下,配置文件中设置了chroot_local_user=YES后,客户端无法再用服务器本地账户登录FTP,需要在配置文件中额外加一条:allow_writeable_chroot=YES
(3)白名单与黑名单
*配置文件中可以设置允许登录FTP的白名单,以及不允许登录FTP的黑名单
黑名单:userlist_enable=YES&userlist_deny=YES
白名单:userlist_enable=YES&userlist_deny=NO
*黑名单配置文件: /etc/vsftpd/ftpusers
这个文件的优先级很高,只要在文件写入了用户名,不需要重启FTP服务就可以立即生效
6.5使用虚拟用户登录
虚拟用户是人为创建的,需要找一个本地用户作为映射。它的好处是,可以对不同的用户进行不同的权限设置,更灵活。
6.5.1建立虚拟用户数据库文件
vim /etc/vsftpd/vsftpd.user
#这个文件就是虚拟用户的数据库文件,但还需要转换需要格式。文件名称随意
#该文件的编辑格式为奇数行为用户名,偶数行为用户名密码
vsftpd.user内的格式见下图
db_load -T -t hash -f vsftpd.user vsftpd.db
#把文件转换为数据库的格式
#-T代表转换为数据库格式,-t hash代表使用hash加密,-f后接原文件
chmod 600 vsftpd.db
#修改权限为600,ftp强制的操作
6.5.2创建虚拟用户的映射用户
useradd -d /var/ftproot -s /sbin/nologin xnyh
#-d后可以指定家目录
xnyh这个用户不需要设置密码,它的作用就是给虚拟用户提供一个家目录
6.5.3建立支持虚拟用户的PAM认证文件
FTP登录默认是不会去找虚拟用户的数据库文件的,需要修改PAM认证文件。
FTP原有的PAM认证文件是/etc/pam.d/vsftpd,可以直接对其进行修改,也可以复制一份再改名
cp -a /etc/pam.d/vsftpd /etc/pam.d/vsftpd.pam
#复制一份PAM认证文件
vim /etc/pam.d/vsftpd.pam
#把文件原有的内容都删掉,并添加下面两条内容
auth required pam_userdb.so db=/etc/vsftpd/vsftpd
account required pam_userdb.so db=/etc/vsftpd/vsftpd
#这里的/etc/vsftpd/vsftpd就是之前建立的虚拟用户数据库文件vsftpd.db,结尾的db省略掉了
修改好PAM认证文件后,还需要修改FTP主配置文件:/etc/vsftpd/vsftpd.conf
*将pam_service_name=vsftpd改为pam_service_name=vsftpd.pam
*还需要在其中添加:
guest_enable=YES
#开放映射
guest_username=xnyh
#使用的映射用户名
user_config_dir=/etc/vsftpd/dir
#匿名用户的配置文件的目录位置,这个目录是自己创建的,名称随意
#因为每个虚拟用户都有自己的配置文件,所以这里需要一条语句来标注位置,关于虚拟用户配置文件如何配置,之后再展开
6.6 ftp模式下的一些常用命令
cd、ls、pwd、mkdir
put:上传
mput:同时上传多个
get:下载
mget:同时下载多个
delete:删除文件
mdelete:同时删除多个文件
rmdir:删除目录
rename:重新命名
quit:退出