vsftpd安装与配置
<h3>需求:</h3>
<p>创建用户easytong、dev_ftpuser,系统用户easytong用于运行程序。ftp用户dev_ftpuser用于ftp访问,限制用户dev_ftpuser在指定的主目录下,匿名用户不允许访问。</p>
<h3>1、创建用户</h3>
<p>出于安全考虑,一般不允许ftp用户登录Linux系统;</p>
<pre><code class="language-bash">[root@CentOS7 ~] # useradd easytong
[root@CentOS7 ~] # passwd easytong
[root@CentOS7 ~] # useradd -s /sbin/nologin -g easytong dev_ftpuser
[root@CentOS7 ~] # passwd dev_ftpuser</code></pre>
<h3>2、设置FTP工作目录</h3>
<p>此ftp目录在设备接入服务启动时会自动生成,也可以手工先创建</p>
<pre><code class="language-bash">[root@CentOS7 ~] # mkdir -pv /opt/EasyTong/ET_EquipmentGateWayService/ftp
[root@CentOS7 ~] # chown -R easytong:easytong /opt/EasyTong/
或
[root@CentOS7 ~] # mkdir -pv /usr/local/EasyTong/ET_EquipmentGateWayService/ftp
[root@CentOS7 ~] # chown -R easytong:easytong /usr/local/EasyTong/ET_EquipmentGateWayService/ftp</code></pre>
<h3>3、安装并配置ftp</h3>
<h4>3.1、安装ftp</h4>
<pre><code class="language-bash">[root@CentOS7 ~] # rpm -qa vsftpd
[root@CentOS7 ~] # yum install vsftpd ftp</code></pre>
<h4>3.2、备份原配置文件</h4>
<p><code>[root@CentOS7 ~] # mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak</code></p>
<h3>3.3、创建vsftpd.conf文件</h3>
<p><code>[root@CentOS7 ~] # vi /etc/vsftpd/vsftpd.conf</code>
把下面内容添加到/etc/vsftpd/vsftpd.conf文件中,并保存退出</p>
<pre><code class="language-bash">anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
dirmessage_enable=YES
connect_from_port_20=YES
pasv_enable=YES
#pasv_address=60.191.37.211 #内外映射时,需要添加此行;
xferlog_enable=YES
xferlog_std_format=YES
userlist_enable=NO
chroot_local_user=YES
chroot_list_enable=YES
allow_writeable_chroot=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
#listen_port=5521 #修改ftp端口(/etc/services)时,需添加此行;否则报错:500 OOPS: tcp_wrappers is set to YES but no tcp wrapper support compiled in。
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES #CentOS 8 中,需要注销此行。
user_config_dir=/etc/vsftpd
pasv_min_port=61001 #内外网映射时,路由器的NAS上需要打开这些端口(61001-61011);
pasv_max_port=61011 #端口映射时,注意:内外端口要相同,否则在ftp登录后,用ls查看时,无法使用;
max_clients=300
max_per_ip=3
reverse_lookup_enable=NO
#allow_writeable_chroot=YES #vsftpd版本从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误:500 OOPS: vsftpd: refusing to run with writable root inside chroot()。 #CentOS 8 不需要此行。</code></pre>
<h3>4、创建文件chroot_list</h3>
<p>手工创建文件chroot_list,限制用户在指定目录
<code>[root@CentOS7 ~] # touch /etc/vsftpd/chroot_list</code></p>
<h3>5、创建用户文件并添加指定目录</h3>
<pre><code class="language-bash">[root@CentOS7 ~]# vi /etc/vsftpd/dev_ftpuser #添加如下内容:
local_root=/opt/EasyTong/ET_EquipmentGateWayService/ftp</code></pre>
<h3>6、关闭防火墙、SELinux调试FTP</h3>
<h4>6.1、查看selinux状态</h4>
<p><code>[root@centos7 ~] # /usr/sbin/sestatus -v</code> 或:getenforce</p>
<h3>6.2、关闭防火墙、SELinux</h3>
<pre><code class="language-bash">[root@CentOS7 ~]# systemctl stop firewalld
[root@CentOS7 ~]# setenforce 0 #关闭不需重启系统;</code></pre>
<h3>7、启动ftp并验证ftp可正常工作</h3>
<p>以用户dev_ftpuser登录验证,访问目录是否为指定的目录,验证是否可上传、下载数据;</p>
<pre><code class="language-bash">[root@CentOS7 ~]# systemctl start vsftpd
[root@CentOS7 ~]# ftp 172.16.3.240
Connected to 172.16.3.240 (172.16.3.240).
220 (vsFTPd 3.0.3)
Name (172.16.3.240:root): dev_ftpuser
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> </code></pre>
<h3>8、开启SELinux、防火墙</h3>
<h4>8.1、开启并设置SELinux</h4>
<pre><code class="language-bash">[root@CentOS7 ~]# setenforce 1
[root@CentOS7 ~]# setsebool -P ftp_home_dir on
[root@CentOS7 ~]# setsebool -P allow_ftpd_full_access on
## CentOS7设置如下:
[root@CentOS7 ~]# setsebool -P tftp_home_dir on
[root@CentOS7 ~]# setsebool -P ftpd_full_access on
[root@CentOS7 ~]# getsebool -a |grep ftp
关注下面两个开关是否打开:
allow_ftpd_full_access --> on
ftp_home_dir --> on</code></pre>
<h4>8.2、查看防火墙运行情况</h4>
<pre><code class="language-bash">[root@CentOS7 ~]# service iptables status
[root@CentOS7 ~]# iptables -nL #查看防火墙打开的端口;</code></pre>
<h3>9、打开ftp所需端口,添加如下内容,再重启防火墙</h3>
<pre><code class="language-bash">[root@RHEL65 ~]# vi /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 61001:61010 -j ACCEPT
#-A INPUT -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT
[root@RHEL65 ~]# service iptables restart</code></pre>
<h3>10、验证ftp是否按需求设置成功;</h3>
<h3>11、设置ftp随机启动</h3>
<p><code>[root@RHEL65 ~]# chkconfig vsftpd on</code></p>
<pre><code class="language-bash">[root@RHEL75 ~]# systemctl enable vsftpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.</code></pre>
<h3>12、reboot验证ftp</h3>
<h3>13、其它需求:更改 vsftpd 的端口号</h3>
<pre><code class="language-bash">vsftpd启动后,默认的ftp端口是21,现在我想把ftp端口改成 801 ,修改后能保证用户上传下载不受影响
(1)编辑 /etc/vsftpd/vsftpd.conf 文件,在该配置文件中添加此行:listen_port=801
(2)编辑 /etc/services 文件,将其中的 ftp 21/tcp 改为 ftp 801/tcp,ftp 21/udp 改为 ftp 801/udp
(3)执行 /etc/init.d/vsftpd restart 重新启动 vsftpd 服务。启动完成后可以使用 netstat -ntpl | grep vsftpd 命令可以查看到系统现监听的 vsftpd 的端口为 801
(4)使用 lftp 192.168.0.1:801(192.168.0.1 是 vsftpd 服务器的地址 ),这样就可以访问到 ftp 服务器了。</code></pre>
<h3>14、报错处理</h3>
<h4>14.1 报错:vsftpd 530 login incorrect</h4>
<p>报错:vsftpd 530 login incorrect,密码是正确</p>
<pre><code class="language-bash">vim /etc/pam.d/vsftpd
注释下面这行
#auth required pam_shells.so</code></pre>
<h4>14.2 报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()。</h4>
<p><code>allow_writeable_chroot=YES</code>
vsftpd版本从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录(即ftp配置文件中指定的主目录)不能再具有写权限了!
如果检查发现还有写权限,就会报该错误:500 OOPS: vsftpd: refusing to run with writable root inside chroot()。
要修复这个错误,可以用命令chmod a-w /home/user去除用户主目录的写权限,注意把目录替换成你自己的。或者你可以在vsftpd的配置文件中增加下列两项中的一项:
allow_writeable_chroot=YES
或者
<code>chmod 500 /raf/ftp</code>
<a href="https://www.cnblogs.com/wi100sh/p/4542819.html">https://www.cnblogs.com/wi100sh/p/4542819.html</a></p>
<h4>14.3 多媒体POS升级时间过久,速度不够快</h4>
<p>客户使用过程中发现,多媒体POS升级时间过久,速度不够快。
修改内容:增加参数项:max_clients=300 最大客户端连接数为300</p>
<h4>14.4 ftp登录报错:vsftpd 530 login incorrect</h4>
<p>CentOS7.6安装vsftpd并正确配置后,ftp ip 输入用户名登录时报错:vsftpd 530 login incorrect 的N中情况
解决办法:
vim /etc/pam.d/vsftpd
注释掉
<code>#auth required pam_shells.so</code>
重启
<code>systemctl restart vsftpd</code>
来源:<a href="https://blog.csdn.net/wlchn/article/details/50855447">https://blog.csdn.net/wlchn/article/details/50855447</a></p>
<h4>14.5 FTP连接报错530 Permission denied</h4>
<p>vsftpd.user_list:位于/etc/vsftpd目录下。该文件里的用户账户在默认情况下也不能访问FTP服务器,仅当vsftpd .conf配置文件里启用userlist_enable=NO选项时才允许访问。
<a href="https://blog.csdn.net/weiyuefei/article/details/51285765">https://blog.csdn.net/weiyuefei/article/details/51285765</a></p>