1. 目标需求

1
2
3
4
5
6
7
1. 为了系统安全,使用虚拟账号
2. 不同账号配置权限
3. 目标账号权限:
能上传文件
能下载文件
不能删除文件
不能替换文件

2. 安装

2.1 安装vsftpd

install -y vsftpd
1
yum install -y vsftpd

2.2 卸载vsftpd

1
yum remove -y vsftpd

2.3. 目录说明

1
1. 安装目录和配置目录:		/etc/vsftpd

2.4 其他命令

1
2
3
4
5
6
7
8
9
10
11
12
centos6.x:
etc/init.d/vsftpd start #contos 6.5启动
service vsftpd restart #contos 6.5重启
service vsftpd stop #contos 6.5停止
chkconfig vsftpd on #contos 6.5设置开机时自动运行


centos7.x:
systemctl start vsftpd #contos 7启动
systemctl restart vsftpd #contos 7重启
systemctl stop vsftpd #contos 7停止
systemctl enable vsftpd.service #contos 7设置开机时自动运行

3. 全局配置

3.1 全局配置

1
2
3
4
1. 关闭匿名访问
anonymous_enable=NO
2. 允许本地账户访问
local_enable=YES

3.2 配置参数说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# 是否允许匿名登录FTP服务器,默认设置为YES允许
# 用户可使用用户名ftp或anonymous进行ftp登录,口令为用户的E-mail地址。
# 如不允许匿名访问则设置为NO
anonymous_enable=NO

# 是否允许本地用户(即linux系统中的用户帐号)登录FTP服务器,默认设置为YES允许
# 本地用户登录后会进入用户主目录,而匿名用户登录后进入匿名用户的下载目录/var/ftp/pub
# 若只允许匿名用户访问,前面加上#注释掉即可阻止本地用户访问FTP服务器
local_enable=YES

# 是否允许本地用户对FTP服务器文件具有写权限,默认设置为YES允许
write_enable=YES

# 掩码,本地用户默认掩码为077
# 你可以设置本地用户的文件掩码为缺省022,也可根据个人喜好将其设置为其他值
local_umask=022

# 是否激活目录欢迎信息功能
# 当用户用CMD模式首次访问服务器上某个目录时,FTP服务器将显示欢迎信息
# 默认情况下,欢迎信息是通过该目录下的.message文件获得的
# 此文件保存自定义的欢迎信息,由用户自己建立
dirmessage_enable=YES

# 表明FTP服务器记录上传下载的情况
xferlog_enable=YES

# 表明将记录的上传下载情况写在xferlog_file所指定的文件中,即xferlog_file选项指定的文件中
xferlog_std_format=YES
xferlog_file=/var/log/xferlog

# 启用双份日志。在用xferlog文件记录服务器上传下载情况的同时,
# vsftpd_log_file所指定的文件,即/var/log/vsftpd.log也将用来记录服务器的传输情况
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log

# 设定 FTP 服务器将启用 FTP 数据端口的连接请求 ,ftp-data 数据传输 ,21 为连接控制端口
connect_from_port_20=NO

#开启被动模式
pasv_enable=YES

#被动模式最低端口
pasv_min_port=12000

#被动模式最高端口
pasv_max_port=15000
pasv_promiscuous=YES
pasv_addr_resolve=YES
pasv_address=59.151.37.141 (外网地址)

# 设定是否允许 改变 上传文件的属主
chown_uploads=NO
#如果设置为 YES , 则 vsftpd 将以独立模式运行,由vsftpd自己监听和处理连接请求
listen=YES

#开启虚拟用户访问模式
guest_enable=YES
guest_username=ftproot
user_config_dir=/etc/vsftpd/vuser_conf

#安全访问名称
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

# 开启ascii模式上传下载
ascii_upload_enable=YES
ascii_download_enable=YES
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
vsftp配置文件
anonymous_enable=YES 是否允许匿名登陆

local_enable=YES 允许本地登陆

write_enable=YES 启用任何形式的ftp 写入命令

local_umask=022 FTP上本本地的文件权限,默认是077,不过vsftp安装后的配置文件里默认是022

anon_upload_enable=YES 允许匿名ftp 用户上传文件

anon_mkdir_write_enable=YES 允许匿名用户 创建新的目录

dirmessage_enable=YES 激活目录消息,向远程用户发送消息,进入某个目录

xferlog_enable=YES 激活上传/下载 日志记录

connect_from_port_20=YES 确保RORT传输连接来自端口 20

chown_uploads=YES
chown_username=whoever
设置 匿名用户上传文件的默认用户,不推荐使用root

xferlog_file=/var/log/xferlog 日志文件路径

xferlog_std_format=YES 日志文件使用标准ftpd xferlog格式的日志文件 ,默认位置 /var/log/xferlog

idle_session_timeout=600 更改超时空闲会话的默认值

data_connection_timeout=120 超时数据连接的默认值

nopriv_user=ftpsecure 创建ftp服务器 独立的用户

async_abor_enable=YES 启用 异步 ABOR 请求

ascii_upload_enable=YES 允许ASCII模式上传文件
ascii_download_enable=YES 允许ASCII模式下载文件

ftpd_banner=Welcome to blah FTP service. 自定义登陆标题字符串

deny_email_enable=YES 指定不允许匿名登陆电子邮件
banned_email_file=/etc/vsftpd/banned_emails 默认路径

chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

指定 chroot 参数
CHROOT就是Change Root,也就是改变程序执行时所参考的根目录位置。CHROOT可以增进系统的安全性,限制

使用者能做的事

ls_recurse_enable=YES 启用 ls –R 选项

listen=NO 启用 listen 指令,vsftp 以独立模式运行侦听ipv4 套接字,该指令不能同时使用 with

listen_inv6 指令

listen_ipv6=YES 监听ipv6

pam_service_name=vsftpd 虚拟用户使用PAM认证方式

userlist_enable=YES 只允许userlist 文件中的账户登陆

tcp_wrappers=YES 是否允许tcp_wrappers 管理

anon_other_write_enable=YES 允许匿名用户改名和删除文件

anon_world_readable_only=YES 匿名用户可以读文件 反之就是不能读

pasv_min_port=30000
pasv_max_port=35000 PASV模式下指定端口范围

备注: 其他没有记录到的,可以百度重新查询

3.3 配置虚拟用户

​ 参考文章: https://blog.51cto.com/14375807/2426831

  1. 创建虚拟用户

    1
    2
    3
    4
    5
    6
    在配置目录创建用户文件,奇数行为用户名,偶数行为密码
    vim /etc/vsftpd/users
    user1
    1234
    user2
    1234
    1. 生成虚拟用户数据库

      1
      2
      3
      yum -y install libdb-utils
      db_load -T -t hash -f /etc/vsftpd/users /etc/vsftpd/users.db
      chmod 700 /etc/vsftpd/users.db
    2. 配置vsftpd pam 验证文件

      1
      2
      3
      4
      5
      将auth和account的所有配置行均注释掉,添加一下两行

      vim /etc/pam.d/vsftpd
      auth required pam_userdb.so db=/etc/vsftpd/users
      account required pam_userdb.so db=/etc/vsftpd/users
    3. 添加系统账户,生成映射目录

      1
      2
      3
      4
      5
      6
      7
      8
      9
      添加一个系统用户‘ftpuser’,所有虚拟用户都会映射到此用户后对文件系统进行读写操作
      mkdir /ftproot
      useradd -d /ftproot -s /sbin/nologin ftpuser
      chown -R ftpuser:ftpuser /ftproot


      mkdir /date1/ftproot/
      useradd -d /date1/ftproot/ftp -s /sbin/nologin ftpuser
      chown -R ftpuser:ftpuser /date1/ftproot/ftp
    4. 修改主配置文件

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      vim /etc/vsftpd/vsftpd.conf

      #禁止匿名用户登录
      anonymous_enable=NO
      #允许本地用户登录
      local_enable=YES
      #启用虚拟账户
      guest_enable=YES
      #把虚拟账户映射到系统账户ftpuser
      guest_username=ftpuser
      #使用虚拟用户验证(PAM验证)
      pam_service_name=vsftpd
      #设置存放各虚拟用户配置文件的目录(此目录下与虚拟用户名相同的文件为他的配置文件)
      user_config_dir=/etc/vsftpd/vsftpd_users
      #启用chroot时,虚拟用户根目录允许写入
      allow_writeable_chroot=YES

      ​ 注意: 虚拟用户配置文件的目录这个时候还没有生成,需要手动创建

      1
      mkdir /etc/vsftpd/vsftpd_users
    5. 配置虚拟单独用户权限

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      配置虚拟用户各自的配置文件,文件名称是‘虚拟用户名’
      vim /etc/vsftpd/vsftpd_users/user1

      #允许写入
      write_enable=YES

      #允许浏览FTP目录和下载
      anon_world_readable_only=NO

      #允许虚拟用户上传文件
      anon_upload_enable=YES

      #允许虚拟用户创建目录
      anon_mkdir_write_enable=YES

      #不允许虚拟用户执行其他操作(如改名、删除)
      anon_other_write_enable=NO

      #上传文件的掩码,如022时,上传目录权限为755,文件权限为644
      anon_umask=022

      #指定虚拟用户的虚拟目录(虚拟用户登录后的主目录)
      local_root=/ftproot/admin/
    6. 创建虚拟用户的根目录,要保证虚拟用户映射的系统用户,对这个根目录有读写权限

      1
      2
      mkdir -p /ftproot/admin/
      chown -R ftpuser.ftpuser /ftproot/admin/
  2. 关闭可以访问的用户

    1
    vim /etc/vsftpd/ftpusers
  3. 重启服务(关闭防火墙测试)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 重启服务
    systemctl restart vsftpd

    #关闭防火墙
    systemctl stop firewalld

    # 使用工具测试
    账号: user1
    密码: 1234

vsftpd链接速度很慢:

​ 配置文件中添加: reverse_lookup_enable=NO