如何在Ubuntu上搭建FTP服务器

//我使用的Ubuntu版本:19.10

Ubuntu自带了一个FTP服务器,叫做vsftpd (Very Safe FTP),安装起来很方便,所以这里我将使用vsftpd来作演示。

STEP 1:安装vsftpd

sudo apt update
sudo apt install vsftpd

STEP 2:新建FTP专用用户

如果想要给FTP服务器设置用户名和密码,就需要新建一个用户。FTP的登陆账号和密码就是该用户的账号和密码。

一个FTP服务器可以有多个账号,不同账号的访问权限还可以不一样。

//注:其实并不是必须新建一个FTP专用的用户,可以使用已有的用户。但是这样会造成很大的安全隐患,所以不建议这么做。

创建用户文件夹:

sudo mkdir /home/EFtp

这是用户文件夹,以后还会用来存储FTP服务器的文件。文件夹的名字应与用户名保持一致。

//注:我的FTP用户名是EFtp,这个名字可以按照个人喜好设置,没必要跟我的一样。如果要使用你自己的用户名,请把本教程的所有EFtp改成你自己的用户名(已经被我用红色勾了出来)。

设置文件夹权限:

sudo chmod 777 -R /home/EFtp

777:开启全部权限。

-R:将子文件和子文件夹一同设置。

创建用户:

sudo useradd -d /home/EFtp -m EFtp

-d:设置用户文件夹

-m:设置用户名

设置密码:

sudo passwd EFtp

然后根据提示设置密码。

注意,输入密码的过程中,密码不会显示出来。

STEP 3:配置vsftpd

打开配置文件:

sudo vim /etc/vsftpd.conf

更改为这样(需要注意的行用绿色表示了出来):

  1 # Example config file /etc/vsftpd.conf
  2 #
  3 # The default compiled in settings are fairly paranoid. This sample file
  4 # loosens things up a bit, to make the ftp daemon more usable.
  5 # Please see vsftpd.conf.5 for all compiled in defaults.
  6 #
  7 # READ THIS: This example file is NOT an exhaustive list of vsftpd options.
  8 # Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
  9 # capabilities.
 10 #
 11 #
 12 # Run standalone?  vsftpd can run either from an inetd or as a standalone
 13 # daemon started from an initscript.
 14 listen=NO
 15 #
 16 # This directive enables listening on IPv6 sockets. By default, listening
 17 # on the IPv6 "any" address (::) will accept connections from both IPv6
 18 # and IPv4 clients. It is not necessary to listen on *both* IPv4 and IPv6
 19 # sockets. If you want that (perhaps because you want to listen on specific
 20 # addresses) then you must run two copies of vsftpd with two configuration
 21 # files.
 22 listen_ipv6=YES
 23 #
 24 # Allow anonymous FTP? (Disabled by default).
 25 anonymous_enable=NO
 26 #
 27 # Uncomment this to allow local users to log in.
 28 local_enable=YES
 29 #
 30 # Uncomment this to enable any form of FTP write command.
 31 write_enable=YES
 32 #
 33 # Default umask for local users is 077. You may wish to change this to 022,
 34 # if your users expect that (022 is used by most other ftpd's)
 35 #local_umask=002
 36 #
 37 # Uncomment this to allow the anonymous FTP user to upload files. This only
 38 # has an effect if the above global write enable is activated. Also, you wil    l
 39 # obviously need to create a directory writable by the FTP user.
 40 #anon_upload_enable=YES
 41 #
 42 # Uncomment this if you want the anonymous FTP user to be able to create
 43 # new directories.
 44 #anon_mkdir_write_enable=YES
 45 #
 46 # Activate directory messages - messages given to remote users when they
 47 # go into a certain directory.
 48 dirmessage_enable=YES
 49 #
 50 # If enabled, vsftpd will display directory listings with the time
 51 # in  your  local  time  zone.  The default is to display GMT. The
 52 # times returned by the MDTM FTP command are also affected by this
 53 # option.
 54 use_localtime=YES
 55 #
 56 # Activate logging of uploads/downloads.
 57 xferlog_enable=YES
 58 #
 59 # Make sure PORT transfer connections originate from port 20 (ftp-data).
 60 connect_from_port_20=YES
 61 #
 62 # If you want, you can arrange for uploaded anonymous files to be owned by
 63 # a different user. Note! Using "root" for uploaded files is not
 64 # recommended!
 65 #chown_uploads=YES
 66 #chown_username=whoever
 67 #
 68 # You may override where the log file goes if you like. The default is shown
 69 # below.
 70 #xferlog_file=/var/log/vsftpd.log
 71 #
 72 # If you want, you can have your log file in standard ftpd xferlog format.
 73 # Note that the default log file location is /var/log/xferlog in this case.
 74 #xferlog_std_format=YES
 75 #
 76 # You may change the default value for timing out an idle session.
 77 #idle_session_timeout=600
 78 #
 79 # You may change the default value for timing out a data connection.
 80 #data_connection_timeout=120
 81 #
 82 # It is recommended that you define on your system a unique user which the
 83 # ftp server can use as a totally isolated and unprivileged user.
 84 #nopriv_user=ftpsecure
 85 #
 86 # Enable this and the server will recognise asynchronous ABOR requests. Not
 87 # recommended for security (the code is non-trivial). Not enabling it,
 88 # however, may confuse older FTP clients.
 89 #async_abor_enable=YES
 90 #
 91 # By default the server will pretend to allow ASCII mode but in fact ignore
 92 # the request. Turn on the below options to have the server actually do ASCII
 93 # mangling on files when in ASCII mode.
 94 # Beware that on some FTP servers, ASCII support allows a denial of service
 95 # attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
 96 # predicted this attack and has always been safe, reporting the size of the
 97 # raw file.
 98 # ASCII mangling is a horrible feature of the protocol.
 99 #ascii_upload_enable=YES
100 #ascii_download_enable=YES
101 #
102 # You may fully customise the login banner string:
103 #ftpd_banner=Welcome to blah FTP service.
104 #
105 # You may specify a file of disallowed anonymous e-mail addresses. Apparently
106 # useful for combatting certain DoS attacks.
107 #deny_email_enable=YES
108 # (default follows)
109 #banned_email_file=/etc/vsftpd.banned_emails
110 #
111 # You may restrict local users to their home directories.  See the FAQ for
112 # the possible risks in this before using chroot_local_user or
113 # chroot_list_enable below.
114 #chroot_local_user=YES
115 #
116 # You may specify an explicit list of local users to chroot() to their home
117 # directory. If chroot_local_user is YES, then this list becomes a list of
118 # users to NOT chroot().
119 # (Warning! chroot'ing can be very dangerous. If using chroot, make sure that
120 # the user does not have write access to the top level directory within the
121 # chroot)
122 chroot_local_user=YES
123 chroot_list_enable=YES
124 # (default follows)
125 chroot_list_file=/etc/vsftpd.chroot_list
126 #
127 # You may activate the "-R" option to the builtin ls. This is disabled by
128 # default to avoid remote users being able to cause excessive I/O on large
129 # sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
130 # the presence of the "-R" option, so there is a strong case for enabling it.
131 #ls_recurse_enable=YES
132 #
133 # Customization
134 #
135 # Some of vsftpd's settings don't fit the filesystem layout by
136 # default.
137 #
138 # This option should be the name of a directory which is empty.  Also, the
139 # directory should not be writable by the ftp user. This directory is used
140 # as a secure chroot() jail at times vsftpd does not require filesystem
141 # access.
142 secure_chroot_dir=/var/run/vsftpd/empty
143 #
144 # This string is the name of the PAM service vsftpd will use.
145 pam_service_name=vsftpd
146 #
147 # This option specifies the location of the RSA certificate to use for SSL
148 # encrypted connections.
149 rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
150 rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
151 ssl_enable=NO
152 
153 #
154 # Uncomment this to indicate that vsftpd use a utf8 filesystem.
155 #utf8_filesystem=YES
156 #Set default directory
157 local_root=/home/EFtp

注意:最后两行原文中是没有的,需要自己添加上去。

//再次提醒:把157行的EFtp改成你自己创建的FTP专用用户名。

保存,退出文件。

运行命令:

sudo vim /etc/vsftpd.chroot_list

在新建的文件中输入允许访问FTP服务器的用户名(一行一个)。这里我就写的是:

EFtp

保存,退出文件。

打开最后一个需要更改的文件:

sudo vim /etc/pam.d/vsftpd

更改为如下(需要注意的行号已经标出。其他的地方有区别的话尽量不要管,只改我标出来的行):

  1 # Standard behaviour for ftpd(8).
  2 auth    required    pam_listfile.so item=user sense=deny file=/etc/EFtp onerr=succeed
  3 
  4 # Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.
  5 
  6 # Standard pam includes
  7 @include common-account
  8 @include common-session
  9 @include common-auth
 10 auth    required    pam_shells.so item=user sense=deny file=/etc/EFtp onerr=succeed

 保存,退出。

最后,重启一遍vsftpd服务

sudo service vsftpd restart

至此,FTP服务器已经配置成功,可以使用。

所有FTP服务器的文件会被存在/home/EFtp文件夹下

ps: 如果有什么错误发生,请在留言区提问,谢谢!

原文地址:https://www.cnblogs.com/starchenzyme/p/12723383.html