FTP 服务器(File Transfer Protocol Server)是在互联网上提供文件共享存储和访问服务的计算机,它们依照 FTP 协议提供服务。
FTP(File Transfer Protocol: 文件传输协议)是一种 Internet 上用来传送文件的协议,支持这种协议的服务器就是 FTP 服务器。
常见 FTP 服务器如下:
Windows:Serv-U FTP Server
Linux:oftpd、ftpd、vsftpd、pure-ftpd、proftpd、wu-ftpd、glftpd
功能比较简单的有 ftpd 和 Oftpd,前者与 FTP 客户端工具 FTP 类似,只有标准的功能,此外支持 SSL。Oftpd 是一款非常小巧的匿名 FTP 服务器。
可配制型高级的主要是 vsftpd 和 pure-ftpd。 这两个侧重于安全、速度和轻量级,在大型 FTP 服务器上用得比较多,尤其是 vsftpd,这类服务器对用户认证和权限控制比较简单,更注重安全型和速度。Pure-ftpd 相对 vsftpd 要强大一些,支持的用户认证方式也比较多。
配置性更好的是 proftpd、wu-ftpd 和 glftpd。Proftpd 的配置方式跟 Apache 非常类似,支持虚拟服务器,可针对目录、虚拟用户进行权限配制,可继承和覆盖。
今天主要介绍 VSFTP。
VSFTP 是一个基于 GPL 发布的类 Unix 系统上使用的 FTP 服务器软件,它的全称是 Very Secure FTP,它的优势就是安全、高速、稳定的 FTP 服务器。接下来介绍如何搭建这个文件共享服务器。
安装前检查一下包是否已经安装,如下:
[root@10-255-1-40 ~]# rpm -qa | grep vsftp
vsftpd-3.0.2-22.el7.x86_64
[root@10-255-1-40 ~]#
如果没有安装,使用如下方式安装:
[root@10-255-1-40 ~]# yum install vsftpd
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
正在解决依赖关系
--> 正在检查事务
---> 软件包 vsftpd.x86_64.0.3.0.2-22.el7 将被 安装
--> 解决依赖关系完成
依赖关系解决
==============================================================================================================================================================
Package 架构 版本 源 大小
==============================================================================================================================================================
正在安装:
vsftpd x86_64 3.0.2-22.el7 base 169 k
事务概要
==============================================================================================================================================================
安装 1 软件包
总下载量:169 k
安装大小:348 k
Is this ok [y/d/N]:
接着安装 LFTP,这个可以用来登录浏览 FTP 共享文档:
[root@10-255-1-40 ~]# yum install lftp
已加载插件:fastestmirror
base | 3.6 kB 00:00:00
epel | 3.2 kB 00:00:00
extras | 3.4 kB 00:00:00
updates | 3.4 kB 00:00:00
Loading mirror speeds from cached hostfile
正在解决依赖关系
--> 正在检查事务
---> 软件包 lftp.x86_64.0.4.4.8-8.el7_3.2 将被 安装
--> 解决依赖关系完成
依赖关系解决
==============================================================================================================================================================
Package 架构 版本 源 大小
==============================================================================================================================================================
正在安装:
lftp x86_64 4.4.8-8.el7_3.2 base 751 k
事务概要
==============================================================================================================================================================
安装 1 软件包
总下载量:751 k
安装大小:2.4 M
Is this ok [y/d/N]:
以上两个都输入 y 安装即可,滴滴云已经提供专业的 yum 安装源,您可以放心的安装相关服务。当然了,除了 yum 的安装方式之外,您还可以选择从官方下载源码或者 RPM 包来安装,RPM 安装命令:
rpm -ivh /home/demo/vsftpd-3.0.2-22.el7.x86_64.rpm
这根据您的使用方式来选择,哪个方便使用哪个安装。
[root@10-255-1-40 vsftpd]# pwd
/etc/vsftpd
[root@10-255-1-40 vsftpd]# ll
总用量 20
-rw------- 1 root root 125 8月 3 2017 ftpusers
-rw------- 1 root root 361 8月 3 2017 user_list
-rw------- 1 root root 5030 8月 3 2017 vsftpd.conf
-rwxr--r-- 1 root root 338 8月 3 2017 vsftpd_conf_migrate.sh
[root@10-255-1-40 vsftpd]#
/etc/vsftpd/vsftpd.conf:vsftpd 的核心配置文件
/etc/vsftpd/ftpusers:用于指定哪些用户不能访问 FTP 服务器,是个黑名单
/etc/vsftpd/user_list:指定允许使用 vsftpd 的用户列表文件,是个白名单
vim /etc/vsftpd/user_list
# 如果 userlist_deny= YES
(默认),不允许在这个文件中的用户登录 FTP,甚至不提示输入密码
# prompt 提示
/etc/vsftpd/vsftpd_conf_migrate.sh:是 vsftpd 操作的一些变量和设置脚本
/var/ftp/:默认情况下匿名用户的根目录,其目录如下:
[root@10-255-1-40 vsftpd]# cd /var/ftp/pub/
[root@10-255-1-40 pub]# pwd
/var/ftp/pub
[root@10-255-1-40 pub]#
我们先不做配置的情况下,看看默认能做什么事情,启动服务:
[root@10-255-1-40 var]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
[root@10-255-1-40 var]# systemctl start vsftpd
[root@10-255-1-40 var]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: active (running) since 日 2018-12-09 03:54:48 UTC; 1s ago
Process: 9175 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 9176 (vsftpd)
CGroup: /system.slice/vsftpd.service
└─9176 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
12月 09 03:54:48 10-255-1-40 systemd[1]: Starting Vsftpd ftp daemon...
12月 09 03:54:48 10-255-1-40 systemd[1]: Started Vsftpd ftp daemon.
[root@10-255-1-40 var]#
滴滴云主机默认安全组没有打开 21 端口,具体如何打开参考滴滴云官网介绍,打开后如下:
以 mac 为例,mac 上自带客户端工具,其他操作系统也可以使用浏览器、文件夹资源管理器等工具进行访问。
访问协议前缀都是 ftp://IP 地址
,端口一般都是默认端口,打开 mac 上的自带工具 Finder,选择前往,再选择连接服务器,如下:
进入如下界面,输入 FTP 服务器信息:
默认只能使用匿名用户访问,如图:
下面做一些配置:
允许所有员工上传和下载文件,并允许创建用户自己的目录:
anon_mkdir_write_enable
字段可以控制是否允许匿名用户创建目录。
查看并备份原配置文件:
[root@10-255-1-40 vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
[root@10-255-1-40 vsftpd]# cp vsftpd.conf vsftpd.conf.bak
[root@10-255-1-40 vsftpd]#
允许匿名用户访问:
anonymous_enable=YES
允许匿名用户上传文件并可以创建目录:
anon_upload_enable=YES
anon_mkdir_write_enable=YES
重新启动服务:
[root@10-255-1-40 vsftpd]# systemctl restart vsftpd
[root@10-255-1-40 vsftpd]#
mac 终端:
dubodeMacBook-Pro-2:ftp dubobo$ ftp ftp://116.85.5.228/
Connected to 116.85.5.228.
220 (vsFTPd 3.0.2)
331 Please specify the password.
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
200 Switching to Binary mode.
ftp> ls
229 Entering Extended Passive Mode (|||63798|)
ftp: Can't connect to `116.85.5.228': Operation timed out
200 EPRT command successful. Consider using EPSV.
150 Here comes the directory listing.
drwxr-xr-x 2 14 50 42 Dec 09 07:59 pub
drwxr-xr-x 2 0 0 6 Dec 09 08:18 test
226 Directory send OK.
ftp>
ftp>
ftp>
但是发现,能创建目录,但不能删除和重命名文件夹,如图所示:
我们建立一个文件夹,如下:
[root@10-255-1-40 ftp]# mkdir /var/ftp/zhangsan
[root@10-255-1-40 ftp]# chown ftp.ftp /var/ftp/
pub/ test/ zhangsan/
[root@10-255-1-40 ftp]# chown ftp.ftp /var/ftp/zhangsan/
[root@10-255-1-40 ftp]# systemctl restart vsftpd
[root@10-255-1-40 ftp]
匿名用户上传文件就算可以了,但是不能删除和重命名。
注:工作中,匿名用户只是只读访问,写的权限也没有的。
补充:如果想让匿名用户可以重命名或者删除的权限,添加如下一条配置参数,即 anon_other_write_enable
,如下:
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
重新启动服务就可以对重新命名和删除文件夹了。
[root@10-255-1-40 ftp]# systemctl restart vsftpd
匿名用户就可以删除和修改,非常不安全,所以要慎重使用这个参数。
注意,默认匿名用户家目录的权限是 755,这个权限是不能改变的。
假设现有两个部门负责产品文档,他们分别使用 user1 和 user2 帐号进行管理。要求只允许 user1 和 user2 帐号登录 FTP 服务器,但不能登录本地系统,并将这两个帐号的目录限制为 /home/test
,而且不能进入该目录以外的任何目录。
1.建立产品系统内容的 FTP 帐号 user1 和 user2 并禁止本地登录,然后设置其密码
[root@10-255-1-40 ftp]# useradd -s /sbin/nologin user1
同样创建user2用户。
修改两个用户密码:
[root@10-255-1-40 ftp]# passwd user1
更改用户 user1 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@10-255-1-40 ftp]#
[root@10-255-1-40 ftp]#
[root@10-255-1-40 ftp]#
将 user2 同样更改密码,也可以直接使用命令 passwd user1 回车修改密码。
2.配置 vsftpd.conf
主配置文件并作相应修改
[root@10-255-1-40 ftp]# vim /etc/vsftpd/vsftpd.conf
\# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO 禁止匿名用户
\#
\# Uncomment this to allow local users to log in.
\# When SELinux is enforcing check for SE bool ftp_home_dir
local_enable=YES允许本地登陆
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO
#
# Uncomment this to allow local users to log in.
# When SELinux is enforcing check for SE bool ftp_home_dir
local_enable=YES
继续修改,将:
#chroot_local_user=YES
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list
修改为:
# chroot)
chroot_local_user=YES
local_root=/home/test
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
local_root=/home/test:设置本地用户的根目录为 /home/test
chroot_list_enable=YES:激 chroot 功能
chroot_list_file=/etc/vsftpd/chroot_list:设置锁定用户在根目录中的列表文件。此文件存放要锁定的用户名
保存并退出。
3.建立 /etc/vsftpd/chroot_list
文件,添加 user1 和 user2 帐号
[root@10-255-1-40 vsftpd]# touch /etc/vsftpd/chroot_list
[root@10-255-1-40 vsftpd]# ls
chroot_list ftpusers user_list vsftpd.conf vsftpd.conf.bak vsftpd_conf_migrate.sh
[root@10-255-1-40 vsftpd]#
[root@10-255-1-40 vsftpd]# vim chroot_list
[root@10-255-1-40 vsftpd]# cat chroot_list
user1
user2
[root@10-255-1-40 vsftpd]#
按照上述配置修改好文件。
创建对应文档目录:
[root@10-255-1-40 var]# mkdir /home/test
您在 /var/spool/mail/root 中有新邮件
[root@10-255-1-40 var]# chmod 777 /home/test/
使用资源管理器创建一个文件夹并验证:
[root@10-255-1-40 var]# cd /home/test/
[root@10-255-1-40 test]# ls
新文件夹
[root@10-255-1-40 test]#
基本的测试完了,欢迎拍砖。