FTP
FTP文件传输协议
FTP(File Transfer Protocol)文件传输协议,基于C/S架构,支持文件的上传和下载功能
FTP使用2个端口,都是基于TCP进行传输连接,分别是20和21
20端口为数据传输端口,上传和下载文件使用此端口
21端口为命令传输端口,客户端和服务端之间的命令交互使用此端口
工作模式
主动模式:Client向Server的20端口发送数据连接请求,服务器主动连接,然后传输文件数据
被动模式:Client向Server发送请求,Server随机开放一个端口和Client连接传输文件
[root@dns named]# netstat -tunpla|grep -w 21
tcp6 0 0 :::21 :::* LISTEN 4946/vsftpd
tcp6 0 0 192.168.5.101:21 192.168.5.8:62972 ESTABLISHED 7208/vsftpd #命令传输端口
tcp6 0 0 192.168.5.101:18502 192.168.5.102:52025 TIME_WAIT - #数据传输端口
FTP支持三种认证模式:
➢ 匿名用户:任何人无需验证即可访问和使用ftp
➢ 本地用户:使用Linux系统本地用户认证来使用ftp
➢ 虚拟用户:通过创建虚拟用户来访问ftp,虚拟用户只用于ftp而不会登录Linux系统
wget工具下载文件
wget ftp://us er1:123 @192.168.5 .101 /1 .txt
本地模式
1.安装好ftp后启动服务
[root@web01 ~]
2.创建用户
useradd user1
3.设置用户不能登录
4.给用户设置密码
5.客户端登录
[root@localhost ~]
lftp 192.168.5.101:~> user user1
Password:
lftp user1@192.168.5.101:~> ls
lftp user1@192.168.5.101:~> pwd
ftp://user1@192.168.5.101/%2Fhome/user1
lftp user1@192.168.5.101:~>
6.上传,拉取文件
lftp 192.168.5.101:~> user user1
Password:
lftp user1@192.168.5.101:~> put /etc/passwd
2546 bytes transferred
lftp user1@192.168.5.101:~> exit
lftp user1@192.168.5.101:~> get passwd
2546 bytes transferred
匿名模式登录ftp
服务端修改配置文件参数
[root@dns ~]# cat /etc/vsftpd/vsftpd.conf |grep -v ^#
anonymous_enable=YES
客户端登录
[root@dns2 ~]# ftp 192.168.5.101
Connected to 192.168.5.101 (192.168.5.101).
220 (vsFTPd 3.0.3)
Name (192.168.5.101:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
# 客户端匿名登录之后的目录为/var/ftp/pub
[root@web01 user1]# cat /etc/passwd|grep ftp
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@web01 user1]# ls /var/ftp/
pub
匿名上传ftp
匿名上传拒绝
[root@localhost ~]# lftp 192.168.5.101
lftp 192.168.5.101:~> ls
drwxr-xr-x 2 0 0 6 Nov 16 2020 pub
lftp 192.168.5.101:/> put passwd
put: Access failed: 550 Permission denied. (passwd)
1.修改文件夹权限
不能将根目录权限改为777
[root@web01 ~]# chmod 777 /var/ftp/pub
2.修改配置文件
[root@web01 pub]# cat /etc/vsftpd/vsftpd.conf |grep -v ^#
anonymous_enable=YES
anon_upload_enable=YES
2.进入pub目录上传文件
lftp 192.168.5.101:/> cd pub
lftp 192.168.5.101:/pub> put passwd
2546 bytes transferred
lftp 192.168.5.101:/pub>
匿名删除文件
lftp 192.168.5.101:/pub> rm passwd
rm : Access failed: 550 Permission denied. (passwd)
lftp 192.168.5.101:/pub>
1.配置文件中添加行
anon_mkdir_write_enable=YES ---可以创建文件夹
anon_other_write_enable=YES ---可以删除文件
2.测试
lftp 192.168.5.101:/pub> mkdir test
mkdir ok, `test ' created
lftp 192.168.5.101:/pub> ls
-rw------- 1 14 50 2546 Nov 21 10:54 passwd
drwx------ 2 14 50 6 Nov 21 13:58 test
lftp 192.168.5.101:/pub> rm passwd
rm ok, `passwd' removed
lftp 192.168.5.101:/pub> rm -fr test /
rm ok, `test /' removed
lftp 192.168.5.101:/pub> ls
修改本地用户和匿名登录的位置
配置文件加入这段
cat /etc/vsftpd/vsftpd.conf |grep -v ^#
anon_root=/mnt
local_root=/mnt
修改目录的权限
[root@web01 ~]# chmod 777 /mnt/data/
下载ftp里面的文件
修改umask 值可以下载自己上传的文件
anon_umask=022
[root@localhost ~]
lftp 192.168.5.101:~> cd data/
lftp 192.168.5.101:/data> get passwd
2546 bytes transferred
lftp 192.168.5.101:/data>
本地用户参考匿名用户
仅允许user1登录
配置文件中加上
userlist_enable=YES
userlist_deny=NO
在文件中加入用户名
[root@dns vsftpd]# cat /etc/vsftpd/user_list
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
user1
不在ftpusers文件中 在user_list文件中才能登录
允许用户跳出和不能跳出根目录
添加配置文件
chroot_local_user=YES ###所有人都不能跳出根目录 FTP根目录
chroot_list_enable=YES ###如果需要指定用户可以跳出FTP根目录,则需要开启以下内容
chroot_list_file=/etc/vsftpd/chroot_list
[root@dns vsftpd]# cat chroot_list 仅允许user1可以跳出目录
user1
vsftp配置虚拟用户
[root@web01 ~]# cd /usr/share/doc/vsftpd/EXAMPLE/VIRTUAL_USERS
[root@node4 ~]# vim /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=vuser666
allow_writeable_chroot=YES #允许用户在其 chroot 目录中进行写操作
anon_upload_enable=YES #允许匿名用户上传文件
[root@node4 vsftpd]# vim /etc/vsftpd/logins.txt
zhangsan
redhat
lisi
redhat
[root@node4 vsftpd]# useradd -d /data/upload/ vuser666
[root@node4 ~]# chmod 755 /data/upload/
[root@node4 vsftpd]# db_load -T -t hash -f /etc/vsftpd/logins.txt /etc/vsftpd/user.db
[root@node4 ~]# vim /etc/pam.d/vsftpd
#
# %PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/user
account required pam_userdb.so db=/etc/vsftpd/user
[root@node4 ~]# lftp 192.168.6.4
lftp 192.168.6.4:~> user zhangsan
Password:
lftp zhangsan@192.168.6.4:~> cd redhat/
lftp zhangsan@192.168.6.4:/redhat> ls
-rw------- 1 1002 1002 1025 Jul 25 19:04 group.1
-rw-r--r-- 1 0 0 2689 Jul 25 18:31 passwd
lftp zhangsan@192.168.6.4:/redhat> put /etc/profile
2123 bytes transferred
lftp zhangsan@192.168.6.4:/redhat> exit
上传的文件在vuser666的家目录中
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程