FTP服务器
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,这时产生了数据连接。
使用被动模式就不需要服务端与客户端重新建立一个新的连接来传输数据。
不同点:
传输数据的连接方式不同:主动模式是服务端向客户端发起数据连接,
而被动模式是客户端向服务端发起数据连接。
相同点:
都是使用21号控制端口进行用户验证和管理。
FTP服务器的部署与配置
1、安装FTP服务所需的软件包
yum -y install vsftpd
主配置文件:/etc/vsftpd/vsftpd.conf
匿名用户的主目录:/var/ftp/
匿名用户的下载目录:/var/ftp/pu
2、主配置文件/etc/vsftpd/vsftpd.conf
Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=YES //控制匿名用户访问权限,YES表示允许匿名访问FTP服务器
Uncomment this to allow local users to log in.
When SELinux is enforcing check for SE bool ftp_home_dir
local_enable=YES —控制FTP用户是否可以访问FTP服务器,YES表示允许FTP用户访问FTP服务,
同时当selinux处于enforcing状态时,需要调整ftp_home_dir的bool值。
(但是从RHEL7上安装vsftpd3.0版本后,就是没有ftp_home_dir这个bool值了,
所以就不需要修改此bool值)
Uncomment this to enable any form of FTP write command.
write_enable=YES //-控制FTP用户对FTP服务器的可写权限,YES表示可写
Default umask for local users is 077. You may wish to change this to 022,
if your users expect that (022 is used by most other ftpd’s)
local_umask=022 ----FTP用户创建目录或文件时的umask值
When SELinux is enforcing check for SE bool allow_ftpd_anon_write, allow_ftpd_full_access
#anon_upload_enable=YES
-控制匿名用户上传文件的权限,YES表示允许匿名用户上传文件。
Uncomment this if you want the anonymous FTP user to be able to create
new directories.
#anon_mkdir_write_enable=YES —控制匿名用户创建目录的权限,YES表示允许匿名用户创建目录
#chroot_list_enable=YES —控制列表中的FTP用户能否离开自己的FTP主目录,
YES表示禁止列表中的FTP用户离开自己的FTP主目录。默认是允许
(default follows)
#chroot_list_file=/etc/vsftpd/chroot_list —FTP用户列表文件,每一行一个用户名
示例:匿名用户
1、设置允许匿名用户访问FTP服务器(centos7默认允许,不用做修改;centos8修改如下)
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES —启用匿名登录
2、设置允许匿名用户访问FTP服务器时能够在/var/ftp/pub目录下进行文件下载上传
下载
在服务器的/var/ftp/pub 创建123456
[root@ws ~]# cd /var/ftp/pub/
[root@ws pub]# ls
[root@ws pub]# touch 123
[root@ws pub]# ls
123
在客户端下载123
[root@ws2 yum.repos.d]# lftp 192.168.110.10
lftp 192.168.110.10:/pub> get 123
[root@ws2 yum.repos.d]# ls
123 server.repo
ls -ld /var/ftp/pub --查看/var/ftp/pub目录权限,发现其他用户对该目录没有写入权限
[root@ws pub]# ll -d /var/ftp/pub/
drwxr-xr-x. 2 root root 17 8月 14 20:44 /var/ftp/pub/
setfacl -m u:ftp:rwx /var/ftp/pub —设置ftp用户对/var/ftp/pub目录有读写权限
[root@ws ~]# setfacl -m u:ftp:rwx /var/ftp/pub/
vim /etc/vsftpd/vsftpd.conf
write_enable=YES
anon_upload_enable=YES
systemctl restart vsftpd
lftp 192.168.110.10:/pub> put 111
[root@ws pub]# ls
111 123
3、设置允许匿名用户访问FTP服务器时能够在/var/ftp/pub目录下创建目录
vim /etc/vsftpd/vsftpd.conf
write_enable=YES
anon_mkdir_write_enable=YES
systemctl restart vsftpd
lftp 192.168.110.10:/pub> mkdir test1
mkdir 成功, 建立 `test1'
lftp 192.168.110.10:/pub> touch 1
未知命令 `touch'.
lftp 192.168.110.10:/pub>
4、设置允许匿名用户访问FTP服务器时能够对/var/ftp/pub目录中的文件或
目录进行重命名或删除操作
vim /etc/vsftpd/vsftpd.conf
write_enable=YES
anon_other_write_enable=YES
systemctl restart vsftpd
lftp 192.168.110.10:/pub> ls
-rw------- 1 14 50 0 Aug 14 13:04 111
-rw-r--r-- 1 0 0 0 Aug 14 12:44 123
drwx------ 2 14 50 6 Aug 14 13:08 test1
lftp 192.168.110.10:/pub> mv 111 file1
重命名成功
lftp 192.168.110.10:/pub> ls
-rw-r--r-- 1 0 0 0 Aug 14 12:44 123
-rw------- 1 14 50 0 Aug 14 13:04 file1
drwx------ 2 14 50 6 Aug 14 13:08 test1
lftp 192.168.110.10:/pub> rm 123
rm 成功, 删除 `123'
lftp 192.168.110.10:/pub> ls
-rw------- 1 14 50 0 Aug 14 13:04 file1
drwx------ 2 14 50 6 Aug 14 13:08 test
注意:出了上面设置外,还需要ftp服务账户必须对/var/ftp/pub目录具有读写的权限,
而且ftpd_anon_write和ftpd_full_access的bool设置为on。
这两步在第2题中已经完成了,所以不需要操作了
示例:FTP用户
创建三个用户
[root@ws ~]# useradd ftpuser1
[root@ws ~]# useradd ftpuser2
[root@ws ~]# useradd ftpuser3
[root@ws ~]# echo 123456 | passwd --stdin ftpuser1
更改用户 ftpuser1 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@ws ~]# echo 123456 | passwd --stdin ftpuser2
更改用户 ftpuser2 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@ws ~]# echo 123456 | passwd --stdin ftpuser3
更改用户 ftpuser3 的密码 。
passwd:所有的身份验证令牌已经成功更新。
1、设置允许FTP用户访问FTP服务器
vim /etc/vsftpd/vsftpd.conf
local_enable=YES
write_enable=YES
lftp 192.168.110.10:~> user ftpuser1
口令:
lftp ftpuser1@192.168.110.10:~> ls
lftp ftpuser1@192.168.110.10:~>
lftp ftpuser1@192.168.110.10:~>
lftp ftpuser1@192.168.110.10:~> ls
lftp ftpuser1@192.168.110.10:~> ls
-rw-r--r-- 1 0 0 0 Aug 14 15:46 file9
离开了用户家目录
2、设置FTP用户访问FTP服务器时,将所有FTP用户访问的目录限制在自己的主目录中,
不允许FTP用户访问其他目录( FTP用户对自己的家目录不能有写入的权限)
同时FTP用户对自己家目录不能有写入权限,
否则会提示登录失败 500 OOPS:vsftpd:refusing to run with writable root
inside chroot()从2.3.5之后,vsftpd增强了安全检查,
如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!
如果检查发现还有写权限,就会报该错误
在vsftpd的配置文件中增加下列两项中的一项
lftp ftpuser1@192.168.110.10:/> ls
-rw-r--r-- 1 0 0 0 Aug 18 12:30 file3
lftp ftpuser1@192.168.110.10:/> cd ..
lftp ftpuser1@192.168.110.10:/> cd ..
lftp ftpuser1@192.168.110.10:/> cd ..
不能用户家目录 打开第一个
3.设置FTP用户访问FTP服务器时,将部分FTP用户访问的目录限制在自己的主目录中,其他FTP用户仍然可以访问其他目录。
如果限制ftpuser2和ftpuser3用户访问的目录限制在自己的家目录中,ftpuser1可以访问其他目录
客户端
lftp 192.168.110.10:~> user ftpuser1
口令:
lftp ftpuser1@192.168.110.10:~> ls
-rw-r--r-- 1 0 0 0 Aug 18 12:30 file3
lftp ftpuser1@192.168.110.10:~> ls
-rw-r--r-- 1 0 0 0 Aug 18 12:30 file3
lftp ftpuser1@192.168.110.10:~> cd /
cd 成功, 当前目录=/
lftp ftpuser1@192.168.110.10:/> ls
lrwxrwxrwx 1 0 0 7 Jul 23 03:42 bin -> usr/bin
dr-xr-xr-x 5 0 0 4096 Jul 23 03:58 boot
drwxr-xr-x 19 0 0 3280 Aug 18 12:12 dev
drwxr-xr-x 139 0 0 8192 Aug 18 12:28 etc
drwxr-xr-x 6 0 0 64 Aug 18 12:28 home
lrwxrwxrwx 1 0 0 7 Jul 23 03:42 lib -> usr/lib
lrwxrwxrwx 1 0 0 9 Jul 23 03:42 lib64 -> usr/lib64
drwxr-xr-x 2 0 0 6 Apr 11 2018 media
drwxrwxr-x 8 0 0 2048 Nov 25 2018 mnt
drwxr-xr-x 3 0 0 16 Jul 23 03:49 opt
dr-xr-xr-x 197 0 0 0 Aug 18 12:12 proc
dr-xr-x--- 14 0 0 4096 Aug 18 12:48 root
drwxr-xr-x 38 0 0 1200 Aug 18 12:14 run
lrwxrwxrwx 1 0 0 8 Jul 23 03:42 sbin -> usr/sbin
drwxr-xr-x 2 0 0 6 Apr 11 2018 srv
dr-xr-xr-x 13 0 0 0 Aug 18 12:12 sys
drwxrwxrwt 22 0 0 4096 Aug 18 12:29 tmp
drwxr-xr-x 13 0 0 155 Jul 23 03:42 usr
drwxr-xr-x 21 0 0 4096 Aug 18 12:14 var
lftp ftpuser1@192.168.110.10:/> user ftpuser2
口令:
lftp ftpuser2@192.168.110.10:~> ls
lftp ftpuser2@192.168.110.10:/> cd /
lftp ftpuser2@192.168.110.10:/> cd ..
说明写入进去的可以离开用户家目录 没有写进去不能离开
将文件恢复默认
两个配置文件中都是默认禁止访问ftp(/etc/vsftpd/ftpusers、/etc/vsftpd/user_list)
[root@ws2 ~]# lftp 192.168.110.10
lftp 192.168.110.10:~> user ftpuser1
口令:
lftp ftpuser1@192.168.110.10:~> ls
ls: 登录失败: 530 Login incorrect.
lftp ftpuser1@192.168.110.10:~>
不能访问ftpuser1
将/etc/vsftpd/user_list中的userlist_deny=NO加入配置文件中那么就是允许/etc/vsftpd/user_list中的用户访问ftp
[root@ws2 ~]# lftp 192.168.110.10
lftp 192.168.110.10:~> user ftpuser1
口令:
lftp ftpuser1@192.168.110.10:~> ls
-rw-r--r-- 1 0 0 0 Aug 18 12:30 file3
lftp ftpuser1@192.168.110.10:~> user ftpuser2
口令:
lftp ftpuser2@192.168.110.10:~> ls
ls: 登录失败: 530 Permission denied.
lftp ftpuser2@192.168.110.10:~> user ftpuser2
口令: