vsftpd安装

    Centos下ftp的安装一般采用的是vsftpd,但是在ftp的模式中又有几个用户配置项需要注意,有些人喜欢用本地用户去登陆FTP,虽然在建立本地用户的时候加了/sbin/nologin参数,但是这个还是不够安全,而且这样权限控制也不是很好,他们都是统一的控制权限,这里采用虚拟用户前来配置。虚拟用户配合防火墙selinux还有单个用户的权限,这使得FTP有着足够的安全。而且权限控制特别灵活,修改一个用户的权限不会影响到其他用户。
centos 系统版本(5.5、5.3、6.0、6.5)
centos 7.4 已经验证

首先我们安装vsftpd

1
[root@RAID1 ~]# yum –y install vsftpd

2、启动和加载vsftp

1
2
[root@RAID1 ~]# service vsftpd restart
[root@RAID1 ~]# chkconfig –level 35 vsftpd on

3、开始配置vsftpd

    Vsftpd的配置文件在/etc/vsftpd下面,在配置之前我们先cp一份做备份用以免发生意外(做什么都要随手备份,因为没有一万,只有万一。)

1
2
[root@RAID1 ~]#  cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
[root@RAID1 ~]# vim /etc/vsftpd/vsftpd.conf
  • vsftpd的参数介绍
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
reverse_lookup_enable=NO #添加此行,解决客户端登陆缓慢问题!重要!默认vsftpd开启了DNS反响解析!这里需要关闭,如果启动有错误,请注销!
listen_port=21 #默认无此行,ftp端口为21,添加listen_port=2222把默认端口修改为2222,注意:防火墙同时要开启2222端口
anonymous_enable=NO   #禁止匿名用户
local_enable=YES
设定本地用户可以访问。注意:主要是为虚拟宿主用户,如果该项目设定为NO那么所有虚拟用户将无法访问
write_enable=YES #全局设置,是否容许写入(无论是匿名用户还是本地用户,若要启用上传权限的话,就要开启他)
local_umask=022 设定上传后文件的权限掩码。
anon_upload_enable=NO 禁止匿名用户上传。
anon_mkdir_write_enable=NO 禁止匿名用户建立目录。
dirmessage_enable=YES 设定开启目录标语功能。
xferlog_enable=YES 设定开启日志记录功能。
connect_from_port_20=YES 设定端口20进行数据连接。
chown_uploads=NO 设定禁止上传文件更改宿主。
xferlog_file=/var/log/vsftpd.log 日志保存路径(先创建好文件)
xferlog_std_format=YES   #使用标准格式
async_abor_enable=YES 设定支持异步传输功能。
ascii_upload_enable=YES
ascii_download_enable=YES 设定支持ASCII模式的上传和下载功能。
ftpd_banner=Welcome to Awei FTP servers 设定Vsftpd的登陆标语。
chroot_local_user=YES 禁止本地用户登出自己的FTP主目录。
pam_service_name=vsftpd 设定PAM服务下Vsftpd的验证配置文件名。因此,PAM验证将参考/etc/pam.d/下的vsftpd文件配置。
userlist_enable=YES 设为YES的时候,如果一个用户名是在userlist_file参数指定的文件中,
那么在要求他们输入密码之前,会直接拒绝他们登陆。
tcp_wrappers=YES 是否支持tcp_wrappers
  • 以下是我使用的参数,使用的是被动模式
    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
    anonymous_enable=No
    listen_port=21
    local_enable=YES
    write_enable=YES
    local_umask=022
    dirmessage_enable=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    #chown_uploads=YES
    xferlog_file=/var/log/vsftpd.log
    xferlog_std_format=YES
    async_abor_enable=YES
    ascii_upload_enable=YES
    ascii_download_enable=YES
    ftpd_banner=Welcome to blah FTP service.
    chroot_list_enable=YES
    listen=YES
    pam_service_name=vsftpd
    userlist_enable=YES
    tcp_wrappers=YES
    reverse_lookup_enable=No
    guest_enable=YES
    guest_username=vsftpd
    user_config_dir=/etc/vsftpd/vconf
    virtual_use_local_privs=YES
    pasv_min_port=9000
    pasv_max_port=9045
    chroot_local_user=YES
    chroot_list_enable=NO
    allow_writeable_chroot=YES
    #port_enable=YES
    #connect_from_port_20=YES
    pasv_enable=yes
  • 备注: 这里vsftp采用的被动模式,被动模式开放了一个端口段,公司路由器上需要开放这一个端口端,路由器端口映射

4、建立虚拟用户名单文件

编辑虚拟用户的名单:(第一行用户名。第二行密码。不能使用root)

1
2
3
4
5
6
7
[root@RAID1 ~]# vim /etc/vsftpd/xuniusers
test
23123213
test1
34dsfds
test2
df43sd

5、开始建立生成虚拟用户数据文件

这里需要安装db4,设置PAM文件权限,并制定虚拟用户数据库文件读取

1
2
3
[root@RAID1 ~]# yum –y install db4-utils
[root@RAID1 ~]# db_load -T -t hash -f /etc/vsftpd/xuniusers /etc/vsftpd/xuniusers.db
[root@RAID1 ~]# chmod 600 /etc/vsftpd/xuniusers.db

    在/etc/pam.d/vsftpd的文件头部加入以下信息(: 这里一定要在前面,不能再后面,刚开始我也加载到后面登陆的时候提示错误),修改前先备份

1
2
3
4
[root@RAID1 ~]# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
[root@RAID1 ~]# vi /etc/pam.d/vsftpd
auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/xuniusers
account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/xuniusers

img

  • : 64位的操作系统,则上面lib改为64。不然配置也会无效
1
2
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/xuniusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/xuniusers

    建立一个系统用户vsftpd,用户的主目录可以自己设置,/home/wwwroot,设置用户登陆的终端为/bin/false

1
2
3
[root@RAID1 ~]# useradd vsftpd -d /home/wwwroot -s /bin/false
[root@RAID1 ~]# chown vsftpd:vsftpd /home/wwwroot -R
[root@RAID1 ~]# chown www:www /home/wwwroot –R #如果虚拟用户的宿主用户为nginx,需要这样设置。

6、建立虚拟用户个人vsftp的配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@RAID1 ~]# mkdir /etc/vsftpd/vconf
[root@RAID1 ~]# cd /etc/vsftpd/vconf
touch test1 test2 test3 #这里创建三个虚拟用户配置文件
vi web1 #编辑用户test1配置文件,其他的跟这个配置文件类似
[root@RAID1 ~]# vim test1
local_root=/home/wwwroot/test1/
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

# chmod u-w /home/wwwroot

    最后重启vsftpd服务,不关闭Selinux可以执行以下命令通过FTP。防火墙开放端口setsebool -P ftpd_disable_trans 1
    上述配置完成后还可以通过#adduser -d /目录路径 -g vsftpd -s /sbin/nologin 用户名 这个命令来添加一个用户,不需要配置任何权限都可以进行FTP的访问,最后补充说明,需要安装的其他插件

  • 需要安装的的是pan

    1
    [root@RAID1 ~]# yum install -y pam
  • 这里我们还可以查看日志,可以根据提示的提示来判断。

    1
    [root@RAID1 ~]# cat /var/log/secure

测试用户登录虚拟用户只能看到自己本身的目录 ,不能去其他目录查看(到这里vsftpd配置结束)

: 如果这里配置的被动模式,且用的是iptables来进行对外代理提供访问,那么需要在vsftpd.conf 的配置文件里面增加一行配置: pasv_promiscuous=YES。否则用户在连接的时候会提示 425 Security: Bad IP connecting.

7. pasv_promiscuous选项参数说明

        此选项激活时,将关闭PASV模式的安全检查。该检查确保数据连接和控制连接是来自同一个IP地址。小心打开此选项。此选项唯一合理的用法是存在于由安全隧道方案构成的组织中。默认值为NO。
        合理的用法是:在一些安全隧道配置环境下,或者更好地支持FXP时(才启用它)

坚持原创技术分享,您的支持将鼓励我继续创作!
0%