avatar

目录
CentOS7下FTP安装与配置

FTP安装与配置(虚拟用户)

FTP安装与配置:https://www.inqingdao.cn/598.html

FTP解决权限不足:https://blog.csdn.net/haoxizh/article/details/41546601

FTP命令操作:https://blog.csdn.net/u012842630/article/details/100864483

FTP安装与配置【推荐】

一、安装 vsftpd

  1. 切换root用户

  2. 查看是否安装vsftp

    Code
    rpm -qa |grep vsftpd
  3. 如果没有安装,那么安装

    Code
    yum install vsftpd -y
  4. 启动vsftpd服务,以及重启命令

    Code
    systemctl start vsftpd.service		# 启动vsftpd服务
    systemctl restart vsftpd.service # 重启命令
    systemctl enable vsftpd.service # 设置开启自启
  5. 确认服务是否启动

    Code
    netstat -antup | grep ftp

    如没有安装netstat,先进行安装

    Code
    yum install -y net-tools

    结果如下,则FTP服务启动成功:

    Code
    [root@localhost ~]# netstat -antup | grep ftp
    tcp6 0 0 :::21 :::* LISTEN 1777/vsftpd

二、配置 vsftpd

  1. 修改配置文件

    Code
    vi /etc/vsftpd/vsftpd.conf

    修改以下配置参数,设置匿名用户和本地用户的登录权限,设置指定例外用户列表文件的路径,并开启监听 IPv4 sockets。

    Code
    anonymous_enable=NO							# 是否允许匿名ftp,如否则选择NO   
    local_enable=YES # 是否允许本地用户登录
    chroot_local_user=YES # 本地用户禁锢在宿主目录中
    chroot_list_enable=YES # 是否将系统用户限止在自己的home目录下
    chroot_list_file=/etc/vsftpd/chroot_list # 列出的是不chroot的用户的列表
    listen=YES

    注释 listen_ipv6=YES 配置参数,关闭监听 IPv6 sockets。

    Code
    #listen_ipv6=YES

    添加以下配置参数,开启被动模式,设置本地用户登录后所在目录,以及云服务器建立数据传输可使用的端口范围值。

    Code
    allow_writeable_chroot=YES
    pasv_enable=YES
    #pasv_address=xxx.xx.xxx.xx #如果是云服务器,请开放注释并修改为您的 Linux 云服务器公网 IP
    pasv_min_port=40000
    pasv_max_port=45000

    # 设置本地用户登录后所在的目录。默认配置文件中没有设置该项,此时用户登录FTP服务器后,所在的目录为该用户的主目录,对于root用户,则为/root目录。
    local_root=/var/ftp
    # 设置匿名用户登录后所在的目录。若未指定,则默认为/var/ftp目录。
    anon_root=/var/ftp/pub

    可选配置

    Code
    # 所有用户禁止下载
    download_enable=NO
  2. 创建并编辑 chroot_list 文件

    如果希望某个用户可以访问根目录,不受限于自己的目录,把用户名加入.

    Code
    vi /etc/vsftpd/chroot_list

    输入 :wq 退出文件

  3. 重启FTP服务器

    Code
    systemctl restart vsftpd.service

三、创建用户

  1. 创建一个组,用于存放ftp用户

    Code
    groupadd ftpgroups
  2. 在 /home 目录下创建一个ftp目录专门存放ftp用户

    Code
    mkdir /home/ftp
  3. 创建ftp用户,并加入ftpgroups组

    Code
    useradd -d /home/ftp/ftpuser1 -g ftpgroups ftpuser1
  4. 设置密码(这里作为测试就取:111)

    Code
    passwd ftpuser1
  5. 设置不允许用于用户登录

    Code
    usermod -s /sbin/nologin ftpuser1

四、防火墙设置

如果是再云服务器上搭建的话,防火墙默认没开,所以只要配置安全组,开放21端口,和40000-45000端口即可。

  1. 方式一:部分端口开放

    Code
    firewall-cmd --zone=public --add-service=ftp --permanent
    firewall-cmd --zone=public --add-port=21/tcp --permanent
    firewall-cmd --zone=public --add-port=40000-45000/tcp --permanent
    firewall-cmd --reload
  2. 方式二:关闭防火墙

    Code
    systemctl stop firewalld.service #停止firewall
    systemctl disable firewalld.service #禁止firewall开机启动
    firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)

五、修改Selinux

如果是云服务器,这个默认没有开启。因此不用设置。直接跳过。

【1、2部先跳过,后面再次搭建的时候好像不用配置,最后还是不行的时候再来执行】

  1. 修改Selinux文件

    Code
    vi /etc/selinux/config

    修改:SELINUX=disabled

  2. 重启服务

    Code
    systemctl restart vsftpd.service
  3. 如果上面配置后,还是不能登录

    Code
    getsebool -a | grep ftp

    结果:

    Code
    ftpd_anon_write --> off
    ftpd_connect_all_unreserved --> off
    ftpd_connect_db --> off
    ftpd_full_access --> off # 开启
    ftpd_use_cifs --> off
    ftpd_use_fusefs --> off
    ftpd_use_nfs --> off
    ftpd_use_passive_mode --> off
    httpd_can_connect_ftp --> off
    httpd_enable_ftp_server --> off
    tftp_anon_write --> off
    tftp_home_dir --> off # 开启

    开启上面2个:

    Code
    setsebool tftp_home_dir 1
    setsebool ftpd_full_access 1
    # 查看是否开启成功
    getsebool -a | grep ftp

六、登录

Code
C:\Users\XXX>ftp 192.168.174.50
连接到 192.168.174.50。
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
用户(192.168.174.50:(none)): ftpuser1
331 Please specify the password.
密码:
230 Login successful.
ftp>

如果这里显示 530 Login incorrect.

注释 /etc/pam.d/vsftpd 文件里的这一行, 在前面加 # 号:

Code
#auth       required    pam_shells.so

然后重启

Code
systemctl restart vsftpd.service

七、有效用户配置

如果上面的配置还不能进行登录的话,可以进行如下操作(可以就跳过):

ftp会根据/etc/shells这个文件来判断一个用户是否是有效用户,会阻止那些shell不在/etc/shells里的用户登陆.

所以如果ftp用户的登录shell为/sbin/nologin 则

Code
vi /etc/shells
Code
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/sbin/nologin # 新增

八、其他操作

8.1 不受限目录用户设置

  1. 按第三节再创建一个用户 ftpuser2

  2. 添加不受限用户

    Code
    vim /etc/vsftpd/chroot_list

    添加用户名,一行一个名字

    Code
    ftpuser2
    :wq
  3. 验证是否成功

    Code
    C:\Users\BoWenWang>ftp 192.168.174.50
    连接到 192.168.174.50。
    220 (vsFTPd 3.0.2)
    200 Always in UTF8 mode.
    用户(192.168.174.50:(none)): ftpuser2
    331 Please specify the password.
    密码:
    230 Login successful.
    ftp>
    ftp> cd /
    250 Directory successfully changed.
    ftp> ls
    200 PORT command successful. Consider using PASV.
    150 Here comes the directory listing.
    bin
    boot
    dev
    etc
    home
    lib
    lib64
    media
    mnt
    opt
    proc
    root
    run
    sbin
    srv
    sys
    tmp
    usr
    var
    226 Directory send OK.
    ftp: 收到 107 字节,用时 0.03秒 3.82千字节/秒。
    ftp> put D:\tmp\1.txt
    200 PORT command successful. Consider using PASV.
    553 Could not create file.
    ftp>

    可以看到,虽然说可以访问到根目录,但是没有权限的话,还是不能进行操作!

    Code
    ftp> cd ~
    250 Directory successfully changed.
    ftp> ls
    200 PORT command successful. Consider using PASV.
    150 Here comes the directory listing.
    226 Directory send OK.
    ftp> put D:\tmp\1.txt
    200 PORT command successful. Consider using PASV.
    150 Ok to send data.
    226 Transfer complete.
    ftp>
    ftp> get 1.txt D:\tmp\ttttttt.txt
    200 PORT command successful. Consider using PASV.
    150 Opening BINARY mode data connection for 1.txt (0 bytes).
    226 Transfer complete.
    ftp>
    Code
    [root@localhost ftpuser2]# ll
    total 0
    -rw-r--r--. 1 ftpuser2 ftpgroups 0 Mar 12 11:06 1.txt

    可以在自己的目录下上传,下载文件。

8.2 设置匿名登录访问公共目录

在拥有用户名登录的同时,也有公共的匿名登录,进行文件共享,那么可以进行如下设置:

Code
vi /etc/vsftpd/vsftpd.conf

修改如下地方:

Code
anonymous_enable=YES

# 设置匿名用户登录后所在的目录。若未指定,则默认为/var/ftp目录。(该属性需要自己添加)
anon_root=/var/ftp/pub

重启FTP服务

Code
systemctl restart vsftpd.service

通过WEB或者文件资源管理器,查看:

在地址栏输入(你自己的服务器IP) ftp://192.168.174.50/

avatar

avatar

匿名用户试图修改文件:

avatar

8.3 添加用户允许在公共目录上传文件

  1. 再添加一个用户 ftpuser3

    Code
    useradd -d /var/ftp/pub -g ftpgroups ftpuser3
    passwd ftpuser3
    usermod -s /sbin/nologin ftpuser3
  2. 如果是将已有用户的主目录改为公共目录

    Code
    usermod -d /var/ftp/pub ftpwbw
    systemctl restart vsftpd.service
  3. 更改公共目录所有者(或者添加一个管理组也可以,原理一样就是权限更改)

    Code
    [root@localhost ftp]# chown -R ftpuser3 pub
    [root@localhost ftp]# ll
    total 0
    drwxr-xr-x. 2 ftpuser3 root 21 Mar 12 11:20 pub
  4. 测试效果

    查看文件列表,确定该用户家目录为公共目录。

    Code
    C:\Users\BoWenWang>ftp 192.168.174.50
    连接到 192.168.174.50。
    220 (vsFTPd 3.0.2)
    200 Always in UTF8 mode.
    用户(192.168.174.50:(none)): ftpuser3
    331 Please specify the password.
    密码:
    230 Login successful.
    ftp> ls
    200 PORT command successful. Consider using PASV.
    150 Here comes the directory listing.
    pub.txt
    226 Directory send OK.
    ftp: 收到 12 字节,用时 0.00秒 12.00千字节/秒。
    ftp> ls
    200 PORT command successful. Consider using PASV.
    150 Here comes the directory listing.
    pub.txt
    226 Directory send OK.
    ftp: 收到 12 字节,用时 0.00秒 12.00千字节/秒。

    创建文件夹、上传一个文件

    Code
    ftp> mkdir admin
    257 "/admin" created
    ftp> cd admin
    250 Directory successfully changed.
    ftp> put D:\tmp\1.txt
    200 PORT command successful. Consider using PASV.
    150 Ok to send data.
    226 Transfer complete.
    ftp>

    通过WEB查看

    avatar

    通过文件资源管理器,发现匿名用户依旧无法修改文件。

    接着用ftpuser3进行操作,重命名成功:

    avatar

avatar

文章作者: IT小王
文章链接: https://wangbowen.cn/2020/03/11/CentOS7%E4%B8%8BFTP%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AE/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 IT小王

评论