FTP

FTP介绍

文件传输协议(File Transfer Protocol 简称FTP),采用c/s模式工作
控制端口:21
数据端口:20 //可变

FTP工作原理

1、主动模式 standard

FTP客户端从任意一个非特权端口N(N>1024)发送PORT命令给FTP服务端控制端口21,
其中PORT命令包含客户端接收数据的端口N+1,此时服务器收到了这条PORT命令,
它就会让自己的数据端口20与客户端的数据端口N+1连接。此时如果传输数据的话,
就需要服务端与客户端重新建立一个新的连接来传输数据。

2、被动模式 passive

FTP客户端从任意一个非特权端口N(N>1024)发送PASV命令给FTP服务端控制端口21,
其中PASV命令包含客户端接收数据的端口N+1,此时服务端会随机开启一个
高端端口P(P>1024),并发送PORT命令给客户端,PORT命令包括服务端的数据端口P,
然后客户端从数据端口N+1发起一个请求连接服务端数据端口P,这时产生了数据连接。
使用被动模式就不需要服务端与客户端重新建立一个新的连接来传输数据。

3、相同与不同

不同点:
传输数据的连接方式不同:主动模式是服务端向客户端发起数据连接,
而被动模式是客户端向服务端发起数据连接。

相同点:
都是使用21号控制端口进行用户验证和管理。

配置TFP

1、 TFP下载安装

修改主机名
[root@rocklinux1 ~]# hostnamectl hostname client.example.com -----> 服务器
[root@rocklinux2 ~]# hostnamectl hostname server.example.com -----> 客服机

//下载安装软件包
[root@server ~]# yum -y install vsftp

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

//匿名用户上传下载的位置
[root@server ~]# cd /var/ftp/pub/
[root@server pub]# pwd
/var/ftp/pub

//本地用户上传下载位置
[root@server ~]# ls /home/
student

//创建目录文件
[root@server pub]# touch file1
[root@server pub]# mkdir dir1

2、 TFP配置文件解析

//vsftpd的配置文件
[root@server ~]# vim /etc/vsftpd/vsftpd.conf 
anonymous_enable=YES  //控制匿名用户访问权限,YES表示允许匿名访问FTP服务器
local_enable=YES	//控制FTP用户是否可以访问FTP服务器,YES表示允许FTP用户访问FTP服务,同时当selinux处于enforcing状态时,需要调整ftp_home_dir的bool值。(但是从RHEL7上安装vsftpd3.0版本后,就是没有ftp_home_dir这个bool值了,
所以就不需要修改此bool值)
write_enable=YES     //控制FTP用户对FTP服务器的可写权限,YES表示可写 
local_umask=022    //FTP用户创建目录或文件时的umask值
anon_upload_enable=YES     //控制匿名用户上传文件的权限,YES表示允许匿名用户上传文件。  当selinux处于enforcing状态时,需要调整ftpd_anon_write和ftpd_full_access的bool值。
anon_mkdir_write_enable=YES   //控制匿名用户创建目录的权限,YES表示允许匿名用户创建目录

(1)chroot_local_user=YES        //控制FTP用户能否离开自己的FTP主目录,YES表示禁止FTP用户离开自己的FTP主目录(用户的家目录)
(2)chroot_list_enable=YES        //控制列表中的FTP用户能否离开自己的FTP主目录,YES表示禁止列表中的FTP用户离开自己的FTP主目录。默认是允许
(3)chroot_list_file=/etc/vsftpd/chroot_list  //FTP用户列表文件,每一行一个用户名(此文件只能写用户)
注意:23是一个组合同开同关,当23开启时3中的文件写入的用户不能离开,当123同时开启只能3中文件写入的用户离开

3、 匿名用户操作

1、设置允许匿名用户访问FTP服务器
[root@server ~]# vim /etc/vsftpd/vsftpd.conf 
anonymous_enable=YES
[root@server ~]# systemctl restart vsftpd
验证:
[root@client ~]# lftp 192.168.100.10
lftp 192.168.100.10:~> ls
drwxrwxr-x    4 0        0              56 Jul 28 23:19 pub
lftp 192.168.100.10:/> 


2、设置允许匿名用户访问FTP服务器时能够在/var/ftp/pub目录下进行文件上传
[root@server ~]# vim /etc/vsftpd/vsftpd.conf 
anonymous_enable=YES
anon_upload_enable=YES
[root@server pub]# setfacl -m u:ftp:rwx /var/ftp/pub
[root@server ~]# systemctl restart vsftpd
验证:
lftp 192.168.100.10:/pub> put file2
lftp 192.168.100.10:/pub> ls
drwxr-xr-x    2 0        0               6 Jul 26 02:26 dir1
-rw-r--r--    1 0        0               0 Jul 26 02:26 file1
-rw-------    1 14       50              0 Jul 28 23:14 file2

3、设置允许匿名用户访问FTP服务器时能够在/var/ftp/pub目录下创建目录
[root@server ~]# vim /etc/vsftpd/vsftpd.conf 
anonymous_enable=YES
anon_mkdir_write_enable=YES
[root@server pub]# !sys
systemctl enable vsftpd
验证:
lftp 192.168.100.10:/pub> mkdir dir2
mkdir ok, `dir2' created
lftp 192.168.100.10:/pub> ls
drwxr-xr-x    2 0        0               6 Jul 26 02:26 dir1
drwx------    2 14       50              6 Jul 28 23:19 dir2
-rw-r--r--    1 0        0               0 Jul 26 02:26 file1
-rw-------    1 14       50              0 Jul 28 23:14 file2


4、设置允许匿名用户访问FTP服务器时能够对/var/ftp/pub目录中的文件或目录进行重命名或删除操作
[root@server pub]# vim /etc/vsftpd/vsftpd.conf 
anon_other_write_enable=YES  //写入权限打开之后需要添加
[root@server pub]# !sys
systemctl restart vsftpd
验证:
lftp 192.168.100.10:/pub> ls
drwxr-xr-x    2 0        0               6 Jul 26 02:26 dir1
drwx------    2 14       50              6 Jul 28 23:19 dir2
-rw-r--r--    1 0        0               0 Jul 26 02:26 file1
-rw-------    1 14       50              0 Jul 28 23:14 file2
lftp 192.168.100.10:/pub> rm -rf dir2
rm ok, `dir2' removed
lftp 192.168.100.10:/pub> ls
drwxr-xr-x    2 0        0               6 Jul 26 02:26 dir1
-rw-r--r--    1 0        0               0 Jul 26 02:26 file1
-rw-------    1 14       50              0 Jul 28 23:14 file2
lftp 192.168.100.10:/pub> 

4、FTP用户操作

//创建用户设置密码
[root@server ~]# useradd user1
[root@server ~]# useradd user2
[root@server ~]# useradd user3
[root@server ~]# for i in user{1..3}
> do echo redhat | passwd  --stdin $i
> done
//进入目录创建文件
[root@server ~]# cd /home/user1/
[root@server user1]# touch file1
//进入方式:
第一种:
[root@client ~]# lftp user1@192.168.100.10
Password: 
lftp user1@192.168.100.10:~> 
第二种:
lftp 192.168.100.10:~> user user1
Password: 
lftp user1@192.168.100.10:~> 
1、设置FTP用户访问FTP服务器时,将所有FTP用户访问的目录限制在自己的主目录中,不允许FTP用户访问其他目录( FTP用户对自己的家目录不能有写入的权限)
[root@server user1]# vim /etc/vsftpd/vsftpd.conf 
chroot_local_user=YES
[root@server user1]# systemctl restart vsftpd
[root@client ~]# lftp 192.168.100.10
lftp 192.168.100.10:~> user user1
Password: 
lftp user1@192.168.100.10:~> ls
ls: Login failed: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()          
lftp user1@192.168.100.10:~> 
无法查看解决方式:
第一种:(不可取)
[root@server home]# chmod u-w user1
[root@server home]# ll
total 0
drwx------. 2 student student 62 Jul 11 13:59 student
dr-x------  2 user1   user1   75 Jul 29 07:34 user1
drwx------  2 user2   user2   62 Jul 29 07:29 user2
drwx------  2 user3   user3   62 Jul 29 07:29 user3
第二种:在vsftpd的配置文件中增加下列两项中的一项
allow_writeable_chroot=YES
setsebool -P ftpd_full_access on
[root@server home]# systemctl restart vsftpd
验证:
lftp user1@192.168.100.10:~> ls
-rw-r--r--    1 0        0               0 Jul 28 23:34 file1

2、设置FTP用户访问FTP服务器时,将部分FTP用户访问的目录限制在自己的主目录中
其他FTP用户仍然可以访问其他目录。如果限制user1和user2用户访问的目录限制在自己的家目录中
user3可以访问其他目录
[root@server home]# vim /etc/vsftpd/vsftpd.conf 
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
[root@server home]# vim /etc/vsftpd/chroot_list
user1
user2
[root@server home]# systemctl restart vsftpd
验证:
lftp user1@192.168.100.10:~> cd ..
cd ok, cwd=/..                     
lftp user1@192.168.100.10:/..> user user2
Password: 
lftp user2@192.168.100.10:~> cd ..
cd ok, cwd=/..                     
lftp user2@192.168.100.10:/..> user user3
Password: 
lftp user3@192.168.100.10:~> cd ..
cd ok, cwd=/home/user3/..          
lftp user3@192.168.100.10:~/..> 
lftp user3@192.168.100.10:~/..> ls
drwx------    2 1000     1000           62 Jul 11 05:59 student
drwx------    2 1001     1001           75 Jul 28 23:34 user1
drwx------    2 1002     1002           62 Jul 28 23:29 user2
drwx------    2 1003     1003           62 Jul 28 23:29 user3

3、设置FTP用户访问FTP服务器时,只能user3离开家目录,其他用户不可以离开家目录
[root@server home]# vim /etc/vsftpd/vsftpd.conf
chroot_local_user=YES
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
[root@server home]# vim /etc/vsftpd/chroot_list
user3
[root@server home]# systemctl restart vsftpd
验证:
[root@client ~]# lftp user1@192.168.100.10
Password: 
lftp user1@192.168.100.10:~> cd ..                 
cd ok, cwd=/..                     
lftp user1@192.168.100.10:/..> ls
-rw-r--r--    1 0        0               0 Jul 28 23:34 file1
lftp user1@192.168.100.10:/..> user user3
Password: 
lftp user3@192.168.100.10:~> cd ..
cd ok, cwd=/home/user3/..          
lftp user3@192.168.100.10:~/..> ls
drwx------    2 1000     1000           62 Jul 11 05:59 student
drwx------    2 1001     1001           75 Jul 28 23:34 user1
drwx------    2 1002     1002           62 Jul 28 23:29 user2
drwx------    2 1003     1003           62 Jul 28 23:29 user3
lftp user3@192.168.100.10:~/..> 


5、FTP默认禁止文件

vsftp用户列表(黑名单用户)    --->  ftpusers 
vsftp用户列表(用户功能配置)   ---> user_list
[root@server home]# cd /etc/vsftpd/
[root@server vsftpd]# ls
chroot_list  ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh
如果允许user_list中的用户访问需要在配置文件(vsftpd.conf )中添加:userlist_deny=YES
  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值