FTP文件传输
端口号:21
FTP连接方式:两个阶段--》管理连接,数据连接
管理链接:客户端使用随机端口>(1024,高位端口)----->服务器21端口
数据连接:
主动模式:服务器(20端口)向客户端(随机)发起连接(服务器连接客户端)
客户端的防火墙会拦截服务器发起的连接
被动模式:服务器(随机端口)等待客户端(随机端口)向自己发起连接(客户端连接服务器)
服务器需要处理防火墙(关闭,添加策略)
匿名用户:ftp
授权用户:账号,密码
ftp服务:服务器端(vsftpd)客户端(ftp)
文件:666
目录:777
vim /etc/vsftpd/user_list
vim /etc/vsftpd/ftpusers
FTP实现配置
服务器端:IP 192.168.10.101
systemctl stop firewalld(关闭防火墙)
setenforce 0 关闭内核
yum -y install vsftpd(下载文件)
cat /etc/vsftpd/vsftpd.conf(查看一下主配置文件)
set -i ‘/^#/d’ /etc/vsftpd/vsftpd.conf (删除所有注释掉的配置文件)
vim /etc/vsftpd/vsftpd.conf(编辑主配置文件)
给匿名用户添加相关文件如下:
- anon umask=022:设置匿名用户的umask值。umask决定了新创建文件和目录的默认权限。在这个例子中,umask被设置为022,这意味着新创建的文件对于文件所有者是可读可写的(644权限),而新创建的目录对于文件所有者是可读可写可执行的(755权限)。
- anon upload enable=yes:允许匿名用户上传文件到FTP服务器。
- anon mkdir write enable=yes:允许匿名用户在FTP服务器上创建新目录(mkdir表示“make directory”)。
- anon other write enable=yes:允许匿名用户修改除他们自己的文件和目录之外的其他文件和目录。这是一个相对危险的设置,因为它允许匿名用户影响其他用户或系统级别的文件和目录。
- anon root=/opt/ftp:指定匿名用户的根目录为/opt/ftp。这意味着当匿名用户登录到FTP服务器时,他们将只看到/opt/ftp目录下的文件和目录,而不是整个文件系统的内容
systemctl start vsftpd (开启)
客户端:IP 192.168.10.102
systemctl stop firewalld(关闭防火墙)
setenforce 0(关闭内核)
yum -y install ftp(下载该服务)
ftp 192.168.10.101(连接)
匿名登录ftp 密码直接回车如下
二:匿名访问FTP服务
1:准备匿名FTP访问目录
[root@localhost ~]# touch /var/ftp/test
[root@localhost ~]# chown ftp /var/ftp/pub
[root@localhost ~]# chmod 755 /var/ftp/pub
[root@localhost ~]# ls -ld /var/ftp/pub
drwxr-xr-x. 2 ftp root 6 11月 6 2016 /var/ftp/pub
2:开放匿名用户
添加如下红色内容:
anonymous_enable=YES
anon_umask=022
anon_upload_enable=yes
anon_mkdir_write_enable=yes
anon_other_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=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
备注:
anonymous_enable=YES #是否启用匿名用户
no_anon_password=YES #匿名用户login时不询问口令
anon_upload_enable=(yes/no); #控制匿名用户对文件(非目录)上传权限
anon_world_readable_only=(yes/no); #控制匿名用户对文件的下载权限
anon_mkdir_write_enable=(yes/no); #控制匿名用户对文件夹的创建权限
anon_other_write_enable=(yes/no); #控制匿名用户对文件和文件夹的删除和重命名
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# netstat -anpt | grep vsftpd
tcp6 0 0 :::21 :::* LISTEN 16710/vsftpd
3:测试匿名FTP服务器
(1)测试访问
[root@localhost ~]# ftp 192.168.10.101
Connected to 192.168.10.101 (192.168.10.101).
220 (vsFTPd 3.0.2)
Name (192.168.10.101:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> dir
227 Entering Passive Mode (192,168,10,101,221,180).
150 Here comes the directory listing.
drwxr-xr-x 2 14 0 6 Nov 05 2016 pub
-rw-r--r-- 1 0 0 0 May 20 02:14 test
-rw-r--r-- 1 0 0 0 May 20 02:14 text
226 Directory send OK.
ftp> lcd /opt
Local directory now /opt
ftp> get test
local: test remote: test
227 Entering Passive Mode (192,168,10,101,141,88).
150 Opening BINARY mode data connection for test (0 bytes).
226 Transfer complete.
ftp> lcd /root
Local directory now /root
ftp> cd pub
250 Directory successfully changed.
ftp> put initial-setup-ks.cfg
local: initial-setup-ks.cfg remote: initial-setup-ks.cfg
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
1638 bytes sent in 0.00327 secs (501.22 Kbytes/sec)
ftp> quit
221 Goodbye.
(2)wget测试
[root@localhost ~]# wget ftp://192.168.10.101/pub/111
--2021-11-16 09:50:15-- ftp://192.168.10.101/pub/111
=> “111”
正在连接 192.168.10.101:21... 已连接。
正在以 anonymous 登录 ... 登录成功!
==> SYST ... 完成。 ==> PWD ... 完成。
==> TYPE I ... 完成。 ==> CWD (1) /pub ... 完成。
==> SIZE 111 ... 完成。
==> PASV ... 完成。 ==> RETR 111 ... 完成。
[ ] 0 --.-K/s 用时 0s
2021-11-16 09:50:15 (0.00 B/s) - “111” 已保存 [0]
4:用户验证的FTP服务
(1)本地用户验证配置
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
anon_umask=022
#anon_upload_enable=yes
#anon_mkdir_write_enable=yes
#anon_other_write_enable=yes
local_enable=YES
write_enable=YES
local_umask=022
chroot_local_user=yes
allow_writeable_chroot=yes
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# useradd zhangsan
[root@localhost ~]# passwd zhangsan
(2)客户端测试
[root@localhost ~]# touch aaa
[root@localhost ~]# ftp 192.168.10.101
Connected to 192.168.10.101 (192.168.10.101).
220 (vsFTPd 3.0.2)
Name (192.168.10.101:root): zhangsan
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> put aaa
local: aaa remote: aaa
227 Entering Passive Mode (192,168,10,101,114,218).
150 Ok to send data.
226 Transfer complete.
ftp> quit
221 Goodbye.
(3)开启root访问权限
默认root等内置的账户不许访问FTP服务
[root@localhost ~]# vi /etc/vsftpd/user_list
在root账号前价格注释符
#root
[root@localhost ~]# vi /etc/vsftpd/ftpusers
在root账号前价格注释符
#root
客户端用root账号登录测试
(4)使用user_list用户列表
[root@localhost ~]# vi /etc/vsftpd/user_list
添加几个账号
zhangsan
lisi
wangwu
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
anon_umask=022
#anon_upload_enable=yes
#anon_mkdir_write_enable=yes
#anon_other_write_enable=yes
local_enable=YES
write_enable=YES
local_umask=022
chroot_local_user=yes
allow_writeable_chroot=yes
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=no
tcp_wrappers=YES
[root@localhost ~]# systemctl restart vsftpd
在客户端用列表中的账号登录(登录成功)
用列表中不存在的账号登录(无法登录)
5:其他配置
(1)修改监听地址与端口
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
listen=YES
listen_address=192.168.10.101 \\添加监听地址
listen_port=2121 \\添加监听端口
listen_ipv6=no
[root@localhost ~]# systemctl restart vsftpd
(2)客户端测试
[root@localhost ~]# ftp 192.168.10.101 2121
(3)使用ftp的被动模式
pasv_enable=yes
pasv_min_port=24500
pasv_max_port=24600
[root@localhost ~]# systemctl restart vsftpd
注意:
ftp默认使用被动模式
如果用被动模式,是客户端向服务器发起数据连接,要保证服务器的防火墙是关闭的
如果用主动模式,是服务器向客户端发起数据连接,要保证客户端的防火墙是关闭的
扩展:
1:修改匿名用户的目录
注意:默认的ftp匿名用户的目录在/var/ftp下
[root@localhost ~]# mkdir -p /opt/ftp/myftp
[root@localhost ~]# chown ftp /opt/ftp/myftp
注释:在新版本(2.3.5的版本后)的ftp服务中,ftp的根目录不能有写的权限,对于匿名用户来说,需要在ftp根目录下创建一个文件夹,给这个文件夹写的权限即可
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
添加以下字段:
anon_root=/opt/ftp
2:修改系统用户的ftp根目录
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
添加以下字段:
#anon_root=/opt/ftp
local_root=/opt/ftp
注释:在新版本(2.3.5的版本后)的ftp服务中,ftp的根目录不能有写的权限,对于系统用户来说,可以让系统用户对ftp根目录有写权限
[root@localhost ~]# chmod a+w /opt/ftp
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
添加以下字段:
local_root=/opt/ftp
chroot_local_user=yes