Linux : ftp服务及配置详解
FTP 基本概念
- 定义:文件传输协议(File Transfer Protocol),采用 C/S 模式工作。
- 端口:
- 控制端口:
21
- 数据端口:
20
- 控制端口:
FTP 工作原理
模式 | 工作流程 | 连接发起方 |
---|---|---|
主动模式 (Standard) | 1. 客户端从随机高端口 N 发送 PORT 命令到服务端 21 端口 2. PORT 命令包含客户端数据端口 N+1 3. 服务端用 20 端口连接客户端的 N+1 端口,如果传输数据则需要重新与客户端建立新的连接传输数据 | 服务端 → 客户端 |
被动模式 (Passive) | 1. 客户端发送 PASV 命令到服务端 21 端口 2. 服务端随机开启高端口 P ,并通过 PORT 命令告知客户端 3. 客户端用 N+1 端口连接服务端的 P 端口,被动模式不需要重新与服务器建立新连接 | 客户端 → 服务端 |
不同点:
传输数据的连接方式不同:主动模式是服务端向客户端发起数据连接,
而被动模式是客户端向服务端发起数据连接。
相同点:
都是使用21号控制端口进行用户验证和管理。
FTP服务部署
关闭防火墙和selinux
1.安装vsftpd软件包
yum install vsftpd -y
rpm -q vsftpd
vsftpd-3.0.2-25.el7.x86_64 #查看是否安装
2.vsftpd的主配置文件
vim /etc/vsftpd/vsftpd.confanonymous_enable=YES #是否允许匿名用户登录
local_enable=YES #允许本地用户登录ftp
write_enable=YES #ftp用户是否有写入权限
local_umask=022 #创建文件的umask值
anon_upload_enable=YES #是否允许匿名用户上传文件
anon_mkdir_write_enable=YES #是否允许匿名用户创建目录
anon_other_write_enable=YES #是否允许匿名用户能够删除或者重命名文件,目录
xferlog_enable=YES #控制文件在传输过程中是否被日志记录
connect_from_port_20=YES #使用20端口传输
chown_uploads=YES #匿名用户上传文件的所有者为FTP
chown_username=whoever #whoever修改为ftp用户,匿名用户上传文件的所有者将变成该FTP用户。
xferlog_file=/var/log/xferlog #设置传输文件日志的位置
idle_session_timeout=600 #超过600s空闲自动断开连接
data_connection_timeout=120 #控制数据连接建立后120秒内无交互时,自动断开连接。
deny_email_enable=YES #禁止下载文件到邮箱
chroot_local_user=YES #ftp用户是否能够离开自己的家目录,yes表示禁止ftp用户离开自己的家目录
chroot_list_enable=YES #列表中的ftp用户能否离开家目录,通常与下条命令配合使用
chroot_list_file=/etc/vsftpd/chroot_list #ftp的用户列表如果想要单个ftp用户能够访问其他目录,其他所有ftp用户只能在自己的家目录,则开启上面三条命令,并且在ftp用户列表中写上能够访问其他目录的ftp用户,如果chroot_local_user=YES和chroot_list_enable=YES都是yes,则只有用户列表中的用户能够访问其他目录;如果chroot_local_user=YES,chroot_list_enable=NO,则所有用户都不能离开自己的家目录;
如果chroot_local_user=NO,chroot_list_enable=YES,则只有用户列表中的用户不允许访问其他目录,其他用户都能够访问其他目录
方法2:
[root@xieyuhui vsftpd]# ls
chroot_list ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
查看/etc/vsftpd/目录下的文件,ftpusers和user-list是ftp用户黑名单,默认禁止列表里的这些用户访问ftp,如果想要个别用户能够访问ftp,需要在user-list中写下这个用户,ftpusers中不写这个用户,然后在在vsftpd.conf配置文件中写入userlist_deny=NO,拒绝访问的优先级>允许访问的优先级,所以原来的用户依旧不能访问ftp,而新用户因为不在ftpusers里面,所以能够访问ftp服务
练习
在FTP服务器创建3个用户分别为ftpuser1 ,ftpuser2,ftpuser3,密码设置为redhat
在客户端安装lftp软件包
1.设置允许匿名用户访问FTP服务器(本次使用centos7版本,默认允许匿名用户访问ftp服务器,因此不做更改)
2.设置允许匿名用户访问FTP服务器时能够在/var/ftp/pub目录下进行文件上传
首先需要让/var/ftp/pub的其他用户有对此目录的写入权限,但如果直接给其他用户权限就太大了,我们可以直接设置ftp用户有对此目录的读写权限
setfacl -m u:ftp:rwx /var/ftp/pub/
修改配置文件
vim /etc/vsftpd/vsftpd.conf
write_enable=YES #写入权限
anon_upload_enable=YES #匿名用户上传文件的权限
重启服务
systemctl restart vsftpd
匿名用户成功上传文件
3,设置允许匿名用户访问FTP服务器时能够在/var/ftp/pub目录下创建目录
编辑vsftpd配置文件
vim /etc/vsftpd/vsftpd.confanon_mkdir_write_enable=YES #允许匿名用户创建目录
重启服务
成功创建目录(不能创建文件)
4.设置允许匿名用户访问FTP服务器时能够对/var/ftp/pub目录中的文件或目录进行重命名或删除操作
编辑vsftpd配置文件
vim /etc/vsftpd/vsftpd.confanon_other_write_enable=YES #允许匿名用户进行重命名或删除
重启服务
5.设置允许FTP用户访问FTP服务器(默认允许访问,因此不做配置)
6.设置FTP用户访问FTP服务器时,将部分FTP用户访问的目录限制在自己的主目录中,其他FTP用户仍然可以访问其他目录
将ftpuser1和ftpuser2限制,ftpuser3可以访问其他目录
方法1:
编辑ftp用户列表,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了
如果检查发现还有写权限,就会报该错误。
cd /etc/vsftpd/
vim chroot_listftpuser1ftpuser2 #一行一个用户
编辑vsftpd配置文件
vim vsftpd.confchroot_list_enable=YESchroot_list_file=/etc/vsftpd/chroot_listallow_writeable_chroot=YES #列表中的用户不允许访问其他目录
重启服务
方法2:
在ftpusers里面写上ftpuser1和ftpuser2,在user-list里面写上ftpuser3,然后在配置文件里面加上userlist_deny=NO