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的默认值后,就能允许在根目录下下,有写的操作,还要有文件的写的操作
除了连接的布尔值外,还有一个读写的布尔值