阿里云搭建FTP服务器

阿里云搭建 FTP 服务器

前置条件

  • 阿里云服务器
  • vsftpd介绍

安装与配置

安装

yum install -y vsftpd

进入文件夹

cd /etc/vsftpd/

在这里插入图片描述

  • vsftpd.conf 是核心配置文件
  • ftpusers 是黑名单文件,此文件里的用户不允许访问 FTP 服务器
  • user_list 是白名单文件,是允许访问 FTP 服务器的用户列表

常用配置

#允许匿名用户登录FTP
anonymous_enable=YES
#设置匿名用户的登录目录(如需要,需自己添加并修改)
anon_root=/var/ftp/pub
#打开匿名用户的上传权限
anon_upload_enable=YES
#打开匿名用户创建目录的权限
anon_mkdir_write_enable=YES
#打开匿名用户删除和重命名的权限(如需要,需自己添加)
anon_other_write_enable=YES
#匿名用户的掩码(如需要,需自己添加,含义:如umask是022,这时创建一个权限为666的文件,文件的实际权限为666-022=644)
anon_umask=022

vsftpd安装后默认开启了匿名 FTP 的功能,使用匿名 FTP,用户无需输入用户名密码即可登录 >FTP 服务器,但没有权限修改或上传文件

配置匿名用户上传文件权限

在此之前我们先复制一份配置文件如下:

cat vsftpd.conf |grep -v "#" | grep -v "^$" > vsftpd.conf1

在这里插入图片描述

在重命名一下,这样做的原因是把没有注释的成为主配置来使用

mv vsftpd.conf vsftpd.conf2

mv vsftpd.conf1 vsftpd.conf

在这里插入图片描述

修改 vsftpd.conf 的配置文件的选项,可以赋予匿名 FTP 更多的权限。

vim /etc/vsftpd/vsftpd.conf
# 是否禁止匿名登录
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
# 是否允许登录用户的写入操作
allow_writeable_chroot=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
# 是否关闭passive的安全检测
pasv_promiscuous=YES
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30999

运行以下命令更改/var/ftp/pub目录的权限,为 FTP用户添加写权限,并重新加载配置文件

chown root /var/ftp
chmod o+w /var/ftp/pub/

systemctl restart vsftpd.service

配置本地用户登录

本地用户登录就是指用户使用 Linux 操作系统中的用户账号和密码登录 FTP 服务器

可在 ftpuser(黑名单)和 userlist(白名单)中添加用户

vsftpd 安装后默只支持匿名 FTP 登录,用户如果试图使用 Linux 操作系统中的账号登录服务器,将会被 vsftpd 拒绝,但可以在 vsftpd 里配置用户账号和密码登录。具体步骤如下:

cd /var/ftp/pub/

useradd test1
passwd test1

在这里插入图片描述

添加test1本地帐户,下面是用业查询本地帐号,及黑名单

cat /etc/passwd

在这里插入图片描述

vi /etc/vsftpd/ftpusers

在这里插入图片描述

vi /etc/vsftpd/user_list

在这里插入图片描述

Windows FTP 来登录及测试

在用Windows连接前我们先做几个配置:

服务器就可以把安全组放开21端口,不是服务器也要放开 21端口那就先执行以下命令
在这里插入图片描述

firewall-cmd --zone=public --add-port=21/tcp --permanent

firewall-cmd --zone=public --permanent --add-port=30000-30999/tcp

firewall-cmd --reload

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

坚信vsftp安装后不对/etc/vsftpd/vsftpd.conf做任何修改就可以通过新建的Linux用户(本地用户)访问下载和上传文件

匿名用户配置

修改配置文件

vim /etc/vsftpd/vsftpd.conf
# 是否禁止匿名登录
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
# 是否允许登录用户的写入操作
allow_writeable_chroot=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
# 是否关闭passive的安全检测
pasv_promiscuous=YES
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30999

重启服务器

systemctl restart vsftpd
touch /var/ftp/pub/xm.txt

chown ftp /var/ftp/pub

服务器配置上面的就可以访问并上传文件到pub目录下

虚拟用户配置

1、添加虚拟用户口令文件并生成认证文件

vim /etc/vsftpd/vuser.txt

文件格式:用户名和密码分别占两行,用户名在前。
添加虚拟用户tom和jack,密码分别为 tom123 和 jack123。

tom
tom123
jack
jack123

下载依赖和配置

yum -y install db4-utils

db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuser.db

2、编辑vsftpd的PAM认证文件

vim /etc/pam.d/vsftpd

在这里插入图片描述

#%PAM-1.0
#session    optional     pam_keyinit.so    force revoke
#auth       required    pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth       required    pam_shells.so
#auth       include     password-auth
#account    include     password-auth
#session    required     pam_loginuid.so
#session    include     password-auth
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser

3、建立本地映射用户并设置宿主目录权限

useradd -d /home/vftproot -s /sbin/nologin vuser

chmod 600 /home/vftproot/

4、修改配置文件,重启vsftpd服务,并测试

vi /etc/vsftpd/vsftpd.conf

把你之前的删除,只留现在我的

# 是否禁止匿名登录
anonymous_enable=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
# 是否允许登录用户的写入操作
allow_writeable_chroot=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
# 是否关闭passive的安全检测
pasv_promiscuous=YES
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30999
##
guest_enable=YES
guest_username=vuser

重启服务器

systemctl restart vsftpd.service

5、调整虚拟用户权限,并继续设置:到此下载可以但上传是不是行的

mkdir /home/vftproot/pub

chmod 777 /home/vftproot/pub

ll -d /home//vftproot/pub

在这里插入图片描述
在这里插入图片描述

常用命令

http://vsftpd.beasts.org/vsftpd_conf.html

介绍命令
开机自启vsftpdsystemctl enable vsftpd.service
启动vsftpdsystemctl start vsftpd.service
停止vsftpdsystemctl stop vsftpd.service
重启vsftpdsystemctl restart vsftpd.service
# 设置是否允许匿名用户登录
anonymous_enable=NO
# 匿名用户登录目录
anon_root=/home/anonymitys/

# 用户只读配置
# 设置 NO 表示用户可以浏览 FTP 目录和下载文件
anon_world_readable_only=NO

# 设置是否允许本地用户登录
local_enable=YES

# 设置本地用户目录(因为是映射到另一个用户配置目录,所以这里暂时不需要指定目录)
local_root=/home/locals/robotlab2020

# NO 不允许下载
#download_enable=NO

# 不同用户不同权限,将不同用户不同权限的配置映射到其他目录下的文件去配置
#user_config_dir=/etc/vsftpd_user_conf

# 是否允许本地用户对FTP服务器文件具有写权限,默认设置为YES允许
# 因为具体的是否有此权限调整到/etc/vsftpd_user_conf配置了,所以这里注释掉,不打开
#write_enable=YES

# 掩码,本地用户掩码默认为777,也可直接设置为缺省的022
local_umask=022

# 匿名用户是否允许上传,须将全局的write_enable=YES。默认为YES
anon_upload_enable=NO

# 是否允许匿名用户创建新文件夹
#anon_mkdir_write_enable=YES

###
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
#chown_uploads=YES
#chown_username=whoever
#xferlog_file=/var/log/xferlog
xferlog_std_format=YES
#idle_session_timeout=600
#data_connection_timeout=120
#nopriv_user=ftpsecure
#async_abor_enable=YES
###


# 是否以ASCII方式传输数据。默认情况下,服务器会忽略ASCII方式的请求。
# 启用此选项将允许服务器以ASCII方式传输数据
#ascii_upload_enable=YES
#ascii_download_enable=YES


###
#ftpd_banner=Welcome to blah FTP service.
#deny_email_enable=YES
#banned_email_file=/etc/vsftpd/banned_emails
###


# 用于指定用户列表文件中的用户是否允许切换到上级目录。默认值为 NO。
chroot_local_user=YES

# 设置是否启用 chroot_list_file 配置项指定的用户列表文件。默认值为 NO。
chroot_list_enable=NO


# 用于指定用户列表文件,该文件用于控制哪些用户 可以 切换到用户家目录的 上级目录。
#chroot_list_file=/etc/vsftpd/chroot_list

###########################
# 注:
#(1)当chroot_local_user=YES,chroot_list_enable=YES 时,在 /etc/vsftpd.chroot_list 文件中
#列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。
#(2)当 chroot_local_user=NO,chroot_list_enable=YES 时,在 /etc/vsftpd.chroot_list 文件中
#列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录。
# !!(3)当 chroot_local_user=YES, chroot_list_enable=NO 时,所有的用户均不能切换到其他目录。
#(4)当 chroot_local_user=NO, chroot_list_enable=NO 时,所有的用户均可以切换到其他目录。
###########################

#ls_recurse_enable=YES


# 是否允许监听。
# 如果设置为YES,则vsftpd将以独立模式运行,由vsftpd自己监听和处理IPv4端口的连接请求
listen=YES

# 设定是否支持IPV6。如要同时监听IPv4和IPv6端口,
# 则必须运行两套vsftpd,采用两套配置文件
# 同时确保其中有一个监听选项是被注释掉的
#listen_ipv6=YES

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

###
#控制用户访问 FTP 的文件,里面写着用户名称。一个用户名称一行。(用 userlist 来限制用户访问)
userlist_enable=YES

# 名单中的人不允许访问
# userlist_deny=no 

# 限制名单文件放置的路径
# userlist_file=/etc/vsftpd/userlist_deny.chroot

tcp_wrappers=YES

# 若设置为 YES,则使用 PASV 工作模式(被动模式);若设置为 NO,则使用 PORT 模式。默认值为 YES,即使用 PASV 工作模式。
pasv_enable=YES
# 设置 FTP 服务器在指定的 IP 地址上侦听用户的 FTP 请求。
pasv_address=<ip地址>
# 在 PASV 工作模式下,数据连接可以使用的端口范围的最小端口和最大端口,0表示任意端口。默认值为 0。
pasv_min_port=<最小端口号>
pasv_max_port=<最大端口号>


#500 OOPS: vsftpd: refusing to run with writable root inside chroot ()错误时添加
# 从 2.3.5 之后,vsftpd 增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!
# 如果检查发现还有写权限,就会报该错误。
# 要修复这个错误,可以用命令 chmod a-w /home/dgut 去除用户主目录的写权限,注意把目录替换成你自己的;
# 或者可以在 vsftpd 的配置文件中增加下列项,将值设置为 YES
allow_writeable_chroot=YES

idea连接ftp


<!-- 在maven工程 pom中导入 -->

<!--工具包-->
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.7.21</version>
</dependency>

<dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>3.8.0</version>
</dependency>

 <!---->
<dependency>
    <groupId>ant</groupId>
    <artifactId>ant-jakarta-oro</artifactId>
    <version>1.6.1</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.15</version>
</dependency>

Java 代码开始了

public class updateHootlFtp {

    public static void main(String[] args) throws IOException {
        insertFile("远程文件夹目录","test.txt");
    }    

    /**
     * @param directory   远程目录的位置
     * @param winFilePath   本地文件名称
     * @throws IOException
     */
    public static void insertFile(String directory,String winFilePath) throws IOException {
        //匿名登录(无需帐号密码的FTP服务器)
        //Ftp ftp = new Ftp("远程host", 服务端口号, "远程登录用户", "远程登录密码",Charset.forName("utf-8"));
        Ftp ftp = new Ftp("远程host", 21, "远程登录用户", "远程登录密码",Charset.forName("utf-8"));
        try {
            //启动被动模式
            ftp.setMode(FtpMode.Passive);
            //进入远程目录
            ftp.cd("/root/img/");
            //上传本地文件
            boolean flag = ftp.upload("/root/img/", FileUtil.file("E:\\Test\\"+winFilePath));

            System.err.println( flag ? "上传成功" : "上传失败!!");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //关闭连接
            ftp.close();
        }
    }

}

idea查询本地文件夹中的文件

public class WinFile {
    public static void main(String[] args) {
        //输入一个路径
        String path = "E:\\Game\\test";
        getFile(path);
        System.out.println("统计完毕");
    }
    private static void getFile(String path) {
        File f = new File(path);
        File[] fs = f.listFiles();
        if (fs == null) {
            return;
        }
        for (File file : fs) {
            //将统计的文件的字节数(单位:B)    方便计算大小
            if (file.isFile()) {
                System.out.println("文件名:" + file.getName() + ",文件大小是:" + file.length());
            } else {
                getFile(file.getAbsolutePath());
            }
        }
    }
}

#  完成

参考文献

命令详解: https://blog.csdn.net/qq_57258570/article/details/121605842

FTP连接时出现“227 Entering Passive Mode”:https://www.cnblogs.com/bkywanly/p/9767246.html

CentOS7服务器环境下vsftpd安装及配置方法:https://www.yingsoo.com/news/posts/65516.html

vsftpd 配置文件超详细讲解(常用参数配置):https://blog.csdn.net/Awwwze/article/details/109405632

227 Entering Passive Mod:https://blog.51cto.com/whnba/1619597

虚拟用户:https://blog.csdn.net/owenxiaobai/article/details/128441281

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值