FTP服务:实现ftp的一个服务,安装vsftpd软件即可搭建ftp服务器
FTP协议:文件传输协议(file transfer protocol),在不同的机器之间实现文件传输功能。
# 查看是否有vsftpd应用
[root@zxy_master ~]# rpm -qi vsftpd
# yum安装vsftpd
[root@zxy_master ~]# yum -y install vsftpd
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
......
Installed:
vsftpd.x86_64 0:3.0.2-29.el7_9
Complete!
由详细信息中提示,vsftpd is a Very Secure FTP daemon.
说明vsftpd是一个非常安全的后台守护进程。daemon
应该都比较了解了,当使用daemon启动的时候,不在控制台显示,可以通过ps -ef | grep **
命令查看
[root@zxy_master ~]# rpm -qi vsftpd
Name : vsftpd
Version : 3.0.2
Release : 29.el7_9
Architecture: x86_64
Install Date: Tue 08 Nov 2022 09:24:07 PM CST
Group : System Environment/Daemons
Size : 361349
License : GPLv2 with exceptions
Signature : RSA/SHA256, Fri 11 Jun 2021 11:06:15 PM CST, Key ID 24c6a8a7f4a80eb5
Source RPM : vsftpd-3.0.2-29.el7_9.src.rpm
Build Date : Thu 10 Jun 2021 12:15:50 AM CST
Build Host : x86-02.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : https://security.appspot.com/vsftpd.html
Summary : Very Secure Ftp Daemon
Description :
vsftpd is a Very Secure FTP daemon. It was written completely from
scratch.
被动模式FTP服务器
[root@zxy_master /]# cd /etc/vsftpd/
[root@zxy_master vsftpd]# vim vsftpd.conf
#修改下列参数的值:
#禁止匿名登录FTP服务器。
anonymous_enable=YES
#允许本地用户登录FTP服务器。
local_enable=YES
#监听IPv4 sockets。
listen=YES
#表示登录FTP服务器是根据/etc/pam.d/vsftpd文件进行安全认证
pam_service_name=vsftpd
#当userlist_enable=YES,userlist_deny=NO时,FTP服务器仅允许user_list文件中的用户访问
userlist_enable=YES
userlist_deny=NO
#用户登录FTP服务器默认根目录
#可自行创建并指定目录
local_root=/var/ftpfiles
#全部用户被限制在主目录。
chroot_local_user=YES
#启用例外用户名单。
chroot_list_enable=YES
#当chroot_local_user=YES,chroot_list_enable=YES时,在chroot_list下添加的用户不受限制
#可自行创建文件:touch chroot_list
chroot_list_file=/etc/vsftpd/chroot_list
#开启被动模式。
pasv_enable=YES
allow_writeable_chroot=YES
#搭建FTP服务器的公网IP
pasv_address=?????
#被动模式下,需要开启被动端口范围,有助于提高访问FTP服务器安全性
#需要开启50000-50010的端口
pasv_min_port=50000
pasv_max_port=50010
#创建登录用户
#vsftpd使用的就是Linux中的用户名和密码,不需要单独创建
#但是默认情况下,ftp不允许使用root直接登录
[root@zxy_master ~]# useradd zxyftp
[root@zxy_master ~]# passwd zxyftp
Changing password for user ftp.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
# 创建用户登录目录,并授权,文件路径与vsftpd.conf配置保持一致
[root@zxy_master /]# cd /var
[root@zxy_master var]# mkdir ftpfiles
[root@zxy_master var]# chown -R zxyftp:zxyftp ftpfiles/
[root@zxy_master var]# chmod o+w ftpfiles/
# 创建不受限制主目录文件,文件路径与vsftpd.conf配置保持一致
[root@zxy_master /]# cd /etc/vsftpd
[root@zxy_master vsftpd]# touch chroot_list
[root@zxy_master vsftpd]# echo zxyftp >> chroot_list
# vsftpd启动异常
[root@zxy_master ~]# service vsfptd start
Redirecting to /bin/systemctl start vsfptd.service
Failed to start vsfptd.service: Unit not found.
# 1.使用systemctl list-unit-files --type=service查看
[root@zxy_master ~]# systemctl list-unit-files --type=service
......
vsftpd.service disabled
vsftpd@.service disabled
......
# 2.service vsftpd.service status查看状态
[root@zxy_master ~]# service vsftpd.service status
Redirecting to /bin/systemctl status vsftpd.service
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
# 重启vsftpd
[root@zxy_master ~]# service vsftpd.service restart
Redirecting to /bin/systemctl restart vsftpd.service
# 查看vsftpd状态
[root@zxy_master ~]# service vsftpd.service status
Redirecting to /bin/systemctl status vsftpd.service
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: active (running) since Tue 2022-11-08 21:36:51 CST; 3s ago
Process: 9461 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 9462 (vsftpd)
Tasks: 1
Memory: 692.0K
CGroup: /system.slice/vsftpd.service
└─9462 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
Nov 08 21:36:51 zxy_master systemd[1]: Starting Vsftpd ftp daemon...
Nov 08 21:36:51 zxy_master systemd[1]: Started Vsftpd ftp daemon.
# 通过ps -ef | grep ,可以查看应用后台启动进程
[root@zxy_master ~]# ps -ef | grep vsftpd
root 9462 1 0 21:36 ? 00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root 9610 30599 0 21:37 pts/0 00:00:00 grep --color=auto vsftpd
# 9462为vsftpd进程ID
[root@zxy_master ~]# netstat -nltp | grep 9462
tcp6 0 0 :::21 :::* LISTEN 9462/vsftpd
[root@zxy_master ~]# yum -y install ftp lftp
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package ftp.x86_64 0:0.17-67.el7 will be installed
---> Package lftp.x86_64 0:4.4.8-12.el7_8.1 will be installed
--> Finished Dependency Resolution
[root@zxy_master ftpfiles]# lftp zxyftp@ip
Password:
lftp zxyftp@ip:~> ls
lftp zxyftp@ip:~> pwd
ftp://zxyftp@ip/%2Fvar/ftpfiles
lftp zxyftp@ip:~>
使用ftp://ip:port
可以通过QQ浏览器打开,用户名和密码是ftp的用户名和密码。也就是2.2 创建用户
的时候创建的用户名。
输入密码后,即可查看该ftp服务器下的文件。
通过修改vsftpd配置文件vsftpd.conf
,实现ftp服务器登录黑白名单,主要涉及两个配置userlist_enable=YES、userlist_deny=NO
,两个文件ftpusers、user_list
创建三个测试用户,通过修改两个配置项,查看三个用户的登录状态
# 创建测试用户一
[root@zxy_master vsftpd]# useradd t1
[root@zxy_master vsftpd]# passwd t1
Changing password for user t1.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
# 创建测试用户二
[root@zxy_master vsftpd]# useradd t2
[root@zxy_master vsftpd]# passwd t2
Changing password for user t2.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
# 创建测试用户三
[root@zxy_master vsftpd]# useradd t3
[root@zxy_master vsftpd]# passwd t3
Changing password for user t3.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
上一步中已经创建了三个用户,现将用户t1
追加到ftpusers文件
,用户t2
追加到user_list文件
,用户t3
不放在两个文件中。
[root@zxy_master vsftpd]# echo t1 >> ftpusers
[root@zxy_master vsftpd]# echo t2 >> user_list
userlist_enable=YES
userlist_deny=YES
# 1.将两个配置项都改为YES,userlist_enable=YES userlist_deny=YES
[root@zxy_master vsftpd]# vim vsftpd.conf
# 2.重启vsftpd服务
[root@zxy_master vsftpd]# systemctl restart vsftpd.service
# 3.测试t1,登录失败
[root@zxy_master vsftpd]# lftp t1@localhost
Password:
lftp t1@localhost:~> ls
ls: Login failed: 530 Login incorrect.
lftp t1@localhost:~> exit
# 4.测试t2,登录失败
[root@zxy_master vsftpd]# lftp t2@localhost
Password:
lftp t2@localhost:~> ls
ls: Login failed: 530 Permission denied.
lftp t2@localhost:~> exit
# 5.测试t3,登陆成功
[root@zxy_master vsftpd]# lftp t3@localhost
Password:
lftp t3@localhost:~> ls
-rw-rw-r-- 1 1002 1002 0 Nov 10 01:19 a.txt
drwxrwxr-x 2 1002 1002 4096 Nov 10 01:19 zxy
userlist_enable=YES
userlist_deny=NO
# 1.修改两个配置项,userlist_enable=YES userlist_deny=NO
[root@zxy_master vsftpd]# vim vsftpd.conf
# 2.重启服务
[root@zxy_master vsftpd]# systemctl restart vsftpd.service
# 3.测试t1,登录失败
[root@zxy_master vsftpd]# lftp t1@localhost
Password:
lftp t1@localhost:~> ls
ls: Login failed: 530 Permission denied.
lftp t1@localhost:~> exit
# 4.测试t2,登录成功
[root@zxy_master vsftpd]# lftp t2@localhost
Password:
lftp t2@localhost:~> ls
-rw-rw-r-- 1 1002 1002 0 Nov 10 01:19 a.txt
drwxrwxr-x 2 1002 1002 4096 Nov 10 01:19 zxy
lftp t2@localhost:/> exit
# 5.测试t3,登录失败
[root@zxy_master vsftpd]# lftp t3@localhost
Password:
lftp t3@localhost:~> ls
ls: Login failed: 530 Permission denied.
lftp t3@localhost:~> exit
userlist_enable=NO
userlist_deny=YES
# 1.修改两个配置项,userlist_enable=NO userlist_deny=YES
[root@zxy_master vsftpd]# vim vsftpd.conf
# 2.重启服务
[root@zxy_master vsftpd]# systemctl restart vsftpd.service
# 3.测试t1,登录失败
[root@zxy_master vsftpd]# lftp t1@localhost
Password:
lftp t1@localhost:~> ls
ls: Login failed: 530 Login incorrect.
lftp t1@localhost:~> exit
# 4.测试t2,登录成功
[root@zxy_master vsftpd]# lftp t2@localhost
Password:
lftp t2@localhost:~> ls
-rw-rw-r-- 1 1002 1002 0 Nov 10 01:19 a.txt
drwxrwxr-x 2 1002 1002 4096 Nov 10 01:19 zxy
lftp t2@localhost:/> exit
# 5.测试t3,登录成功
[root@zxy_master vsftpd]# lftp t3@localhost
Password:
lftp t3@localhost:~> ls
-rw-rw-r-- 1 1002 1002 0 Nov 10 01:19 a.txt
drwxrwxr-x 2 1002 1002 4096 Nov 10 01:19 zxy
lftp t3@localhost:/> exit
userlist_enable=NO
userlist_deny=NO
# 1.修改两个配置项,userlist_enable=NO userlist_deny=NO
[root@zxy_master vsftpd]# vim vsftpd.conf
# 2.重启服务
[root@zxy_master vsftpd]# systemctl restart vsftpd.service
# 3.测试t1,登录失败
[root@zxy_master vsftpd]# lftp t1@localhost
Password:
lftp t1@localhost:~> ls
ls: Login failed: 530 Login incorrect.
lftp t1@localhost:~> exit
# 4.测试t2,登录成功
[root@zxy_master vsftpd]# lftp t2@localhost
Password:
lftp t2@localhost:~> ls
-rw-rw-r-- 1 1002 1002 0 Nov 10 01:19 a.txt
drwxrwxr-x 2 1002 1002 4096 Nov 10 01:19 zxy
lftp t2@localhost:/> exit
# 5.测试t3,登录成功
[root@zxy_master vsftpd]# lftp t3@localhost
Password:
lftp t3@localhost:~> ls
-rw-rw-r-- 1 1002 1002 0 Nov 10 01:19 a.txt
drwxrwxr-x 2 1002 1002 4096 Nov 10 01:19 zxy
lftp t3@localhost:/> exit
用户t1存在于ftpusers文件
用户t2存在于user_list文件
用户t3不存在这两个文件
四次测试结果,可得出如下表格:
当userlist_enable=YES,userlist_deny=YES时,ftpusers和user_list文件中用户均不能访问
当userlist_enbale=YES,userlist_deny=NO时,仅允许user_list文件中用户访问
当userlist_enbale=NO时,禁止ftpusers文件中用户访问
userlist_enable=YES | userlist_enable=NO | |
---|---|---|
userlist_deny=YES | t3 | t2,t3 |
userlist_deny=NO | t2 | t2,t3 |
如果当前FTP服务器仅需设置黑名单时,那么修改配置userlist_enable=NO
即可
如果当前FTP服务器仅需设置白名单时,那么修改配置userlist_enable=YES,userlist_deny=NO
即可
如果当前FTP服务器需设置黑白名单时,那么修改配置userlist_enable=YES,userlist_deny=NO
即可
通过修改vsftpd配置文件vsftpd.conf
,实现ftp服务器登录时主目录限制,主要涉及三个配置项chroot_local_user=YES、chroot_list_enable=YES、chroot_list_file=/etc/vsftpd/chroot_list·
,一个文件chroot_list
创建两个测试用户,通过修改两个配置项,查看各个用户的登录状态
# 1.创建用户t1
[root@zxy_master vsftpd]# useradd t1
Creating mailbox file: File exists
[root@zxy_master vsftpd]# passwd t1
Changing password for user t1.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
# 2.创建用户t2
[root@zxy_master vsftpd]# useradd t2
Creating mailbox file: File exists
[root@zxy_master vsftpd]# passwd t2
Changing password for user t2.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
上一步中已经创建了两个用户,现将用户t1
追加到chroot_list文件中
,而用户t2
则按兵不动
[root@zxy_master vsftpd]# echo t1 >> chroot_list
因为我已经设置了黑白名单(userlist_enable=YES userlist_deny=NO)
,所以需要将用户t1
和用户t2
加入到白名单里。
[root@zxy_master vsftpd]# echo "t1" >> user_list
[root@zxy_master vsftpd]# echo "t2" >> user_list
chroot_local_user=YES
chroot_list_enable=YES
# 1.将两个配置项都改为YES,chroot_local_user=YES chroot_list_enable=YES
[root@zxy_master vsftpd]# vim vsftpd.conf
# 2.重启服务
[root@zxy_master vsftpd]# systemctl restart vsftpd.service
# 3.测试t1,不受限制在主目录
[root@zxy_master vsftpd]# lftp t1@localhost
Password:
lftp t1@localhost:~> ls
-rw-rw-r-- 1 1002 1002 0 Nov 10 05:29 a.txt
drwxrwxr-x 2 1002 1002 4096 Nov 10 01:19 zxy
lftp t1@localhost:~> cd /opt/
lftp t1@localhost:/opt> exit
# 4.测试t2,被限制主目录
[root@zxy_master vsftpd]# lftp t2@localhost
Password:
lftp t2@localhost:~> ls
-rw-rw-r-- 1 1002 1002 0 Nov 10 05:29 a.txt
drwxrwxr-x 2 1002 1002 4096 Nov 10 01:19 zxy
lftp t2@localhost:/> cd /opt/
cd: Access failed: 550 Failed to change directory. (/opt)
lftp t2@localhost:/> exit
chroot_local_user=YES
chroot_list_enable=NO
# 1.chroot_local_user=YES chroot_list_enable=NO
[root@zxy_master vsftpd]# vim vsftpd.conf
# 2.重启服务
[root@zxy_master vsftpd]# systemctl restart vsftpd.service
# 3.测试用户t1,被限制在主目录
[root@zxy_master vsftpd]# lftp t1@localhost
Password:
lftp t1@localhost:~> ls
-rw-rw-r-- 1 1002 1002 0 Nov 10 05:29 a.txt
drwxrwxr-x 2 1002 1002 4096 Nov 10 01:19 zxy
lftp t1@localhost:/> cd /opt
cd: Access failed: 550 Failed to change directory. (/opt)
lftp t1@localhost:/> exit
# 4.测试用户t2,被限制在主目录
[root@zxy_master vsftpd]# lftp t2@localhost
Password:
lftp t2@localhost:~> ls
-rw-rw-r-- 1 1002 1002 0 Nov 10 05:29 a.txt
drwxrwxr-x 2 1002 1002 4096 Nov 10 01:19 zxy
lftp t2@localhost:/> cd /opt
cd: Access failed: 550 Failed to change directory. (/opt)
lftp t2@localhost:/> exit
chroot_local_user=NO
chroot_list_enable=YES
# 1.将两个配置项都改为YES,chroot_local_user=NO chroot_list_enable=YES
[root@zxy_master vsftpd]# vim vsftpd.conf
# 2.重启服务
[root@zxy_master vsftpd]# systemctl restart vsftpd.service
# 3.测试用户t1,被限制在主目录
[root@zxy_master vsftpd]# lftp t1@localhost
Password:
lftp t1@localhost:~> ls
-rw-rw-r-- 1 1002 1002 0 Nov 10 05:29 a.txt
drwxrwxr-x 2 1002 1002 4096 Nov 10 01:19 zxy
lftp t1@localhost:/> cd /opt
cd: Access failed: 550 Failed to change directory. (/opt)
lftp t1@localhost:/> exit
# 4.测试用户t2,不被限制在主目录
[root@zxy_master vsftpd]# lftp t2@localhost
Password:
lftp t2@localhost:~> ls
-rw-rw-r-- 1 1002 1002 0 Nov 10 05:29 a.txt
drwxrwxr-x 2 1002 1002 4096 Nov 10 01:19 zxy
lftp t2@localhost:~> cd /opt/
lftp t2@localhost:/opt> exit
chroot_local_user=NO
chroot_list_enable=NO
# 1.将两个配置项都改为YES,chroot_local_user=NO chroot_list_enable=NO
[root@zxy_master vsftpd]# vim vsftpd.conf
# 2.重启服务
[root@zxy_master vsftpd]# systemctl restart vsftpd.service
# 3.测试用户t1,不被限制在主目录
[root@zxy_master vsftpd]# lftp t1@localhost
Password:
lftp t1@localhost:~> ls
-rw-rw-r-- 1 1002 1002 0 Nov 10 05:29 a.txt
drwxrwxr-x 2 1002 1002 4096 Nov 10 01:19 zxy
lftp t1@localhost:~> cd /opt/
lftp t1@localhost:/opt> exit
# 4.测试用户t2,不被限制在主目录
[root@zxy_master vsftpd]# lftp t2@localhost
Password:
lftp t2@localhost:~> ls
-rw-rw-r-- 1 1002 1002 0 Nov 10 05:29 a.txt
drwxrwxr-x 2 1002 1002 4096 Nov 10 01:19 zxy
lftp t2@localhost:~> cd /opt/
lftp t2@localhost:/opt> exit
用户t1存在于chroot_list文件
用户t2不存在文件
四次测试结果,可得出如下表格:
当chroot_local_user=YES,chroot_list_enable=YES时,chroot_list文件中用户不受限制
当chroot_local_user=YES,chroot_list_enable=NO时,均受限制
当chroot_local_user=NO,chroot_list_enable=YES时,chroot_list文件中用户受到限制
当chroot_local_user=NO,chroot_list_enable=NO时,所有用户不受限制
chroot_local_user=YES | chroot_local_user=NO | |
---|---|---|
chroot_list_enable=YES | t2 | t1 |
chroot_list_enable=NO | t1,t2 |
如果当前FTP服务器需要指定受限制名单,那么修改配置为chroot_local_user=NO,chroot_list_enable=YES
如果当前FTP服务器需要指定不受限制名单,那么修改配置为chroot_local_user=YES,chroot_list_enable=YES