Vsftpd
Vsftpd 文件传输服务
ftp是典型的C/S结构,由服务端跟客户端两个部分共同实现文件传输功能
一、Ftp工作原理
ftp采用TCP协议的20、21端口与客户端进行通信
-
20端口:用于建立数据连接并传输文件数据
-
21端口:用于建立控制连接,并传输ftp控制命令
二、ftp的传输模式
1、主动模式
首先由客户端向服务端的21端口建立ftp控制连接,当需要传送数据时,服务端从 20 端口主动向客户端发起连接。
在主动模式下, FTP客户端从任意端口5150(端口号>1023)发起一个FTP请求, 并携带自己监听的端口号5151(发送的端口号+1=监听端口号);随后服务器返回确认, 然后从服务器本地的20端口主动发起连接请求到客户端的监听端口5151, 最后客户端返回确认。
2、被动模式
首先由客户端向服务端的21端口建立ftp控制连接,当需要传送数据时,客户端向服务端的非20端口发送请求并建立连接数据
在被动模式中,命令连接和数据连接都由客户端来发起,如上图所示,客户端用随机命令端口5150向服务器的21命令端口发送一个PASV请求,然后服务器返回数据端口3267,告诉客户端我在哪个端口监听数据连接。然后客户端向服务器的监听端口3268发起数据连接,最后服务器回复确认。
vsftpd默认是被动模式。所以客户端要设置被动模式连接,如果到现在还没连接成功的看客户端有没有设置被动传输模式。
三、FTP 常见的服务端及客户端
1、常见的服务端程序
- IIS、Serv-U
- wu-ftpd、Proftpd
- vsftpd(Very Secure FTP Daemon)
2、常见的 FTP 客户端程序
- ftp 命令
- CuteFTP、FlashFXP、LeapFTP、Filezilla
- gftp、kuftp
四、部署 FTP 服务
1、把光盘挂载到/mnt下
mount /dev/cdrom /mnt
2、添加本地yum源
cd /etc/yum.repos.d && mkdir repo.bak
mv * repo.bak
vim vsftp.repo
[local]
name=local
baseurl=file:///mnt
enabled=1
gpgcheck=0
3、安装FTP 服务
yum -y install vsftpd
五、匿名用户访问
1、备份原 ftp 配置文件
cd /etc/vsftpd/
mv vsftpd.conf vsftpd.conf.bak
cat vsftpd.conf.bak |grep -v "^#"|grep -v "^$" > vsftpd.conf
2、修改配置文件
anonymous_enable=YES
anon_upload_enable=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
3、给予数据根目录写权限
cd /var/ftp
chmod o+w pub
4、启动服务
systemctl start vsftpd
systemctl enable vsftpd
六、user_list文件限制用户登录
1、编辑/etc/vsdtpd/user_list文件,把允许登录服务的用户添加进文件
Ps 此 ftpusers 文件中的所有用户都将禁止登陆,不管 user_list 文件中是否出现。
2、添加用户赋予密码
3、编辑配置文件追加以下内容(记得把 anonymous_enable
配置改为 NO)
vim vsftpd.conf
userlist_enable=YES # 启用 user_list 用户列表文件
userlist_deny=NO # 不禁用 user_list 列表中用户登陆
4、重启vsftpd服务
systemctl restart vsftpd
5、测试 nlemon 用户不可以登陆访问
6、验证 ylemon 用户可以登陆访问
七、虚拟用户登录(常用)
vsftpd提供了三种认证方式,分别是:匿名用户认证、本地用户认证和虚拟用户认证。从安全的角度来说,虚拟用户最安全也是最常用的认证方式,下面开始配置虚拟用户。
1、创建vusers.list文件
vim /etc/vsftpd/vusers.list
tom
123123
jerry
456456
2、db_load 创建用户的数据库文件
cd /etc/vsftpd/
db_load -T -t hash -f vusers.list vusers.db
chmod 600 /etc/vsftpd/vusers.*
3、添加映射的本地用户
useradd -d /var/ftproot -s /sbin/nologin virtual
chmod 755 /var/ftproot/
4、添加编辑文件vsftpd.vu
vim /etc/pam.d/vsftpd.vu
#%PAM-1.0
# 此句用于检查用户密码,数据库文件不要写后缀.db
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vusers
# 此句用于检查用户是否在有效期内,数据库支持虚拟用户的PAM认证文件。
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vusers
5、编辑配置文件
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
allow_writeable_chroot=YES # 必须,如果不加入此配置则无法登陆
local_enable=YES # 必须,本地系统用户访问
write_enable=YES # 必须,任何形式的写入方式
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
tcp_wrappers=YES
anon_umask=022 # 必须,虚拟用户上传的默认权限掩码值
local_umask=022 # 必须,本地用户上传的默认权限掩码值
guest_enable=YES # 必须,开启虚拟用户模式
guest_username=virtual # 必须,指定虚拟用户账号
pam_service_name=vsftpd.vu # 必须,指定pam文件
user_config_dir=/etc/vsftpd/vusers_dir # 必须,指定虚拟用户的权限配置目录
6、创建vusers_dir目录下的虚拟用户
mkdir /etc/vsftpd/vusers_dir
touch /etc/vsftpd/vusers_dir/tom
touch /etc/vsftpd/vusers_dir/jerry
7、为虚拟用户设置不同的权限
tom 权限设置
vim /etc/vsftpd/vusers_dir/tom
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
jerry 权限设置
# 如果不进行权限设置的话,默认该用户只有 登录、浏览、下载 的权限。
8、验证虚拟用户权限
- 使用Tom虚拟用户登录服务,Tom可以登录、浏览、下载、上传、创建、删除
- Jerry用户只能登录、浏览、下载、但无法上传