156-0102-3311
联系QQ 284710375
首页 > 技术分享 > Linux
分享到:收藏

CentOS安装配置vsftpd2017-07-28 14:52:59

杨宇潇 原创文章,转载请标明出处

CentOS下搭建FTP服务器简单记录。


FTP想必都会使用,但对于一个开发者来讲,怎么在服务器中安装并配置FTP,这是难点所在,下面仔细讲解怎样在CentOS中安装FTP,以及安装FTP过程中可能会出现的错误。


开始安装:

1、用root进入系统;

2、使用命令 rpm  -qa|grep vsftpd 查看系统是否安装了ftp,若安装了vsftp,使用这个命令会在屏幕上显示vsftpd的版本,使用命令 rpm -e vsftpd 即可卸载ftp;

3、安装vsftpd,命令:yum -y install vsftpd

4、执行完上一条命令,没有报错证明FTP已经安装成功,启动FTP服务

CentOS6命令:service vsftpd start

CentOS7命令:/bin/systemctl start vsftpd.service

设置FTP为开机自启,命令:chkconfig vsftpd on,执行此条命令后提示的信息不用理会;

5、配置防火墙,开放FTP端口,默认21

CensOS6操作方法:

打开/etc/sysconfig/iptables文件,命令:vi /etc/sysconfig/iptables

在REJECT行之前添加如下代码:-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT,如图:


保存和关闭文件,重启防火墙,命令:service iptables restart

CensOS7操作方法:

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

firewall-cmd --reload


6、配置vsftpd服务器,默认的配置文件是/etc/vsftpd/vsftpd.conf,你可以用文本编辑器打开,命令:vi /etc/vsftpd/vsftpd.conf

7、根据下面的提示,仔细的把配置文件中的配置做修改:

anonymous_enable=NO          # 是否开启匿名登录

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

write_enable=YES                    # 是否允许上传

local_umask=022                     # 默认的umask码

diremssage_enable=YES          # 是否显示目录说明文件

xferlog_enable=YES                 # 是否记录ftp传输过程

connect_from_prot_20=YES     # 是否确定端口传输来自20

xferlog_ftd_format=YES           # 是否使用标准的ftp xferlog模式

chroot_list_enable=YES            # 是否将系统用户限制在自己的home目录下

chroot_list_file=/etc/vsftpd/chroot_list  # 列表不受限制的用户

listen=YES                                # 是否开启监听

pam_service_name=vsftpd      # 服务名称

userlist_enable=YES

tcp_wrappers=YES

大部分的配置默认设置过,可能不用修改,有的配置前面有#被注释掉,去掉#即可,下面的配置需要注意,原来的配置为:

#chroot_list_enable=YES

# (default follows)

#chroot_list_file=/etc/vsftpd.chroot_list

需要修改为:

chroot_list_enable=YES

# (default follows)

chroot_list_file=/etc/vsftpd/chroot_list

这里的chroot_list文件是不存在的,需要我们稍后手动创建;


8、保存修改过的配置文件,创建ftp用户,命令:useradd -d /usr/local/nginx/html -g ftp -s /sbin/nologin username,(指定用户 username 属于组 ftp,只能访问的目录是 /usr/local/nginx/html,不能登陆系统),这句话是很容易出错,需要注意的地方:/usr/local/nginx/html,这个路径为ftp登录后的根目录,根据自己服务器的需求来设定,最后面的username为ftp的用户名,自定义即可,其它地方无需变动;

9、设置该用户的密码,命令:passwd username,根据提示一步步往下走即可;

10、把新建的username用户添加到chroot_list,命令:vi /etc/vsftpd/chroot_list,如果这个文件是不存在,直接执行此条命令,把username用户放在其中后保存即可;

11、重新启动vsftpd,

CentOS6:

命令:service vsftpd restart

管理vsftpd相关命令:

启动vsftpd:service vsftpd start

停止vsftpd:service vsftpd stop

重启vsftpd:service vsftpd restart

CentOS7:

命令:/bin/systemctl restart vsftpd.service

停止vsftpd:/bin/systemctl stop vsftpd.service


此时vsftpd已经正式安装并配置完毕,客户端访问:ftp://你的IP,在弹出的对话框中输入账号、密码,即可连接成功。


权限修改:

1、安装过后的ftp可能暂无操作权限,只能浏览文件,这时我们需要给刚才添加的ftp用户添加权限,命令:chown -R test /home/www/test;

2、安装完成后我们用FTP软件链接,会发现此时登录虽是设置的根目录,但还可以访问上级目录,这样做是不安全的,我们只要能在设置的根目录中操作即可,解决办法:

涉及文件:

vsftpd.conf

chroot_list_file=/etc/vsftpd/chroot_list

如果设置为

chroot_local_user=YES

chroot_list_enable=YES(这行可以没有, 也可以有)

chroot_list_file=/etc/vsftpd/chroot_list

那么, 凡是加在文件/etc/vsftpd/chroot_list中的用户都是不受限止的用户,即, 可以浏览其主目录的上级目录.

如果不希望某用户能够浏览其主目录上级目录中的内容,可以如上设置,然后在文件chroot_list中去掉或不添加该用户即可。

也可以如下配置

chroot_local_user=NO

chroot_list_enable=YES(这行必须要有, 否则文件/etc/vsftpd/chroot_list不会起作用)

chroot_list_file=/etc/vsftpd/chroot_list

然后把所有不希望有这种浏览其主目录之上的各目录权限的用户添加到文件/etc/vsftpd/chroot_list中即可(一行一个用户名,此时, 在该文件中的用户都是不可以浏览其主目录之外的目录的)


主动模式与被动模式:

如果是在本地的虚拟机上安装了vsftpd,可能会出现各种配置都完成了,但还是不能登录的情况,这里要说道vsftpd的两种连接模式:主动模式(PORT)、被动模式(PASV)

简单举例说明两种连接模式:先假设客户端为C,服务端为S.

Port模式(主动):当客户端C向服务端S连接后,使用的是Port模式,那么客户端C会发送一条命令告诉服务端S(客户端C在本地打开了一个端口N在等着你进行数据连接),当服务端S收到这个Port命令后 就会向客户端打开的那个端口N进行连接,这种数据连接就生成了。

Pasv模式(被动):当客户端C向服务端S连接后,服务端S会发信息给客户端C,这个信息是(服务端S在本地打开了一个端口M,你现在去连接我吧),当客户端C收到这个信息后,就可以向服务端S的M端口进行连接,连接成功后,数据连接也建立了

在本机连接vsftpd,可能会用到被动模式-pasv,由于vsftpd配置不当、iptables端口开放不全、selinux限制等都会导致ftp不能连接成功,ftp客户端可能会报的错:“以 PASV 模式连接失败,正在尝试 PORT 模式”或者“数据套接字错误 连接已超时”。

解决办法:在/etc/vsftpd/vsftpd.conf中加入以下配置:

listen_port=21

ftp_data_port=20

pasv_enable=YES

pasv_max_port=10040

pasv_min_port=10020

CentOS6需要在/etc/sysconfig/iptables中加入以下配置:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 10020:10040 -j ACCEPT

重启vsftpd:service vsftpd restart

重启iptables:service iptables restart

CentOS7:

firewall-cmd --permanent --zone=public --add-port=10020-10040/tcp

firewall-cmd --reload


错误总结:

1、提示:“vsftpd:500 OOPS:……”,vsftp.conf文件配置错误, 注意这里的内容前面不要空格,=号前后不要有空格,=后面一定要有内容, 否则注释掉;


2、创建用户是可能会提示:

useradd: warning: the home directory already exists.  

Not copying any file from skel directory into it.

不用理会,只是告诉你,你指向的目录已经存在了,不会再创建


3、vsftp登录报错提示:“500 OOPS: cannot change directory:/home/*******”或者“553 Could not create file”,这是因为服务器开启了selinux,这限制了FTP的登录。

解决方法:修改selinux,命令:setsebool -P ftpd_disable_trans 1,然后命令:service vsftpd restart,就OK了。

如果执行setsebool -P ftpd_disable_trans 1后提示“Could not change active booleans: Invalid boolean”或者"Boolean ftpd_disable_trans is not defined"等,执行命令:setsebool -P ftp_home_dir on,执行完这一条应该就可以成功连接了,但selinux还会继续限制操作文件的权限,执行命令:setsebool -P allow_ftpd_full_access  1,这样基本就没问题了。

(附:查看selinux状态:/usr/sbin/sestatus -v,如果selinux status参数为enabled即为开启状态,临时关闭(不用重启机器):setenforce 0,开启:setenforce 1)

修改配置永久关闭selinux

修改/etc/selinux/config 文件

将SELINUX=enforcing改为SELINUX=disabled

重启机器即可


4、在CentOS7中启动或者重启vsftp时,可能会报类似这样的错误:Restarting vsftpd (via systemctl): Job for vsftpd.service failed because the control

错误原因,由于CentOS7中vsftp的配置文件默认将 listen_ipv6=YES 这一行没有注释掉,而我们目前的网络环境还不支持ipv6,从而导致出现错误无法启动

解决方法:将 listen_ipv6=YES更改为:listen_ipv6=NO,或将这一行注释掉


5、提示:“500 OOPS: vsftpd: refusing to run with writable root inside chroot()”,从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误

解决办法:在vsftpd的配置文件中增加:allow_writeable_chroot=YES。

打赏

阅读排行

    大家都在搜

    博客维护不易,感谢你的肯定
    扫码打赏,建议金额1-10元
  • 15601023311