CentOS7 安装 vsftpd 服务

CentOS7 安装 vsftpd 服务


0.FTP简介

  • FTP服务是一个跨平台的文件共享解决方案

0.1.FTP两种模式的区分:服务端的主被动模式

1)ftp通常分为两种模式,PORTFTP和PASVFTP
2)这两种FTP在创建控制链接时操做是同样的,都是由客户端首先和FTP服务器的控制端口(默认值为21)创建控制连接,并经过此链接进行传输操做指令。它们的区别在于使用数据传输端口(ftp-data)的方式。
3)PORTFTP模式下由FTP服务器指定数据传输所使用的端口,默认值为20。
4)PASVFTP模式下由FTP客户端决定数据传输的端口。PASVFTP这种作法,主要是考虑到存在防火墙的环境下,由客户端与服务器进行沟通(客户端向服务器发出数据传输请求中包含了数据传输端口),决定二者之间的数据传输端口更为方便一些。

0.2.FTP 经常使用的三中用户受权方式

  • 1.匿名用户访问
默认安装完 vsftpd 服务,启动后就是匿名方式的ftp服务器,使用
ftp 127.0.0.1
便可登陆查看指定的目录文件,
注意:这种方式不是很安全,通常在要求临时快速提供跨平台文件共享时会使用
  • 2.系统用户受权访问
容许 linux 系统用户使用 ftp 服务访问该用户的宿主目录或者指定的系统目录
用途:通常用于我的搭建的自用 ftp 服务器,配置简单,便于管理(用户少)
优势:配置简单
缺点:若是须要提供大量用户的受权访问,不推荐使用,用户管理不方便
  • 3.虚拟用户受权访问
原理:独立的维护一个虚拟用户列表,能够建立不一样的虚拟用户映射到同一个系统用户上进行受权管理,以这个系统用户的进行文件共享访问以及受权管理
优势:适用于大量用户的受权访问,好比公司内部文件共享,较为安全且经常使用
缺点:配置较为复杂

1.安装FTP服务端

1.1.环境准备

  • 检查系统环境,若是系统版本较低,建议升级内核等
uname -a
cat /etc/redhat-release 
yum update -y

1.2.安装vsftpd,建立数据目录

  • 包括服务端和客户端
yum install vsftpd ftp -y
which vsftpd
  • 建立 ftp 用户及宿主目录
useradd -d /data/ftpdata/ -s /sbin/nologin ftpvuser     
chmod 755 /data/ftpdata/
chown -R ftpvuser.ftpvuser /data/ftpdata/
ls -lhd /data/ftpdata/
  • 注意:这个 ftpvuser 是 linux 系统用户,用于映射 ftp 虚拟用户,只须要建立一次

1.3.启动 vsftpd 服务并配置开机自启动

systemctl start vsftpd
systemctl status vsftpd
systemctl enable vsftpd
netstat -anptl|grep vsftpd
  • 实例演示:
[root@srv05-CT75 vsftpd]# tail -1 /etc/passwd
ftpvuser:x:1000:1000::/data/ftpdata/:/sbin/nologin
[root@srv05-CT75 ~]# systemctl start vsftpd
[root@srv05-CT75 ~]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2019-06-18 01:00:50 CST; 24h ago
 Main PID: 7649 (vsftpd)
   CGroup: /system.slice/vsftpd.service
           └─7649 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

Jun 18 01:00:50 srv05-CT75.zhaoshuai.com systemd[1]: Stopped Vsftpd ftp daemon.
Jun 18 01:00:50 srv05-CT75.zhaoshuai.com systemd[1]: Starting Vsftpd ftp daemon...
Jun 18 01:00:50 srv05-CT75.zhaoshuai.com systemd[1]: Started Vsftpd ftp daemon.
[root@srv05-CT75 ~]# netstat -anptl|grep vsftpd
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      7649/vsftpd         
[root@srv05-CT75 ~]# systemctl enable vsftpd   
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.

1.4.配置 vsftpd 的操做日志

  • 从xferlog能够查看到用户上传下载等的操做记录,删除不会显示
vim /etc/logrotate.d/vsftpd 
--------------------------------
/var/log/vsftpd.log {
    # ftpd doesn't handle SIGHUP properly
    nocompress
    missingok
}
/var/log/xferlog {
    # ftpd doesn't handle SIGHUP properly
    nocompress
    missingok
}
--------------------------------
tail -f /var/log/xferlog

2.使用匿名用户访问 FTP 服务器

  • 刚安装好并启动的 vsftpd 服务,默认为匿名访问
1)能够直接输入"IP:PORT",能够打开ftp服务器
2)容许匿名用户登陆,宿主目录为/var/ftp,不能离开,下载目录为/var/ftp/pub,且只能下载,不能上传
3)容许本地用户登陆,且可离开主目录,本地用户容许上传/下载
4)写在文件/etc/vsftpd/ftpusers中的本地用户禁止登陆
5)服务器使用独占方式启动,且无限制链接数
  • 实例演示:
[root@srv05-CT75 vsftpd]# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 3.0.2)
Name (127.0.0.1:root): anonymous        # 输入匿名用户的用户名
331 Please specify the password.        # 提示输入密码
Password:                               # 空密码
230 Login successful.                   # 提示登陆成功
Remote system type is UNIX.
Using binary mode to transfer files.    # 提示使用二进制传输数据
ftp> ls                                 # 查看文件列表,宿主目录为 /var/ftp
227 Entering Passive Mode (127,0,0,1,168,57).
150 Here comes the directory listing.
drwxr-xr-x    2 0        0            4096 Oct 30  2018 pub     # 默认有个 pub 目录
226 Directory send OK.
ftp> ls pub                             # pub目录为空
227 Entering Passive Mode (127,0,0,1,102,108).
150 Here comes the directory listing.
226 Directory send OK.
ftp> cd pub                             # 切换目录
250 Directory successfully changed.     # 提示目录切换成功
ftp> ls                                 # 列表查看,空目录
227 Entering Passive Mode (127,0,0,1,153,121).
150 Here comes the directory listing.
226 Directory send OK.
ftp> cd ..
250 Directory successfully changed.
ftp> ls                                 # 我这里手动建立了 aaa 目录和 bbb 文件
227 Entering Passive Mode (127,0,0,1,212,127).
150 Here comes the directory listing.
drwxr-xr-x    2 0        0            4096 Jun 18 17:56 aaa
-rw-r--r--    1 0        0               0 Jun 18 17:57 bbb
drwxr-xr-x    2 0        0            4096 Oct 30  2018 pub
226 Directory send OK.
ftp> 
ftp> help                               # help 能够查看可使用的命令
Commands may be abbreviated.  Commands are:

!               debug           mdir            sendport        site
$               dir             mget            put             size
account         disconnect      mkdir           pwd             status
append          exit            mls             quit            struct
ascii           form            mode            quote           system
bell            get             modtime         recv            sunique
binary          glob            mput            reget           tenex
bye             hash            newer           rstatus         tick
case            help            nmap            rhelp           trace
cd              idle            nlist           rename          type
cdup            image           ntrans          reset           user
chmod           lcd             open            restart         umask
close           ls              prompt          rmdir           verbose
cr              macdef          passive         runique         ?
delete          mdelete         proxy           send
ftp> exit
421 Timeout.
  • 以上是匿名用户登陆 vsftpd 服务器的演示

3.使用系统用户访问 FTP 服务器

3.1.修改配置文件并重启服务

vim /etc/vsftpd/vsftpd.conf
-------------------------------
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
chroot_local_user=YES
userlist_enable=YES
userlist_deny=NO                       
userlist_file=/etc/vsftpd/user_list
pam_service_name=vsftpd
tcp_wrappers= YES
-------------------------------
systemctl restart vsftpd
systemctl status vsftpd
  • 配置注解:
anonymous_enable=NO                         # 修改,禁止匿名用户登陆
local_enable=YES                            # 默认启用,容许本地用户登陆,虚拟用户须要映射到本地用户才可使用
write_enable=YES                            # 默认启用,本地用户开放写权限
#local_umask=022                            # 注释掉,本地用户建立的文件的权限反码022,建立的文件为644
chroot_local_user=YES                       # 默认启用,将本地用户锁定在本身的家目录中
userlist_enable=YES                         # 是否启用用户控制列表,默认启用
userlist_deny=NO                            # 指定用户控制列表的做用,默认为 YES,表示该文件内的用户列表禁止登陆FTP服务器,这里修改成 NO,做为受权访问的用户列表使用 
userlist_file=/etc/vsftpd/user_list         # 指定用户控制列表的文件名
anon_umask=022                              # 增长,匿名用户新增文件的umask数值。默认值为077,须要修改成022,不然上传后的文件为600
dirmessage_enable=YES                       # 设置切换到目录时显 示message 隐含文件的内容
xferlog_enable= YES                         # 激活上传和下载日志
connect_from_port_20= YES                   # 启用FTP数据端口链接
pam_service_name=vsftpd                     # 设置PAM认证服务的配置文件名称,  该文件存放在/etc/pam.d目录下
listen= YES                                 # 是否使用独占启动方式
tcp_wrappers= YES                           # 使用防火墙
#file_open_mode=0755

pasv_min_port=50000                         # 被动模式下的最小端口
pasv_max_port=60000                         # 被动模式下的最大端口

# 设置链接服务器后的欢迎信息
ftpd_banner=welcome to ftp service.
banner_file=/etc/vsftpd/vsftpd_banner_file
  • 配置建议:
userlist_deny=NO ,这里设置为NO,作为容许登录的用户列表,能够手动指定容许登陆 ftp 的用户,比较实用,若是设置为YES,做为禁止登陆 ftp 的用户列表,与 ftpusers 功能重复,没有必要
  • vsftpd 的配置文件列表
/etc/vsftpd/vsftpd.conf     # 主配置文件
/etc/vsftpd/ftpusers        # FTP限制访问的用户,里面是一些系统用户,默认不容许访问,防止被入侵,通常不须要修改
/etc/vsftpd/user_list       # 受权用户列表,能够控制哪些用户能够访问或者禁止访问,我通常配置为容许访问 ftp 的用户列表
  • 特别注意:
1)vsftpd.conf 文件中每一个选项设置为一行,格式为“option=value”,“=”号两边不能留空白符

3.2.建立测试用的本地用户

useradd zhaoshuai
passwd zhaoshuai
  • 建立测试用的文件和目录
[root@srv05-CT75 vsftpd]# touch /home/zhaoshuai/aaa.txt
[root@srv05-CT75 vsftpd]# mkdir -p /home/zhaoshuai/bbb 
[root@srv05-CT75 vsftpd]# ll /home/zhaoshuai/          
total 4
-rw-r--r-- 1 root root    0 Jun 19 02:18 aaa.txt
drwxr-xr-x 2 root root 4096 Jun 19 02:18 bbb

3.3.修改受权的本地用户列表

  • ftpusers 禁止登陆 ftp 服务器的用户列表,通常是系统用户不须要修改,能够增长
vim /etc/vsftpd/ftpusers
-------------------------------
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
-------------------------------
  • user_list 容许登录 ftp 服务器的用户列表
vim /etc/vsftpd/user_list 
-------------------------------
zhaoshuai
-------------------------------
  • 备注:以上两个文件修改完不须要重启 vsftpd 服务

3.4.使用本地用户登录测试

ftp 127.0.0.1
  • 实例演示:
[root@srv05-CT75 pam.d]# ftp 127.0.0.1              
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 3.0.2)
Name (127.0.0.1:root): zhaoshuai
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 
ftp> 
ftp> ls
227 Entering Passive Mode (127,0,0,1,94,91).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               0 Jun 18 18:18 aaa.txt
drwxr-xr-x    2 0        0            4096 Jun 18 18:18 bbb
226 Directory send OK.
ftp> exit
221 Goodbye.
  • 若是要使用 xftp 等图形工具,须要选择主动模式
  • 对于阿里云,青云等云平台的虚拟机,须要考虑安全组:容许20,21端口的接入请求
  • 阿里云配置nat网关的端口转发能够经过公网链接,或者直接绑定EIP,青云须要直接绑定EIP进行公网链接
  • 阿里云和青云都没法经过负载均衡的端口转发提供ftp服务的访问,由于通过了他们内部的路由转发,没法直接找到对应的主机,总之ftp须要直连服务器才行

4.使用虚拟用户访问 FTP 服务器

  • ftp配置为匿名访问显然是不安全也不便于管理的,另外,单纯使用系统用户的 ftp 也较难管理,一般状况下是使用一个系统用户做为ftp用户登录ftp服务器的代理用户进行管理

4.1.修改vsftpd.conf 文件,重启服务

cd /etc/vsftpd/
vim vsftpd.conf 
----------------------------------------
anonymous_enable=NO
local_enable=YES
write_enable=YES
#local_umask=022
chroot_local_user=YES
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
chroot_local_user=YES

# made for virtual user
guest_enable=YES
guest_username=ftpvuser
pam_service_name=/etc/pam.d/ftpvuser.pam
user_config_dir=/etc/vsftpd/vuser.d
anon_umask=022
-------------------------------------
systemctl restart vsftpd
systemctl status vsftpd
  • 配置注解:
guest_enable=YES                            # 增长,启用虚拟用户模式
guest_username=ftpvuser                     # 增长,配置虚拟用户映射到的本地用户名
pam_service_name=/etc/pam.d/ftpvuser.pam    # 修改,配置虚拟用户的认证方式
user_config_dir=/etc/vsftpd/vuser.d         # 增长,虚拟用户的配置文件目录
  • 注意:
1)除了主配置文件外,还能够给特定用户设定我的配置文件
2)虚拟用户默承认以读写,访问时映射为本地用户,因此须要启用对本地用户的控制
3)实际的访问权限可由用户独立的配置文件进行单独控制

4.2.设置 ftp 虚拟用户的验证受权方式

  • 1)建立虚拟用户的秘钥文件
mkdir -p /etc/vsftpd/vuser.d
cd /etc/vsftpd/vuser.d
touch vuser.list
  • 2)加密虚拟用户的秘钥文件
# 使用 db_load 工具生成加密文件
yum install db4-utils -y
db_load -T -t hash -f vuser.list vuser.db
file vuser.list 
file vuser.db 

# 为了安全,修改虚拟用户文件的访问权限
chmod 600 /etc/vsftpd/vuser.*
ll /etc/vsftpd/vuser.*
  • 3)建立虚拟用户的受权认证文件
cd /etc/pam.d/
mv vsftpd vsftpd.ori        # 备份原有的ftp的pam认证文件
vim ftpvuser.pam            # 建立新的ftp虚拟用户认证文件
-----------------------------------
#%PAM-1.0
auth       required     pam_userdb.so db=/etc/vsftpd/vuser.d/vuser
account    required     pam_userdb.so db=/etc/vsftpd/vuser.d/vuser
-----------------------------------
  • 注意:db=/etc/vsftpd/vuser.d/vuser 不能够加.db的扩展名,不然认证不成功

4.3.实例演示:配置一个虚拟用户

  • 1)建立 ftp 虚拟用户 test1 的数据目录和秘钥文件
mkdir -p /data/ftpdata/zhaoshuai
touch /data/ftpdata/zhaoshuai/ccc.txt               # 建立测试文件
mkdir -p /data/ftpdata/zhaoshuai/ddd
chown -R ftpvuser.ftpvuser /data/ftpdata
chmod 755 /data/ftpdata/
ls -lhd /data/ftpdata/
ls -lh /data/ftpdata/
  • 2)把该虚拟用户 test1 添加到 user_list 文件中
vim /etc/vsftpd/user_list 
---------------------
zhaoshuai
----------------------
  • 备注:
1)注释掉其余本地用户认证的内容,由于启用了 guest_enable 后,本地用户将失效,全部非匿名用户变成虚拟用户
2)由于须要受权访问的用户比较少,因此user_list设置为能够访问ftp服务的用户
  • 3)建立或修改虚拟用户秘钥信息
cd /etc/vsftpd/vuser.d
vim  vuser.list
--------------------
zhaoshuai
zhaoshuai               # 这里的密码和系统用户 zhaoshuai 的密码不一样用以区分
--------------------
db_load -T -t hash -f vuser.list vuser.db
  • 该文件的格式为:一行用户名一行密码linux

  • 4)为用户建立受权配置文件(文件名必须为虚拟用户名)
cd /etc/vsftpd/vuser.d
vim zhaoshuai
---------------------------
# 指定宿主目录,配置访问权限
local_root=/data/ftpdata/zhaoshuai      # 虚拟用户的宿主目录
write_enable=YES
anon_upload_enable=YES              # 上传
anon_mkdir_write_enable=YES         # 建立目录写权限
anon_other_write_enable=YES         # 其余写入权限
---------------------------
  • 5)配置完成刷新配置信息
systemctl restart vsftpd
systemctl status vsftpd
  • 6)登录测试
[root@srv05-CT75 vuser.d]# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 3.0.2)
Name (127.0.0.1:root): zhaoshuai
331 Please specify the password.
Password:                                       # 在这里使用系统用户zhaoshuai的密码没法登录
530 Login incorrect.
Login failed.
ftp> exit
221 Goodbye.
[root@srv05-CT75 vuser.d]# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 3.0.2)
Name (127.0.0.1:root): zhaoshuai
331 Please specify the password.
Password:                                       # 使用虚拟用户zhaoshuai的密码能够正常登陆
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 
ftp> ls                                         # 能够查看到上面建立的测试文件
227 Entering Passive Mode (127,0,0,1,226,175).
150 Here comes the directory listing.
drwxr-xr-x    3 1000     1000         4096 Jun 12 07:59 ccc.txt
drwxr-xr-x    6 1000     1000         4096 Jun 12 07:45 ddd
226 Directory send OK.
ftp> exit
221 Goodbye.

拓展1:ftp 的防火墙配置

iptables -I INPUT -p tcp --dport 21 -j ACCEPT           # FTP链接端口
iptables -I INPUT -p tcp --dport 33000:34000 -j ACCEPT      # pasv模式下的随机端口
iptables-save >/etc/sysconfig/iptables                      # 保存防火墙配置

systemctl restart iptables.service
systemctl restart vsftpd.service

拓展2:CentOS6安装vsftpd

  • 方法相同,区别在于服务的启动命令是
service vsftpd restart
service vsftpd status

同类文章推荐

  • ftp相关技术文档,写的较早,看文笔很不错,应该又能够借鉴的地方vim

    http://os.51cto.com/art/201008/222036.htmcentos

END

相关文章
相关标签/搜索