Linux FTP 实战之vsftpd安装记录

目录大纲

  • 1.安装
  • 2.vsftpd 配置文件
  • 3.配置本地用户登录
    • 3.1.修改后的主配置
    • 3.2.添加FTP用户
    • 3.3.遇到的错误

流程:
7.jpg

系统环境:CentOS 6.8
这里目标是:搭建本地用户登录 FTP

1.安装

1
[root@ecloud ~]# yum install vsftpd -y

2.vsftpd配置文件

1
2
3
4
5
6
[root@ecloud ~]# ls /etc/vsftpd/
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh

# ftpusers:禁止登录 FTP 的用户
# user_list:允许或者是不允许登录 ftp 的用户,默认是不允许,配置添加 userlist_deny=NO,就变成允许了。
# vsftpd.conf:vsftpd 的主配置文件
  • 主配置的默认配置
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    [root@ecloud ~]# grep -v "#" /etc/vsftpd/vsftpd.conf
    anonymous_enable=YES # 允许匿名用户
    local_enable=YES # 允许本地用户登录
    write_enable=YES # 允许 ftp 用户写入数据
    local_umask=022 # 设置创建文件的默认权限掩码
    dirmessage_enable=YES # 启用消息提示
    xferlog_enable=YES
    connect_from_port_20=YES # 通过 20 端口传输数据
    xferlog_std_format=YES
    listen=YES

    pam_service_name=vsftpd
    userlist_enable=YES
    tcp_wrappers=YES
    [root@ecloud ~]#

3.配置本地用户登录

3.1.修改后的主配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@ecloud ~]# grep -v "#" /etc/vsftpd/vsftpd.conf 
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list # 这个文件里的用户,只能查看自己的家目录。
listen=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
userlist_deny=NO # 添加这项参数,user_list里面的用户就是允许登录啦。
pasv_min_port=2230 # 指定使用的端口,方便添加 iptables 防火墙规则
pasv_max_port=2240

3.2.添加FTP用户

  • 添加用户,修改权限

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    [root@ecloud ~]# useradd ftpwww
    You have new mail in /var/spool/mail/root
    [root@ecloud ~]# useradd ftpconf
    [root@ecloud ~]# passwd ftpwww
    Changing password for user ftpwww.
    New password:
    Retype new password:
    passwd: all authentication tokens updated successfully.
    [root@ecloud ~]# passwd ftpconf
    Changing password for user ftpconf.
    New password:
    Retype new password:
    passwd: all authentication tokens updated successfully.
    [root@ecloud ~]#
    # 修改用户家目录,可能 FTP 用户默认的家目录,不是你想控制的,那就改改呗。
    [root@ecloud ~]# usermod -d /server/www ftpwww
    [root@ecloud ~]# usermod -d /server/nginx/conf/vhost/ ftpconf
    [root@ecloud ~]# chown -R ftpwww.ftpwww /server/www
    [root@ecloud ~]# chown -R ftpconf.ftpconf /server/nginx/conf/vhost/
    # 可能允许 nginx php 的是 www 用户,还要给 www 权限,所以把 www 弄到组里,通过组给权限
    [root@ecloud ~]# usermod -G www ftpwww
    [root@ecloud ~]# usermod -G www ftpconf
  • 追加用户到可登录文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [root@ecloud ~]# cat /etc/vsftpd/user_list
    # vsftpd userlist
    # If userlist_deny=NO, only allow users in this file
    # If userlist_deny=YES (default), never allow users in this file, and
    # do not even prompt for a password.
    # Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
    # for users that are denied.
    ftpwww
    ftpconf
  • 添加 iptables 防火墙规则
    我的防火墙默认策略动作是 ACCEPT,最后一条规则是拒绝所有,应该这样添加:

    1
    2
    3
    [root@ecloud ~]# iptables -I INPUT -p tcp -m tcp --dport 21 -j ACCEPT
    [root@ecloud ~]# iptables -I INPUT -p tcp -m tcp --dport 20 -j ACCEPT
    [root@ecloud ~]# iptables -I INPUT -p tcp -m tcp --dport 2230:2240 -j ACCEPT

如果默认策略是 DROP。那 用 -I 或者是 -A 添加都可以。

3.3.遇到的错误

登录 FTP 的时候报错:响应: 500 OOPS: cannot change directory

  • 解决方法:

    1
    2
    3
    4
    [root@ecloud ~]# setsebool ftp_home_dir on
    [root@ecloud ~]# service vsftpd restart
    Shutting down vsftpd: [ OK ]
    Starting vsftpd for vsftpd:
  • 或者是,更暴力的,直接关了selinux

    1
    2
    3
    [root@ecloud ~]# setenforce 0    # 关了,当前生效,不用重启
    [root@ecloud ~]# grep "SELINUX=di" /etc/selinux/config # 修改配置,设置为disabled,重启后生效
    SELINUX=disabled

ok, 在电脑上安装一个 FTP 客户端(比如 xftp、 fliezilla),填上信息,就可以连接登陆 FTP了。

The End!

文章目录
  1. 目录大纲
  2. 1.安装
  3. 2.vsftpd配置文件
  4. 3.配置本地用户登录
    1. 3.1.修改后的主配置
    2. 3.2.添加FTP用户
    3. 3.3.遇到的错误