FTP服务

FTP服务

一:FTP的工作原理

1:FTP的概念

文件传输协议是用于在网络上进行文件传输的协议,用户需要将文件上传到服务器上,使用ftp的上传的操作,反之,用户可以使用ftp从服务器上面下载文件,采用的为c|s架构

2:FTP工作的2种模式

a:主动模式

2台虚拟机,一台作为客户机,另外一台作为服务器,客户机上面的n号端口去访问服务上面的21号端口,建立连接,并告诉20号端口要去连接客户机的n+1号端口,主动去连接了n+1号端口,建立了数据连接

b:被动模式

客户机n号端口去访问服务器上面的21号端口,并返回20号端口给客户机,客户机的n+1号端口去再去连接服务器的21号端口,这样就建立起了数据连接

3:登录ftp服务的三种用户

a:虚拟用户

虚拟用户是登录ftp服务最常见的用户,不需要输入账户和密码,就可以去登录到ftp服务,但是只能登录到ftp服务的根目录下,不能去访问其他的目录,而且默认只能下载文件,不能上传文件

b:本地用户

本地用户登录时,那个用户在服务器上面,并且需要输入账户和密码,可以访问到除了ftp根目录下以外的其他目录,可以上传文件和下载文件

c:虚拟用户

不需要账户和密码,只是一个虚拟的存在

二:FTP的配置文件

1:/var/ftp

这个目录是ftp的默认的根目录,并且,这个根目录默认情况下,不能写入,但是这个根目录下的子目录有写入的权限

2:/etc/vsftpd/vsftpd.conf

这个目录是ftp的主配置文件,以匿名用户或者本地用户登录时,都需要修改里面的参数才能登录(详情见后面的操作)

3:/etc/vsftpd/user_list

这个目录是本地用户登录的名单,要想要启动这个目录,需要修改ftp主配置文件里面的2个参数

local_userlist_enable=YES 和local_userlist_deny=NO 这2个参数

4:/etc/vsftpd/chroot_list

chroot这个功能就是来控制是否能够访问除了根目录下的其他目录

这个是例外的用户名单,与2个参数有关,chroot_list_enable 和chroot_local_user ,这2个参数不同的组合有不一样的效果

 

chroot_list_enable=YES

(启用例外名单)                                    

chroot_list_enable=NO

(不启用例外名单)

chroot_local_user=YES

(所有的用户都限制在了ftp的根目录下)

除了chroot_list中的用户能去访问其他的目录,其他的用户都不行  所有的用户都只能访问ftp的根目录,没有例外

chroot_local_user=NO

(所有用户都没有被限制在ftp的根目录下)

除了chroot_list中的用户不能去访问其他的目录之外,其他的用户都行

所有用户都可以访问其他的目录,没有例外 

 

 

 

 

 

 

 

5:/etc/vsftpd/ftpusers

本地用户登录的黑名单,让某个用户不能登录到ftp服务中去,就在这个名单中添加该用户

三:用户登录的方式

# 在登录之前先自己配置好网络(仅主机或者nat模式都行),yum源,挂载到/media下,应该都会配吧

1:匿名用户登录的方式

a:服务器的操作

# ftp服务的安装包为vsftpd软件,先安装vsftpd软件
[root@server /]# yum -y install vsftpd
#安装之后启动这个服务,设置为开机自动启动
[root@server /]# systemctl start vsftpd
[root@server /]# systemctl enable vsftpd
#并查看这个ftp服务的状态
[root@server /]# systemctl status vsftpd
#其中有running就代表着已经已经启动了
#创建一个ftp服务共享文件夹,并在里面输入一些测试的内容
[root@server /]# mkdir /ftp-share
[root@server ftp-share]# echo 123456 >> test.txt

#修改主配置文件的参数
[root@server vsftpd]# vim vsftpd.conf 
#在末尾加入这个数据,指定匿名用户登录的根目录
anon_root=/ftp-share
#保存并退出
:x
#重启vsftpd服务
[root@server vsftpd]# systemctl restart vsftpd
#关闭防火墙和临时关闭selinux
[root@server vsftpd]# systemctl stop firewalld
[root@server vsftpd]# setenforce 0
[root@server vsftpd]# getenforce 
Permissive

b:客户端的操作

#使用 lftp登陆ftp服务
[root@client mnt]# lftp 192.168.10.100
lftp 192.168.10.100:~> ls
-rw-r--r--    1 0        0               7 Sep 30 01:47 test.txt
# get 为下载文件,mirror 为下载文件夹,下载的地址为你在什么路径下使用的lftp命令
lftp 192.168.10.100:/> get test.txt 
7 bytes transferred
lftp 192.168.10.100:/> quit
[root@client mnt]# ls
test.txt

# 默认情况下,只能下载,不能上传

所以,还需要进行上传等操作,对服务器进行修改配置文件

c:服务器开放上传等功能

[root@server vsftpd]# vim vsftpd.conf 
#开放具有上传文件的权限
anon_upload_enable=YES
#开放具有创建文件夹的权限
anon_mkdir_write_enable=YES
#允许进行删除和重命名等操作
anon_other_write_enable=YES
#重启服务
[root@server vsftpd]# systemctl restart vsftpd

需要注意的就是,ftp服务的根目录,不具备写的权限,但是它的子目录具备写的权限,所以,一般上传文件到一个目录里面去,方便管理

[root@server ftp-share]# mkdir upload
[root@server ftp-share]# ls
test.txt  upload
[root@server ftp-share]# ll 
总用量 4
-rw-r--r--. 1 root root 7 9月  30 09:47 test.txt
drwxr-xr-x. 2 root root 6 10月  3 10:28 upload
#直接修改upload文件夹的主人为ftp,因为匿名用户登录时,是以ftp用户访问的
[root@server ftp-share]# chown ftp upload/
[root@server ftp-share]# ll
总用量 4
-rw-r--r--. 1 root root 7 9月  30 09:47 test.txt
drwxr-xr-x. 2 ftp  root 6 10月  3 10:28 upload
[root@server ftp-share]# 

d:客户端测试

#先准备一个要上传的文件
[root@client mnt]# ls
11.txt  test.txt
[root@client mnt]# lftp 192.168.10.100
lftp 192.168.10.100:~> ls
-rw-r--r--    1 0        0               7 Sep 30 01:47 test.txt
drwxr-xr-x    2 14       0               6 Oct 03 02:28 upload
lftp 192.168.10.100:/> cd upload/
# put 上传文件
lftp 192.168.10.100:/upload> put 11.txt 
lftp 192.168.10.100:/upload> ls
-rw-------    1 14       50              0 Oct 03 02:32 11.txt
lftp 192.168.10.100:/upload> rm -rf 11.txt 
rm 成功, 删除 `11.txt'
lftp 192.168.10.100:/upload> ls
lftp 192.168.10.100:/upload> mkdir qq
mkdir 成功, 建立 `qq'
lftp 192.168.10.100:/upload> ls
drwx------    2 14       50              6 Oct 03 02:32 qq
lftp 192.168.10.100:/upload> 

# 也可以用自己的windows来访问
ftp://服务器的ip地址

e:总结

通过上述的操作,实现了匿名用户登录ftp服务,能够进行上传和下载等操作,开放上传这个文件的功能主要与2个相关,一个就是ftp服务的权限,另外一个就是文件夹的权限有关

2:本地用户登录的方式

a:服务器操作

1)就是先创建2个用户

[root@server /]# useradd user1
[root@server /]# useradd user2
[root@server /]# passwd user1
更改用户 user1 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@server /]# passwd user2
更改用户 user2 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@server /]# 

2)创建chroot_list文件(在/etc/vsftpd下,默认情况下,是没有该文件的)和添加名单

[root@server vsftpd]# vim chroot_list
user1
user2
~      
# 将这些用户添加到user_list 这个名单中去
[root@server vsftpd]# vim user_list 
user1
user2

3)修改主配置文件

#指定本地用户登录的根目录
local_root=/ftp-share
userlist_deny=NO
#下面2个参数,就是chroot_list名单中的用户只能访问ftp的根目录
chroot_local_user=NO  
chroot_list_enable=YES
#具备有写的权限,因为启用了chroot功能,不写,会报错
allow_writeable_chroot=YES

#重启服务
[root@server vsftpd]# systemctl restart vsftpd

#修改文件夹的权限
[root@server ftp-share]# ll -d
drwxr-xr-x. 2 root root 22 10月  3 10:53 .
#因为以本地用户登录的话,是其他用户,所以添加写的权限
[root@server ftp-share]# chmod o+w /ftp-share/
[root@server ftp-share]# ll -d
drwxr-xrwx. 2 root root 22 10月  3 10:53 .
[root@server ftp-share]# 

b:客户端操作

#使用ftp命令登录
[root@client opt]# ls
33.txt
[root@client opt]# ftp 192.168.10.100
Connected to 192.168.10.100 (192.168.10.100).
220 (vsFTPd 3.0.2)
#输入用户和密码
Name (192.168.10.100:root): user1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,10,100,71,212).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               7 Sep 30 01:47 test.txt
226 Directory send OK.
#上传文件 put ftp> put 33.txt local: 33.txt remote: 33.txt 227 Entering Passive Mode (192,168,10,100,78,114). 150 Ok to send data. 226 Transfer complete. ftp> ls 227 Entering Passive Mode (192,168,10,100,149,183). 150 Here comes the directory listing. -rw-r--r-- 1 1001 1001 0 Oct 03 02:57 33.txt -rw-r--r-- 1 0 0 7 Sep 30 01:47 test.txt 226 Directory send OK.
#下载文件 get ftp> get test.txt local: test.txt remote: test.txt 227 Entering Passive Mode (192,168,10,100,181,39). 150 Opening BINARY mode data connection for test.txt (7 bytes). 226 Transfer complete. 7 bytes received in 2e-05 secs (350.00 Kbytes/sec) ftp> ls 227 Entering Passive Mode (192,168,10,100,34,215). 150 Here comes the directory listing. -rw-r--r-- 1 1001 1001 0 Oct 03 02:57 33.txt -rw-r--r-- 1 0 0 7 Sep 30 01:47 test.txt 226 Directory send OK. #删除文件用delete命令 ftp> delete 33.txt 250 Delete operation successful. ftp> ls 227 Entering Passive Mode (192,168,10,100,84,59). 150 Here comes the directory listing. -rw-r--r-- 1 0 0 7 Sep 30 01:47 test.txt 226 Directory send OK. ftp>

c:总结

本地用户登录的话,默认是具有下载和上传的权限,上传的权限有ftp的服务的权限和文件夹的权限来控制,本地用户登录算是其他用户登录,所以要添加写的权限,

注意的就是,ftp的根目录不能具有写的权限,会出错,所以,一般是在ftp的根目录下创建一个上传的文件夹,并给起赋予权限

 

selinux的总结

就是ftp默认是不允许在根目录下具有写的权限,但是我设置了selinux的默认值后,就能允许在根目录下下,有写的操作,还要有文件的写的操作

除了连接的布尔值外,还有一个读写的布尔值

 

posted @ 2023-09-29 14:47  q_7  阅读(53)  评论(0编辑  收藏  举报