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用户列表文件,每一行一个用户名(此文件只能写用户)
注意:2和3是一个组合同开同关,当2和3开启时3中的文件写入的用户不能离开,当1、2、3同时开启只能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