一、简单介绍FTP及VSFTP作用及端口号
FTP作用:Internet 上用来传送文件的协议
VSFTP全称(very secure FTP)模式为:c/s模式,FTP服务器默认使用TCP协议的20,21端口与客户端进行通信
20端口:主要用于建立数据连接,并传输文件数据
21端口:主要用于建立控制连接,并传输FTP控制命令
FTP数据连接分为主动模式和被动模式,主动模式主要就是服务器主动发起数据连接,而被动模式是服务器被动等待数据连接
二、FTP小实验
实验之前要求关闭防火墙,命令为:systemctl stop firewalld sentenforce 0
安装FTP服务,命令:yum install -y vsftp
进入vsftpd.conf中修改配置文件:路径为vim /etc/vsftpd/vsftpd.con
配置结束后给予777权限:
可用自己电脑的Win 10实验,首先ping通自己的虚拟机地址:(我的地址,192.168.101.10)ping通后直接在cmd中输入ftp+地址
三、配置本地用户
(1)系统本地的默认设置
vsftpd默认容许所有的系统用户都可以访问FTP,并且要进行身份验证。但是用系统用户身份登录FTP服
务器后,默认将位于自己的家目录中,而不是FTP的主目录。
创建系统用户,并设置密码
useradd test1
passwd test1
echo “ftp test” >> /home/test1/ftptest.txt
windows上测试,匿名登录之后,右键选择登入,输入test1和密码,此时可以直接查看到用户家目录下的文件,但此时用命令行访问时可以进入到其他目录中
(2)禁锢系统用户到指定目录中
Windows客户端也可以通过ftp命令访问服务器,由于在命令行模式下模式采用FTP的主动模式,因而此
时需要将客户端的防火墙关闭才能成功访问。
修改配置文件
chroot_local_user=YES # 打开此权限
local_root=/home/vsftpd/ # 设置本地登录目录
# systemctl restart vstpd
此时已经无法切换到上级目录了
让一些管理用户可以自由切换目录:配置文件
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
# vim /etc/vsftpd/chroot_list
test1
# systemctl restart vsftpd
四、说明
具体情况有以下几种:
1)当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd/chroot_list文件
中列出的用户,可以切换到上级目录;未在文件中列出的用户,不能切换到站点根目录的上级目录。
2)当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd/chroot_list文件
中列出的用户,不能切换到站点根目录的上级目录;未在文件中列出的用户,可以切换到上级目录。
3)当chroot_list_enable=NO,chroot_local_user=YES时,所有用户均不能切换到上级目录。
4)当chroot_list_enable=NO,chroot_local_user=NO时,所有用户均可以切换到上级目录。
5)当用户不允许切换到上级目录时,登录后FTP站点的根目录“/”是该FTP账户的主目录,即文件的系统
的/var/ftp目录。
(3)设置可以访问服务器的用户列表
vsftpd中提供了两个与系统用户相关的文件:/etc/vsftpd/user_list和/etc/vsftpd/ftpusers,这两文件均
包含一份FTP用户名的列表,但是作用却截然不同:
/etc/vsftpd/ftpusers:这个文件中包含的用户账号将被禁止登陆vsftpd服务器,不管该用户是否
在/etc/vsftpd/user_list文件中出现。通常将root,bin,daemon等特殊用户列在该文件中,禁止用于
登陆FTP服务。
/etc/vsftpd/user_list,该文件的用户账号可能被禁止登陆,也可能不禁止,具体要看vsftpd.conf的文
件配置。当存在“userlist_enable=YES”的配置时,/etc/vsftpd/user_list文件生效;如果配
置“userlist_deny=YES”时,则禁止用户列表中的用户登录,如果“userlist_deny=NO”时,仅容许列表中
的用户登录。
综合来看,/etc/vsftpd/ftpusers提供一份禁止用户,/etc/vsftpd/user_list提供一份灵活可控的用户列
表,/etc/vsftpd/ftpusers优先级高于/etc/vsftpd/user_list
修改配置文件
# vim vsftpd.conf
userlist_deny=NO
# vim vsftpd.conf
test1
# systemctl restart vsftpd
五、配置说明
除了匿名用户,系统用户之外,还可以设置虚拟用户来访问FTP。所谓虚拟用户,是指存放于独立数据
库文件中的FTP用户账号,可以将他们映射到某个不能登录的系统用户账号上,以进一步增强FTP服务
器的安全。
(1)创建虚拟用户数据库文件
vsftp服务的虚拟用户数据库默认使用Berkeley DB格式的数据库文件,建立数据库文件需要用到
db_load命令工具,db_load工具是由db4-utils软件包提供的,所以首先需要确认系统中已经装好db4-
utils组件。
# yum install epel-release
# yum provides db_load
# yum install libdb-utils
# rpm -qa libdb-utils
libdb-utils-5.3.21-24.el7.x86_64
# db_load -T -t hash -f logins.txt logins.db
# chmod 600 logins.*
# ll
-rw-------. 1 root root 12288 7月 13 17:09 logins.db
-rw-------. 1 root root 33 7月 13 17:07 logins.txt
注:db_load命令是一种固定语法,
—T:允许非Berkeley DB的应用程序使用从文本格式转换的DB数据库文件。
-t hash:指定读取数据文件的基本方法。
-f:指定数据的源文件
(2)创建虚拟用户的映射账号
vsftpd服务对虚拟用户其实采用了映射的控制方式,把所有的虚拟用户账号都对应到了同一个系统用户
上,并将这个用户的家目录作为所有虚拟用户登录的后公用的FTP主目录。
如:
# useradd -d /var/ftp/virtual -s /sbin/nologin virtual
(3)创建pam认证文件
# cp -p /etc/pam.d/vsftpd{,date "+%Y%m%d%H%M%S"
}
# vim /etc/pam.d/vsftpd
auth required /lib64/security/pam_usrdb.so db=/etc/vsftpd/logins
account required /lib64/security/pam_usrdb.so db=/etc/vsftpd/logins
# 修改配置文件
[root@test4 vsftpd]# tail -10 vsftpd.conf
# Make sure, that one of the listen options is commented !!
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES #加入
guest_username=virtual #加入
user_config_dir=/etc/vsftpd/vuser #加入
allow_writeable_chroot=YES #加入
(4)创建虚拟用户-配置文件
# mkdir vuser
# cd vuser/
# vim aaa
# vim aaa
# vim bbb
# cat aaa
anon_upload_enable=YES
#anon_world_readable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
# cat bbb
#anon_upload_enable=YES
#anon_world_readable=YES
anon_mkdir_write_enable=YES
#anon_other_write_enable=YES
er
# cd vuser/
# vim aaa
# vim aaa
# vim bbb
# cat aaa
anon_upload_enable=YES
#anon_world_readable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
# cat bbb
#anon_upload_enable=YES
#anon_world_readable=YES
anon_mkdir_write_enable=YES
#anon_other_write_enable=YES
# systemctl restart vsftpd