ftp是什么
FTP是 File Transfer Protocol 文件传输协议的英文名称,用于在Internet上控制文件的双向传输. 同时它也是一个应用程序.一般的Linux系统默认带有ftp软件或者是vsftpd。
搭建ftp服务器目的
最近Linux服务器端硬盘容量受限,文件也多了,需要远程拷贝,找了一圈没有合适的软件,自己搞一个基于FTP服务协议的文件,让他自动远程同步,这样也方便,顺便搞个FTP服务器,对以后可以公开的资料放到FTP服务器上做共享。其实,我越来越发现,交流和共享能提升学习效率,事半功倍。
检查安装vsftpd软件
查看所有的安装的软件包 并在结果中查找包含vsftp 的文件
rpm -qa | grep vsftpd
如果没有装则使用yum命令安装
yum -y install vsftpd
或者vsftpd有问题的可以重新装
yum -y reinstall vsftpd
具体步骤
1、创建用户
useradd yangxi -s /sbin/nologin -d /home/yangxi #1、创建个普通用户用于连接ftp,-d的家目录是ftp连接上默认访问的。这个禁止登录,是禁止远程连接服务器,不是禁止登录ftp
最好是禁止登录,这样的话这个用户可以只用作FTP服务。
或者通过下面的命令进行模式修改:
usermod -s /sbin/nologin ftpname //限定用户ftpname不能使用telnet,只能使用ftp
usermod -s /sbin/bash ftpname //用户test恢复正常
usermod -d /ftp ftpname //更改用户ftpname的主目录为/ftp
2、配置 vsftpd.conf 配置文件
anonymous_enable=YES #允许匿名用户登录,改成no
//在配置文件中添加下面这2行
local_root=/home/yangxi //修改默认根目录
chroot_local_user=YES //限制住了,只允许查看他自己的家目录
其中这三个参数主要作用如下表
如果要对用户做限制需要修改下面参数中的一个,如下:
userlist_enable=YES #启动用户列表
userlist_deny=NO #决定是否对用户列表的用户拒绝访问ftp
同时,还需要编辑相对应的用户文件,将用户名加入即可。
userlist_file=/etc/vsftpd/user_list
4、关闭SELINUX
临时关闭
setenforce 0
永久关闭
vim /etc/selinux/config
SELINUX=disabled
3、重启vsftpd服务
查看vsftpd 服务的运行状态
systemctl status vsftpd
如果最后一条状态是stoped则启动vsftpd
systemctl start vsftpd
如果最后一条状态是started则重启vsftpd
systemctl restart vsftpd
经常会遇到的问题:
原vsftpd服务器的系统从centos6.8升级到centos7.2。vsftpd使用yum方式安装,用户采用系统用户登录。由于系统升级到centos7,yum安装的vsftpd版本改变。因此按centos6的设置,登录时报错。配置文件未修改,主要是修改了ftp的主目录权限。
这个问题发生在最新的这是由于下面的更新造成的:
- Add stronger checks for the configuration error of running with a writeable root directory inside a chroot(). This may bite people who carelessly turned on chroot_local_user but such is life.
从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。
要修复这个错误,可以用命令chmod a-w /home/user去除用户主目录的写权限(采用该方式,将用户主目录文件熟悉修改为#chmod 555)。
FTP连接报错530 Permission denied解决方法
故障排除:
1.首先检查系统是否开启了vsftp服务,如果没有开启,先开启该服务。
2.查看配置
vsftpd的配置,配置文件中限定了vsftpd用户连接控制配置。
vsftpd.ftpusers:位于/etc/vsftpd目录下。它指定了哪些用户账户不能访问FTP服务器,例如root等。
vsftpd.user_list:位于/etc/vsftpd目录下。该文件里的用户账户在默认情况下也不能访问FTP服务器,仅当vsftpd .conf配置文件里启用userlist_enable=NO选项时才允许访问。
vsftpd.conf:位于/etc/vsftpd目录下。来自定义用户登录控制、用户权限控制、超时设置、服务器功能选项、服务器性能选项、服务器响应消息等FTP服务器的配置。
3.配置修改完成后,执行service vsftpd restart重启vsftpd服务。
500 OOPS: vsftpd: cannot locate user specified in 'ftp_username':ftp
500 OOPS: vsftpd: cannot locate user specified in 'ftp_username':ftp
的错误消息。我在google上搜了一把后来发现有一封mail非常有用:
http://lists.debian.org/debian-user/.../msg02648.html
其中有一段话提到:
Yep, I did. There is no occurrence of the string "tunable" anywhere in the vsftpd.conf man page ...
However, I've been delving into the source code, and now understand this - the author uses the name of a config file directive *prefixed by* "tunable_" inside the source code as a variable name. So what I needed to do was define "ftp_username" in vsftpd.conf. For some reason the Debian package leaves a little to be desired in this area, and neither asks you how you want this directive set, nor creates an account for use with vsftpd anonymous connections. The default for this directive is the name "ftp", but there has never been an "ftp" account on my Woody system, nor was one created by the vsftpd installation.
作者提到收到一个500 Oops但是其中提到的tunable_ftp_username哪里也找不到。后来他查看源码,发现源码中是使用一个以"tunable_"为前缀的变量,实际上相应在vsftpd.conf中应该是ftp_username这个directive。所以他在vsftpd.conf中加入了ftp_username=xxx(用户)这一行。但是他也抱怨Debian的发行版没有在任何地方标识这样的问题。而且这个ftp_username的缺省用户应该是ftp,但是woody系统缺省安装后并没有这个ftp用户存在,而且vsftpd安装后也没有添加这个用户。
注:我是用ftp_username=nobody的,然后/etc/init.d/vsftpd restart后成功登陆。