Linux上安装ftp记录,学习借鉴how2j网站
百度一下:
ftp的全称是 File Transfer Protocol 。 文件传输协议。ftp就是用来我们把本地的文件传输到服务器上,或者从服务器上下载文件用的。
Linux上的ftp服务器有各种型号,选择使用vsftpd,全称是:very secure FTP daemon ,非常安全的ftp后台程序。
基本安装
-
安装命令 : yum install vsftpd -y
执行之后,最后看到Complete! 就表示安装成功了 -
查看服务启动状态
systemctl start vsftpd.service
systemctl status vsftpd.service
第一步是用来启动vsftpd服务,不一定需要,因为 安装命令 结束后就会自动启动,但是有时候不会自动启动,所以还是加上
可以看到最后 Started vsftpd ftp daemon 已经启动成功了
-
服务启动和关闭
systemctl stop vsftpd.service
systemctl start vsftpd.service
systemctl status vsftpd.service -
检查端口 netstat -anp|grep 21
ftp服务启动的是21端口,使用如下命令应该观察到21端口正在处于监听状态,这也从侧面反应了ftp服务器启动成功了
创建用户
-
要连接上 vsftpd 服务器需要为Linux创建专门的用户。
-
在Linux中,不同用户是有不同目录访问权限的,所以首先创建一个目录,作为这个ftp用户所拥有的目录。
mkdir -p /home/work/ftpuser -
创建用户
执行如下命令,创建用户ftpuser,并且指定其目录为用户目录中创建的/tset/ftpuser :
useradd -d /home/work/ftpuser -g ftp -s /sbin/nologin ftpuser
-g ftp 表示该用户属于ftp分组 (ftp分组是内置的,本来就存在,不需要自己创建)
-s /sbin/nologin 表示这个用户不能用来登录secureCRT这样的客户端。 这种不能登陆的用户又叫做虚拟用户 -
设置目录权限
chown -R ftpuser /home/work/ftpuser
chmod -R 775 /home/work/ftpuser
把目录 /test/ftpuser的拥有者设置为ftptest
使ftpuser用户拥有这个目录的读写权限 -
设置密码
passwd ftpuser
-
查看一下之前的设置是否成功
ls -l .home/work
配置用户
-
接下来在vsftpd服务器中配置该用户
-
去掉匿名登陆
默认情况下vsftpd服务器是允许匿名登陆的,这样非常不安全,所以要把这个选项关闭掉。
首先通过vi命令打开ftp服务器配置文件:
vi /etc/vsftpd/vsftpd.conf
然后把本来的(本来为no就不管)
anonymous_enable=YES
修改为
anonymous_enable=NO
-
限制用户访问
什么叫做限制用户访问呢?创建的ftpuser用户所拥有的目录是 /test/ftpuser,如果不做限制,那么使用ftpuser登陆之后可以切换到其他敏感目录去,比如切换到/usr目录去,这样就存在巨大的安全隐患。
为了规避这个隐患,需要限制ftpuser用户只能通过ftp访问到 /test/ftpuser 目录以及子目录。
配置办法:
首先通过vi命令打开ftp服务器配置文件:
vi /etc/vsftpd/vsftpd.conf
找到:
#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_enable=YES: 表示对用户访问进行限制
chroot_list_file=/etc/vsftpd/chroot_list 表示对chroot_list里面指定的用户进行限制 下一个步骤用户清单就会对chroot_list 这个文件进行编辑 -
用户清单
接着上一个步骤,在chroot_list中添加ftptest用户
首先通过vi命令打开chroot_list文件(此文件本来是空的):
vi /etc/vsftpd/chroot_list
然后增加一行: ftpuser
-
允许写权限
vsftpd服务器是一旦某个用户被限制访问了,那么默认情况下,该用户的写权限也被剥夺了。 这就导致ftp客户端连接上服务器之后无法上传文件。
这个时候,就需要打开此用户的写权限,请按照如下办法操作:
首先通过vi命令打开ftp服务器配置文件:
vi /etc/vsftpd/vsftpd.conf
在最后面新加一行:
allow_writeable_chroot=YES
配置端口
-
vsftpd有两种端口,一个是21端口,用来监听客户端连接请求的。 这个一般说来是固定的,就一直使用21端口。
另一种是,一旦获取到请求之后,再专门用户服务端和客户端传输数据的端口。本知识点就是用于指定第二种端口的获取范围 -
配置端口
打开配置文件:
vi /etc/vsftpd/vsftpd.conf
在最后添加:
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30010
这表示使用被动模式,用于传输数据的端口分配从30000-30010之间。
关于鉴权
因为用户 ftpuser 是 nologin的,所以存在鉴权的问题。 如果鉴权问题不解决,就是永不停息的 530错误。
解决办法有如下两种:
-
方式一: pam.d/vsftpd 文件顶折
vi /etc/pam.d/vsftpd
注释掉/etc/pam.d/vsftpd文件里这一行:
#auth required pam_shells.so
这样不去鉴权,从而允许 ftptest 这种 nologin用户登录 ftp 服务器. -
方式二:shells 文件顶折
vi /etc/shells
在/etc/shells文件里面增加一行:
/sbin/nologin
这样允许不能登录系统的用户通过鉴权
重启vsftpd服务器顶折
通常重启使用的命令是
service vsftpd restart
但是centos7之后,改用的命令是如下方式:
systemctl restart vsftpd.service
最后执行查看状态,以查看重启成功了
systemctl status vsftpd.service
开放端口
-
简介
要访问Linux的端口,必须开通才行。
22就是SecureCRT链接Linux服务器用的端口号。
3389 是阿里云控制台链接用的端口,这里没有用到。
只有这两个端口号是不够用的,为了能够链接vsftpd服务器还需要开放21端口和 30000-30010端口 -
安全组设置
登陆阿里云后,按照如下顺序选择:云服务器ECS->安全组->配置规则
部署Linux ftp客户端
- ftp客户端使用ftprush.
-
连接
菜单栏选择->站点->快速连接对话框
输入主机地址,创建的ftpuser用户名和设置的ftpuser密码进行连接。 -
连接成功
-
尝试一下互相传文件
本地新建一个test.txt文件,上传到远程服务端上
linux查看一下,传输成功
至此,本次的练习成功完成,不过期间还是会遇到一些问题,在此记录一下
- 在ftprush连接ftp用户是出现了:
500 OOPS: cannot change directory: /…
翻译一下:500 OOPS:不能更改目录
看意思是权限问题,自己也改,也百度了很多,最多的答案是:
chmod -R 777 /… 将目录的权限全部打开,还有一些其他解决方法
不过我的问题不在此,我的错误在于,在创建用户时自己在根目录创建了一个目录,而没有在/home 目录下创建用户目录,修改之后连接成功,至于为什么要在/home 目录下才能连接成功,简单的思考了一下。。