FTP配置部署与权限控制
一、概念
- 文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层, 使用 TCP 传输而不是 UDP
- 用于在本地主机和远程主机之间传送文件, 即使双方计算机可能配有不同的操作系统和文件存储方式。
- 基本信息:
- 软件安装包 vaftpd
- 默认目录 /var/ftp
- 配置文件 /etc/vsftpd/vsftpd.conf
二、服务器部署
1、安装启动
[root@node1 ~]# yum -y install vsftpd # 安装vsftpd包
[root@node1 ~]# systemctl start vsftpd # 启动服务
[root@node1 ~]# systemctl enable vsftpd # 开启自启动
[root@node1 ~]# vim /etc/sysconfig/selinux # 关闭selinux
SELINUX=disabled
[root@node1 ~]# setenforce 0 # 临时设置,即时生效
[root@node1 ~]# firewall-cmd --permanent --add-service=ftp # 防火墙放行
success
# 核心文件
[root@node1 vsftpd]# cd /etc/vsftpd/
[root@node1 vsftpd]# ll
总用量 20
-rw-------. 1 root root 125 2月 19 2017 ftpusers # 黑名单,不允许访问FTP服务器
-rw-------. 1 root root 361 2月 19 2017 user_list # 白名单,允许访问
-rw-------. 1 root root 5030 2月 19 2017 vsftpd.conf # 核心配置文件
-rwxr--r--. 1 root root 338 2月 19 2017 vsftpd_conf_migrate.sh # FTP服务
2、新建用户
[root@node1 ~]# useradd yzl
[root@node1 ~]# passwd yzl
[root@node1 ~]# vim /etc/vsftpd/user_list # 将用户加入到白名单
...
yzl # 末行加入 “yzl”
[root@node1 ~]#
3、设置权限
[root@node1 ~]# vim /etc/vsftpd/vsftpd.conf
...
anonymous_enable=NO # 禁止匿名用户登陆
local_root=/data/ftp # 新建目录,指定用户访问的主目录
...
# /data/ftp目录需创建并赋予权限。
# chmod -R yzl /data/ftp
[root@node1 ~]# systemctl restart vsftpd
4、客户端访问
[root@node2 ~]# lftp 172.16.100.63 # 匿名用户登陆,无法获取数据
lftp 172.16.100.63:~> ls
[重新连接前延时:30]
[root@node2 ~]# lftp 172.16.100.63 -u yzl # 指定用户登陆
口令: # 输入密码
lftp yzl@172.16.100.63:~> pwd
ftp://yzl@172.16.100.63/%2Fdata/ftp # 显示指定路径
三、配置用户ftp权限及访问路径限制
[root@node1 ~]# vim /etc/vsftpd/vsftpd.conf
-
修改用户ftp登陆权限
- //找到#chroot_list_enable=YES,删除前面的那个#号,表示开启用户是否能登陆ftp限制
- //找到#chroot_list_file=/etc/vsftpd/chroot_list,删除前面的那个#号,表示使用该列表中的名字作为限制条件
- //编辑chroot_list,加入你要限制的用户名,一行一个用户
-
修改用户ftp访问区域权限
- 找到#chroot_local_user=YES,删除前面的那个#号,表示开启,用户只能访问自己的家目录
-
每次修改完配置文件,需要重启ftp
[root@node2 ~]# /etc/init.d/vsftpd restart
四、vsftpd.conf详细参数
anonymous_enable=YES(第12行)匿名用户是否可以登录
local_enable=YES(第16行)为本地用户是否可以登录
write_enable=YES(第19行)为本地用户能否可写
local_umask=xxx (第23行)本地用户上传文件权限
anon_upload_enable=YES(第29行)为匿名用户可以上传 默认目录 /var/ftp/
anon_umask=xxx (加在13行) 为匿名用户上传文件默认权限修改
anon_mkdir_write_enable=YES(第33行)匿名用户建立目录
anon_world_readable_only=NO(加在35)匿名用户下载 ##设置NO表示可以下载
anon_other_write_enable=YES(加在15)匿名用户删除
anon_root=/x (加在16)设定匿名用户家目录
max_clients=x (加在14行)表示最大可连接数
anon_max_rate=x (加在15行)【单位是字节】表示最大速度
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES (第53行)开启上传文件的所有人
chown_username=whoever (第54行)设定上传文件的所有人
chown_upload_mode=0755 (加在55行 )设定上传的权限
xferlog_std_format=YES
local_root=/dir (加在21) 本地用户家目录修改
chroot_local_user=YES (第107行)所有用户被锁定到自己的家目录中
chroot_list_enable=YES (第108行) 启动列表[黑/白名单]
chroot_list_file=/etc/vsftpd/chroot_list(第110行) 开启名单文件
userlist_enable=YES (第130行) 列表生效
userlist_deny=NO (加在131)将黑名单变成白名单
user_config_dir=/etc/vsftpd/userconf (加) 虚拟用户配置指定文件
pam_service_name=x(加) 这里的x和之前建立的虚拟用户文件名一致
guest_enable=YES (加) 虚拟用户生效
guest_username=ftp ## 默认是以ftp用户身份登陆
五、支持模式、传输方式、命令参数
1、支持模式
- Port主动模式
- FTP 客户端首先和服务器的TCP 21端口建立连接,用来发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。FTP server必须和客户端建立一个新的连接用来传送数据。
- Passive被动模式
- FTP 客户端首先和服务器的TCP 21端口建立连接,用来发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。FTP server必须和客户端建立一个新的连接用来传送数据。
2、传输方式
- 文本(ASCII)方式:通常文本文件的传输采用ASCII方式,
- 二进制(Binary)方式:图象、声音文件、加密和压缩文件等非文本文件采用二进制方式传输,
- FTP以ASCII方式作为缺省的文件传输方式
3、命令参数
显示文件信息:DIR/LS
下载文件:GET 文件名(下载到当前目录)
上传文件:PUT 文件名
多文件下载:MGET
多文件上传:MPUT
退出:BYE
帮助:HELP
五、常见问题
- 报错id解析
# 500 文件系统权限过大
# 530 用户认证失败
# 550 服务本身功能未开放
# 553 本地文件系统权限过小