唐新国 發表於 2020-2-12 22:02:00

Linux ftp服务器部署(最简单的ftp教程)

<svg xmlns="http://www.w3.org/2000/svg" style="display: none">
                        <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0)"></path>
                  </svg>
                                          <br>
<p>之前在阿里云领了一个ECS服务器(顺便说一句,白嫖的🤣,真香~),就想着做点什么,然后试着做个 ftp 站点,因为第一次尝试,结果走了不少弯路。最后终于完成了,研究了两天(哎~,😭脑壳笨没办法)就想着记录下来,于是有了这篇博客,按照下面的步骤操作,快速部署好你的 ftp 站点。</p>
<h4>配置 ftp 站点步骤:</h4>
<h5>1. 安装 vsftpd 服务</h5>
<h5>2. 配置 vsftpd.conf 文件</h5>
<ul>
<li>
<h5>全局配置</h5>
</li>
<li>
<h5>匿名用户</h5>
</li>
<li>
<h5>本地用户</h5>
</li>
</ul>
<h5>3.虚拟用户</h5>
<ul>
<li>
<h5>创建用户名单</h5>
</li>
<li>
<h5>配置 vsftpd.conf</h5>
</li>
<li>
<h5>配置虚拟用户权限</h5>
</li>
</ul>
<h5>4. 开放端口规则</h5>
<h5>5. 重启 vsftpd 服务</h5>
<ul>
<li>
<h5>测试</h5>
</li>
</ul>
<p>配置文件测试可用,可以直接复制 vsftpd.conf 的内容。整个部署稍稍复杂点的是配置虚拟用户的步骤,除此之外,其他没什么难度。部署好ftp 之后,手机、Windows、Linux之间再无隔阂,文件互传啥轻松的不要不要的。废话不多说,下面让我们开始教程:</p>
<p>ps:按照我的教程部署,如果无法访问ftp,可能时由于 防火墙 或者 selinux 的原因。因为我的服务器默认没有开启防火墙和selinux,所以省下了许多麻烦。😋😋😋,可以尝试关闭防火墙和selinux再尝试。<br>
<br></p>
<hr>
<p>这里测试的服务器用的阿里的Linux centos 7 系统。</p>
<div id="安装">
</div><h3>1、安装 vsftpd</h3>
<h5>1.1 安装 vsftpd</h5>
<pre><code class="prism language-bash">yum <span class="token function">install</span> vsftpd -y
-y 参数表示全部默认 yes,不用手动确认。
</code></pre>
<h5>1.2 启动 vsftpd 并设置为开机自启</h5>
<pre><code class="prism language-bash">systemctl start vsftpd                <span class="token comment"># 开启vsftpd服务,或者用 service vsftpd start 命令</span>
systemctl <span class="token function">enable</span> vsftpd                <span class="token comment"># 设置为开机自启动</span>
</code></pre>
<p>检查是否成功设置为开机自启(这一步无所谓)</p>
<pre><code class="prism language-bash">systemctl list-unit-files <span class="token operator">|</span> <span class="token function">grep</span> vsftpd   <span class="token comment"># systemctl list-unit-files 用于列出所有配置文件</span>
<span class="token comment"># 输出 enable 表示开机自启 </span>
vsftpd.service                              enabled

<span class="token comment"># 另外,chkconfig --list 命令也可以查看开机自启信息</span>
<span class="token comment"># chkconfig 命令用于检查,设置系统的各种服务</span>
<span class="token comment">#chkconfig --add vsfptd   # --add  增加所指定的系统服务,让chkconfig指令得以管理它</span>
<span class="token function">chkconfig</span> vsftpd on   <span class="token comment"># 设置自动启动 vsftpd </span>
<span class="token function">chkconfig</span> --list vsftpd   <span class="token comment"># 列出chkconfig--list所知道的所有的服务的情况 </span>
<span class="token comment"># 输出 1—6为系统运行级别:0 关机 1 单用户 2 无网络多用户 3 有网络多用户 4 保留(不可用) 5 图形界面多用户(stratx) 6 重启 ,可以通过 init 5(0/1/2/3/4/5/6) 命令切换</span>
<span class="token comment"># 2 3 5 为可工作的状态,都为on则表示在该系统运行级别下会自启</span>
vsftpd          0:off   1:off   2:on    3:on    4:on    5:on    6:off
</code></pre>
<div id="配置">
</div><h3>2、配置 vsftpd 文件</h3>
<h5>基础知识</h5>
<p>本来想写个傻瓜式教程的,结果BB的太多。说了是傻瓜教程就不涉及太多内容,但基础的知识还是要知道一点的。<br>
ftp 有两种模式,分别是主动模式,和被动模式。ftp 占用两个端口,21端口用于连接,20端口用于传输数据。</p>
<ul>
<li>主动模式:客户端告诉服务器自己监听的端口(随机端口&gt;1024),从而服务器主动连接客户端。连接成功后(用户登录成功),客户端的随机端口 与 服务器的20端口 传输数据。</li>
<li>被动模式:客户端告诉服务器自己处于被动模式,服务器告诉客户端自己正在监听的端口(随机端口&gt;1024),从而客户端去连接服务端。</li>
</ul>
<p>正如这两种模式的名字一样,主动模式就是服务器主动去连接客户端,被动模式就是客户端被动的连接服务端。由于我的服务器是在同一个 ip 下多台服务器共享的,让服务器找客户端不太方便,这里我用的是被动模式。</p>
<p>在安装好 vsftpd 后,会有 一个 /etc/vsftpd 目录,在此目录中都是与 vsftpd 配置有关的。</p>
<p><img src="https://img-blog.csdnimg.cn/20200212152532307.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxOTkzMg==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"><br>
——图片为 /etc/vsftpd/ 目录下的文件</p>

<table>
<thead>
<tr>
<th>/etc/vsftpd/ 目录下相关文件</th>
<th>简介</th>
</tr>
</thead>
<tbody>
<tr>
<td>/etc/vsftpd/vsftpd.conf</td>
<td>主配置文件:配置匿名用用户,本地用户,连接方式等</td>
</tr>
<tr>
<td>/etc/pam.d/vsftpd</td>
<td>PAM认证文件,在设置虚拟用户时会用到</td>
</tr>
<tr>
<td>/usr/sbin/vsftpd</td>
<td>vsftpd 程序</td>
</tr>
<tr>
<td>/etc/vsftpd/ftpusers</td>
<td>用户黑名单,只是用户黑名单,不受任何参数限制</td>
</tr>
<tr>
<td>/etc/vsftpd/user_list</td>
<td>用户名单,根据具体设置决定是黑名单还是白名单</td>
</tr>
<tr>
<td>/var/ftp</td>
<td>匿名用户主目录,不是绝对,比如本教程中把匿名用户设置在了/srv/ftp/anyone/</td>
</tr>
<tr>
<td>chroot_list</td>
<td><mark>自建</mark>用户名单,根据具体设置决定是白名单还是黑名单,在本教程中用作允许用户向上切换目录的用户名单</td>
</tr>
<tr>
<td>loguser.txt</td>
<td><mark>自建</mark>的虚拟用户用户名与密码文件,通过 db4 工具加密为数据库后使用</td>
</tr>
<tr>
<td>vsftpd_login.db</td>
<td><mark>自建</mark>的用户名与密码数据库,由loguser.txt 加密而来</td>
</tr>
<tr>
<td>vsftp_user.conf</td>
<td><mark>自建</mark>的虚拟用户配置文件家目录,在该目录下以用户名命名的文件为该用户的配置文件</td>
</tr>
</tbody>
</table><p>注:表中标有自建的均需要在 <code>/etc/vsftpd/vsftpd.conf</code> 主配置文件中指定。</p>
<p>配置后效果:<br>
匿名用户:下载功能 根目录:/srv/ftp/anyone<br>
本地用户:拥有创建、删除、上传、下载功能根目录:/srv/ftp<br>
虚拟用户:拥有上传、下载功能 (管理员拥有删除功能)             根目录:/srv/ftp/myftp</p>
<p>匿名用户只可访问特定的目录,仅有下载的功能。<br>
本地用户可以访问 /srv/ftp 下所有目录,并且具有所有权限(上传、下载、修改、删除等)<br>
虚拟用户可以上传,但是不可以修改文件(管理员可以)</p>
<div id="全局">
</div><h4>2.1、全局基本配置</h4>
<p>vsftpd 的配置文件用 “#” 注释,并且一定要注意,不要有多余的空格。修改前记得备份。</p>
<p>/etc/vsftpd/vsftpd.conf 文件</p>
<pre><code class="prism language-bash"><span class="token comment"># ************* 全局配置 ********************************************</span>
<span class="token comment"># 是否允许监听。</span>
<span class="token comment"># 如果设置为YES,则vsftpd将以独立模式运行,由vsftpd自己监听和处理IPv4端口的连接请求</span>
listen<span class="token operator">=</span>YES
<span class="token comment"># 监听 ipv6 注释掉,或者设置为 NO</span>
<span class="token comment">#listen_ipv6=NO</span>

<span class="token comment">#                                 * 日志有关 *</span>
<span class="token comment"># 当用户进入某个目录时,会显示该目录需要注意的内容,显示的档案默认是 `.message` ,你可以使用message_file=.message 设置来修改。</span>
dirmessage_enable<span class="token operator">=</span>YES
<span class="token comment"># 默认情况该日志文件为/var/log/vsftpd.log,也可以通过下面的xferlog_file选项对其进行设定</span>
xferlog_enable<span class="token operator">=</span>YES
<span class="token comment"># 启用xferlog默认保存路径 xferlog_file=/var/log/xferlog</span>
xferlog_std_format<span class="token operator">=</span>YES
<span class="token comment"># 启用双份日志。在用xferlog文件记录服务器上传下载情况的同时, # vsftpd_log_file所指定的文件,即/var/log/vsftpd.log也将用来记录服务器的传输情况</span>
<span class="token comment">#dual_log_enable=YES </span>
<span class="token comment">#vsftpd_log_file=/var/log/vsftpd.log</span>

<span class="token comment">#                               * 连接有关 *</span>
<span class="token comment"># 可以更改默认值以超时空闲会话</span>
<span class="token comment">#idle_session_timeout=600</span>
<span class="token comment"># 可以更改数据连接超时的默认值</span>
<span class="token comment">#data_connection_timeout=120</span>
<span class="token comment"># 启用此功能服务器能够识别异步ABOR请求</span>
<span class="token comment">#async_abor_enable=YES</span>
<span class="token comment"># linux中一个安全机制,一定程度上限制某种服务的访问权限,达到了保护系统的目的</span>
tcp_wrappers<span class="token operator">=</span>YES

<span class="token comment">#                              * 传输有关 *</span>
<span class="token comment"># 确保PORT传输连接来自端口20</span>
connect_from_port_20<span class="token operator">=</span>YES

<span class="token comment">#大多数FTP服务器都选择用ASCII方式传输数据,实现用ASCII方式上传和下载文件</span>
<span class="token comment">#允许上传</span>
ascii_upload_enable<span class="token operator">=</span>YES
<span class="token comment">#允许下载,ascii模式</span>
ascii_download_enable<span class="token operator">=</span>YES
<span class="token comment">#只允许访问自身目录</span>
allow_writeable_chroot<span class="token operator">=</span>YES

<span class="token comment">#                                  * 重要设置 *</span>
<span class="token comment">#开启被动模式</span>
pasv_enable<span class="token operator">=</span>YES
<span class="token comment"># Linux 云服务器公网 IP</span>
pasv_address<span class="token operator">=</span>xx.xx.xx.xxx
<span class="token comment">#允许最小端口分配PASV方式数据连接。你可以定义一个端口范围允许通过防火墙</span>
pasv_min_port<span class="token operator">=</span>40000
<span class="token comment">#允许最大端口分配PASV方式数据连接。你可以定义一个窄的端口范围允许通过防火墙</span>
pasv_max_port<span class="token operator">=</span>50000
<span class="token comment">#          注意;记得开启服务器的端口,21端口和min_port/max_port端口</span>
<span class="token comment">#          min_port/max_port可以参考这篇博客,也可以自己设置,比如 5000~6000也是可以的</span>

<span class="token comment"># 附加内容,可以适当了解</span>
<span class="token comment"># ftpusers和user_list 详解</span>
<span class="token comment"># ftpusers不受任何配制项的影响,它总是有效,它是一个黑名单,</span>
<span class="token comment"># user_list:</span>
<span class="token comment"># 1、userlist_enable和userlist_deny两个选项联合起来针对的是:本地全体用户(除去ftpusers中的用户)</span>
<span class="token comment">#    和出现在user_list文件中的用户以及不在在user_list文件中的用户这三类用户集合进行的设置</span>
<span class="token comment"># 2、当且仅当userlist_enable=YES时:userlist_deny项的配置才有效,user_list文件才会被使用</span>
<span class="token comment">#    当其为NO时,无论userlist_deny项为何值都是无效的,本地全体用户(除去ftpusers中的用户)都可以登入FTP</span>
<span class="token comment"># 3、当userlist_enable=YES时,userlist_deny=YES时:user_list是一个黑名单,即:所有出现在名单中的用户都会被拒绝登入;</span>
<span class="token comment"># 4、当userlist_enable=YES时,userlist_deny=NO时:user_list是一个白名单,即:只有出现在名单中的用户才会被准许登入(user_list之外的用户都被拒绝登入);</span>
<span class="token comment"># 注意:使用白名单后,匿名用户将无法登入!除非显式在user_list中加入一行:anonymous</span>
userlist_enable<span class="token operator">=</span>YES
</code></pre>
<p>上述为基本配置,经过本博主测试可用的。可以直接复制使用。此外,以上只是基础配置,在该文件中还应加入匿名用户或本地用户的相关配置。</p>
<div id="匿名">
</div><h4>2.2、匿名用户配置</h4>
<p>在上述配置文件的末尾添加上如下配置即可。当然,如果不想让匿名用户登录的话,只需要一句 <code>anonymous_enable=NO</code> 即可。</p>
<p>/etc/vsftpd/vsftpd.conf 文件</p>
<pre><code class="prism language-bash"><span class="token comment"># ************* 匿名用户 ********************************************</span>
<span class="token comment"># 允许匿名用户登录</span>
anonymous_enable<span class="token operator">=</span>YES
<span class="token comment"># 匿名用户login时不询问口令</span>
no_anon_password<span class="token operator">=</span>YES
<span class="token comment"># 匿名用户主目录               ***设置匿名用户主目录,根据个人意愿自行调整**</span>
anon_root<span class="token operator">=</span>/srv/ftp/anyone
<span class="token comment"># 匿名用户可以上传文件            ****上传文件 NO</span>
anon_upload_enable<span class="token operator">=</span>NO
<span class="token comment"># 匿名用户可以建目录,同时在此目录下上传文件</span>
anon_mkdir_write_enable<span class="token operator">=</span>NO
<span class="token comment">#匿名用户修改删除                ****修改、删除</span>
anon_other_write_enable<span class="token operator">=</span>NO
<span class="token comment">#匿名上传文件所属用户名         ****每个文件需要一个属主,该用户名必须是服务器下真实存在的用户</span>
<span class="token comment">#chown_username=usr   #因为不允许上传,所以不用设置,如果允许上传可指定一个用户</span>

<span class="token comment"># 要注意文件夹的属性,匿名帐户是其它(other)用户,要检查匿名用户登录的目录是否有读写权限</span>
<span class="token comment"># 并且vsftpd的安全规则是不允许ftp用户对ftp根目录有可写权限,在本列中 /srv/ftp/anyone 的其他人权限需要为5(rx)</span>

<span class="token comment"># 默认情况下,匿名用户所有上传下载,所使用的用户都是ftp用户的权限</span>
<span class="token comment"># 若要上传文件,则需要ftp用户有写的权限,若要下载,则需要ftp用户有读的权限</span>
<span class="token comment"># 一般情况下,ftp用户对文件有读权限就对文件有下载权限了</span>
anon_world_readable_only<span class="token operator">=</span>NO
<span class="token comment">#文件有三种权限,文件所有人,文件所有组,文件的其他人</span>
<span class="token comment">#当他为YES时候,文件的其他人必须有读的权限才允许下载,单单所有人为ftp且有读权限是无法下载的,</span>
<span class="token comment">#   必须其他人也有读权限,才允许下载,这是为安全性的一方面考虑</span>
<span class="token comment">#若为NO则只要ftp用户对文件有读权限即可下载</span>

</code></pre>
<p>补充:目录的权限与文件的权限理解起来有些不同<br>
目录<mark>只有</mark>读权限:可以ls 查看目录内容,不能进入,不能在其下创建子目录和文件<br>
目录<mark>只有</mark>执行权限:不能ls 查看目录内容,可以进入目录(进入后可以用ls查看),不能在其下创建子目录和文件<br>
目录<mark>只有</mark>写权限:啥都不可以干(因为目录对外不可见,且又不能进入,则无法提供写的权限)</p>
<p>以上三种基本权限功能,如果想实现类似 <code>touch /test/1.txt</code>这种功能就需要目录同时拥有写和执行权限。<br>
vsftpd的安全规则是不允许ftp用户对ftp根目录有可写权限。</p>
<blockquote>
<p>在如下的目录文件结构中:<br>
/srv/ftp/anyone该目录为匿名用户的根目录,其他人权限为 rx<br>
|__test目录:其他人权限为r<br>
|__anyone 文件:无实际作用,文件名表示当前处于 anyone 目录下</p>
</blockquote>
<p>因此,如果匿名用户登录(成功访问ftp站点),却无法进入某个文件,那么有可能是该目录没有给出执行权限(如下图所示)。只需要在服务器上给其他人添加上执行权限即可<code>chmod o+x test</code>。</p>
<p><img src="https://img-blog.csdnimg.cn/20200212174943350.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxOTkzMg==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"><br>
<img src="https://img-blog.csdnimg.cn/20200212175004421.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxOTkzMg==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"></p>
<div id="本地">
</div><h5>2.3、本地用户配置</h5>
<p>本地用户,即服务器的正常登录用户,或者说可以用 SSH 远程连接的用户。本地用户一般不怎么使用,因为你都可以登录服务器了,可以直接使用 scp、sftp等等的基于ssh的文件传输协议传输干嘛还要特地去访问ftp下载文件。并且由于本地用户可以登录服务器不方便给别人使用,一旦让其他人得到你的本地用户账号他就得到你的服务器了(😨😰)。以下是本地用户得配置。</p>
<pre><code class="prism language-bash"><span class="token comment"># ************* 本地用户 ********************************************</span>
<span class="token comment">#允许本地用户访问</span>
local_enable<span class="token operator">=</span>YES
<span class="token comment">#允许本地用户对FTP服务器文件具有写权限,本地帐户登陆后有权删除和修改文件</span>
write_enable<span class="token operator">=</span>YES
<span class="token comment">#本地用户上传的文件权限,掩码,777-022=755</span>
local_umask<span class="token operator">=</span>022
<span class="token comment">#本地用户根目录路径</span>
local_root<span class="token operator">=</span>/srv/ftp
<span class="token comment">#用户不能访问上层目录,全部用户被限制在主目录</span>
chroot_local_user<span class="token operator">=</span>YES
<span class="token comment">#是否启动限制用户的名单,</span>
chroot_list_enable<span class="token operator">=</span>YES
<span class="token comment">#指定列外用户列表文件,列表中的用户不被锁定在主目录</span>
<span class="token comment">#是否限制在主目录下的用户名单,至于是限制名单还是排除名单,这取决于chroot_local_user的值</span>
chroot_list_file<span class="token operator">=</span>/etc/vsftpd/chroot_list
</code></pre>
<p>本地用户登录验证文件为 <code>/etc/pam.d/vsftpd</code> 如果设置本地用户登录需要添加:</p>
<pre><code class="prism language-bash">pam_service_name<span class="token operator">=</span>vsftpd
</code></pre>
<div id="虚拟">
</div><h3>3、虚拟用户配置</h3>
<p>因为本地用户不安全,匿名用户也不安全,所以我们就设置一个虚拟用户吧。该用户是虚拟出的一个用户,所以不能用来登录服务器,但是可以登录ftp站点下载和上传文件。</p>
<p>配置虚拟用户登录需要有一个条件和三种文件:<br>
<strong>一个条件</strong>:在 vsftpd.conf 主配置文件中 <code>guest_enable=YES</code> 开启虚拟用户(并指定配置文件目录)<br>
<strong>三种文件</strong>:</p>
<ul>
<li>pam认证文件:PAM使用配置/etc/pam.d/下的文件,来管理对程序的认证方式</li>
<li>虚拟用户的用户账户的数据库文件:通过一个写有用户名和密码的普通文件加密得到</li>
<li>各用户(虚拟用户)自己的配置文件:各用户在 <em>虚拟用户的配置文件</em> 的家目录下有一份各自的权限配置文件</li>
</ul>
<p>通过在在主配置文件中开启虚拟用户登录,在登录时验证预先设定的用户名和密码,实现虚拟用户的登录。以及通过各虚拟用户的配置文件来管理虚拟用户的权限。</p>
<div id="名单">
</div><h4>3.1 创建虚拟用户名单</h4>
<p>虚拟用户名单设置,主要有以下步骤:</p>
<h6>3.1.1添加虚拟用户名单</h6>
<ul>
<li>创建 loguser.txt (文件名随意),在文件内奇数行写入虚拟用户名,偶数行写入密码</li>
<li>如 1:admin 2:123456 3:usr 4:123456 (1:代表第一行,同理2:……)</li>
</ul>
<h6>3.1.2把用户名单生成数据库文件</h6>
<pre><code class="prism language-bash">db4.8_load -T -t <span class="token function">hash</span> -f /etc/vsftpd/loguser.txt /etc/vsftpd/vsftpd_login.db
<span class="token comment"># db_load加密命令-t 加密方式   -f指定明文文件生成密文文件格式为.db</span>
</code></pre>
<h6>3.1.3修改认证文件 /etc/pam.d/vsftpd</h6>
<p>这里可以在原文件的基础上修改,也可以新建一个文件。我选择……当然是全都要了。<br>
事实上:下面的登录文件在二选一即可。</p>
<pre><code class="prism language-bash"><span class="token comment"># 以下二者选其一</span>
vsftpd.vu   <span class="token comment"># 虚拟用户与本地用户不共存,只验证虚拟用户</span>
vsftpd               <span class="token comment"># 虚拟用户与本地用户共存,都可以登录</span>
</code></pre>
<p>1》新建 vim /etc/pam.d/vsftpd.vu 用作虚拟用户验证<br>
写入以下两行内容:</p>
<pre><code class="prism language-bash"><span class="token comment"># 注释不要写</span>
<span class="token comment"># pam_userdb.so= 后面跟着你的登录数据库文件,不写后缀</span>
account required pam_userdb.so db<span class="token operator">=</span>/etc/vsftpd/vsftpd_login
auth    required pam_userdb.so db<span class="token operator">=</span>/etc/vsftpd/vsftpd_login
</code></pre>
<p>2》原文件 vim /etc/pam.d/vsftpd:<br>
在 /etc/pam.d/vsftpd 中已经有一些内容了,不要动它们,在第二行写下两行内容<br>
注意区别,将配置虚拟用户添加两行中的<mark>required</mark>改为<mark>sufficient</mark></p>
<pre><code class="prism language-bash"><span class="token comment">#%PAM-1.0</span>
auth sufficient /lib64/security/pam_userdb.so db<span class="token operator">=</span>/etc/vsftpd/vsftpd_login
account sufficient /lib64/security/pam_userdb.so db<span class="token operator">=</span>/etc/vsftpd/vsftpd_login


session    optional   pam_keyinit.so    force revoke
auth       required   pam_listfile.so item<span class="token operator">=</span>user sense<span class="token operator">=</span>deny file<span class="token operator">=</span>/etc/vsftpd/ftpusers onerr<span class="token operator">=</span>succeed
auth       required   pam_shells.so
auth       include      password-auth
account    include      password-auth
session    required   pam_loginuid.so
session    include      password-auth
</code></pre>
<p>上述两个文件的作用简单来说一下:<br>
如果使用第一个文件,即需要在 vsftpd.conf 主配置文件中写上 <code>pam_service_name=vsftpd.vu</code> 此时,不管主配置文件是否允许本地用户登录,本地用户都无法登录。<br>
而,第二个文件,使用<code>pam_service_name=vsftpd</code> 可同时让本地用户和虚拟用户登录。</p>
<p>准备工作已经做完,事实上 loguser.txt 已经没有用了,可以删掉。</p>
<div id="虚拟ftp">
</div><h4>3.2 在vsftpd.conf 中配置虚拟用户</h4>
<p>因为虚拟用户没有实体,所以需要给虚拟用户指定一个本地用户实体(将虚拟用户映射到指定的系统账号),在这里我指定为usr用户<code>guest_username=usr</code> 。<br>
另外,根据在 vsftpd.conf 的配置指定一个目录放置虚拟用户的权限配置文件 <code>user_config_dir=/etc/vsftpd/vsftpd_user_conf</code>。</p>
<p>具体设置如下:</p>
<pre><code class="prism language-bash"><span class="token comment"># ************* 虚拟用户 ********************************************</span>
<span class="token comment">#开启虚拟用户的功能</span>
guest_enable<span class="token operator">=</span>YES
<span class="token comment">#指定虚拟用户的宿主用户</span>
guest_username<span class="token operator">=</span>usr
<span class="token comment">#加载pam哪个模块,我设置的加密认证是/etc/pam.d/vsftpd.vusufficient</span>
pam_service_name<span class="token operator">=</span>vsftpd
<span class="token comment"># 仅使用虚拟用户和匿名用户,取消本地用户验证</span>
<span class="token comment">#pam_service_name=vsftpd.vu</span>
<span class="token comment">#指定虚拟用户权限配置文件目录</span>
user_config_dir<span class="token operator">=</span>/etc/vsftpd/vsftpd_user_conf
<span class="token comment">#vsftpd的服务日志保存路径,默认不存在</span>
xferlog_file<span class="token operator">=</span>/var/log/vsftpd.log
</code></pre>
<div id="虚拟conf">
</div><h4>3.3 配置虚拟用户权限</h4>
<p>在 /etc/vsftpd/ 下传创建目录 <code>mkdir vsftpd_user_conf</code> ,进入该目录,创建以虚拟用户名为文件名的文件,写入以下配置。</p>
<p>注意:有几个虚拟用户就配置几个文件,如本例中,主要有 usr、admin 两个文件。</p>
<pre><code class="prism language-bash">write_enable<span class="token operator">=</span>YES
<span class="token comment">#他为YES时候,文件的其他人必须有读的权限才允许下载</span>
anon_world_readable_only<span class="token operator">=</span>NO
<span class="token comment"># 上传权限                </span>
anon_upload_enable<span class="token operator">=</span>YES
<span class="token comment"># 新建目录权限</span>
anon_mkdir_write_enable<span class="token operator">=</span>YES
<span class="token comment"># 修改目录及文件的权限                        ---usr设置为NO不允许更改文件,admin设置为YES可以更改文件</span>
anon_other_write_enable<span class="token operator">=</span>YES
该用户的根目录                                   ---可以随意设置位置
local_root<span class="token operator">=</span>/srv/ftp
</code></pre>
<div id="端口">
</div><h2>端口设置</h2>
<p>登录阿里云(我用的是阿里云的ECS服务器😏),点击你要配置的实例服务器,找到本实例安全组,点击配置规则<br>
<img src="https://img-blog.csdnimg.cn/20200212193617135.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxOTkzMg==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"><br>
<img src="https://img-blog.csdnimg.cn/20200212193716794.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxOTkzMg==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"><br>
开放规则,检查防火墙等是否设置好。</p>
<br>
<div id="重启">
</div><h3>5、重启服务器并简单测试</h3>
<p>重启 ftp 服务器:</p>
<pre><code class="prism language-bash">systemctl restart vsftpd
</code></pre>
<div id="测试">
</div><p><strong>登录测试:</strong></p>
<p>打开 Windows 自带的文件管理器,输入 ftp://xxx.xxx.xxx.xxx 回车</p>
<p>此时进入的是匿名用户</p>
<p>右键-》登录 输入用户名和密码 登录相应的账号</p>
<p><img src="https://img-blog.csdnimg.cn/20200212194627356.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxOTkzMg==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"><br>
经测试,功能满足要求(偷个懒就不放截图了😂😂),以上就是配置 ftp 服务器全过程。</p>
<p>补一张手机端(安卓)ES文件浏览器的效果图</p>
<p><img src="https://img-blog.csdnimg.cn/20200212205152933.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxOTkzMg==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"></p>
<hr>
<p>推荐客户端:<br>
windows 客户端 :文件管理器或者浏览器,专业一点的有WinSCP、MobaXterm等。<br>
安卓客户端:ES文件浏览器、x-plore、mt 文件管理器</p><br><br>
来源:https://www.cnblogs.com/TaoR320/p/12680132.html
頁: [1]
查看完整版本: Linux ftp服务器部署(最简单的ftp教程)