Linux上的ftp服务器有各种型号,我们会使用vsftpd。
首先在自己电脑上安装好ftp客户端,下载地址:FlashFTP下载
下载完成后解压就可以使用了。
在服务器上安装FTP比较简单,我们只需使用XShell连接服务器后,执行
yum install vsftpd -y
然后执行
systemctl start vsftpd.service
systemctl status vsftpd.service
这两行命令是启动ftp服务和查看ftp状态的。
关闭和启动
systemctl stop vsftpd.service
systemctl start vsftpd.service
systemctl status vsftpd.service
这几行命令表示重启ftp
到这里实际上我们已经可以使用FTP工具在自己电脑上传输文件到服务器上了,但这样并不安全,没有为FTP配置专门的用户,也没有限制匿名用户访问。
在Linux中,不同用户是有不同目录访问权限的,所以首先创建一个目录,作为这个ftp用户所拥有的目录。
mkdir -p /home/wwwroot/ftptest
useradd -d /home/wwwroot/ftptest -g ftp -s /sbin/nologin ftptest
-g ftp 表示该用户属于ftp分组 (ftp分组是内置的,本来就存在,不需要自己创建)
-s /sbin/nologin 表示这个用户不能用来登录secureCRT这样的客户端。 这种不能登陆的用户又叫做虚拟用户
chown -R ftptest /home/wwwroot/ftptest
chmod -R 775 /home/wwwroot/ftptest
把目录/home/wwwroot/ftptest的拥有者设置为ftptest,使ftptest用户拥有这个目录的读写权限。
为ftptest用户设置密码
passwd ftptest
密码修改成功后会如图所示出现成功提示。
注: 密码使用 paw123###,后续连接ftp服务器的时候会用到
创建好用户后,我们进行用户配置
默认情况下vsftpd服务器是允许匿名登陆的,这样非常不安全,所以要把这个选项关闭掉。
首先通过vi命令打开ftp服务器配置文件:
vi /etc/vsftpd/vsftpd.conf
然后把本来的
anonymous_enable=YES
修改为
anonymous_enable=NO
什么叫做限制用户访问呢? ftp用户 教程中创建的ftptest用户所拥有的目录是 /home/wwwroot/ftptest,如果不做限制,那么使用ftptest登陆之后可以切换到其他敏感目录去,比如切换到/usr目录去,这样就存在巨大的安全隐患。
为了规避这个隐患,需要限制ftptest用户只能通过ftp访问到 /home/wwwroot/ftptest 目录以及子目录。
配置办法:
首先通过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 这个文件进行编辑
修改后先不要退出
vsftpd服务器是这样的,一旦某个用户被限制访问了,那么默认情况下,该用户的写权限也被剥夺了。 这就导致ftp客户端连接上服务器之后无法上传文件。
因此需要在vsftpd.conf最后面追加一行
allow_writeable_chroot=YES
在vsftpd.conf最后添加:
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30010
这表示使用被动模式,用于传输数据的端口分配从30000-30010之间。
修改成功后esc-> :wq保存并退出
因为用户 ftptest 是 nologin的,所以存在鉴权的问题。 如果鉴权问题不解决,就是永不停息的 530错误。。。搞死宝宝了
解决办法有如下两种:
vi /etc/pam.d/vsftpd
注释掉/etc/pam.d/vsftpd文件里这一行:
#auth required pam_shells.so
这样不去鉴权,从而允许 ftptest 这种 nologin用户登录 ftp 服务器.
vi /etc/shells
在/etc/shells文件里面增加一行:
/sbin/nologin
然后就可以重启ftp了,重启命令
systemctl stop vsftpd.service
systemctl start vsftpd.service
systemctl status vsftpd.service
这里我们使用下载安装好的FlashFTP进行文件传输演示
左边边框点击切换本地,表示本地文件
右边点击快速连接,然后输入自己的服务器的公网ip地址,然后输入用户名和密码,我们在上面设置的是ftptest和paw123###
然后点击连接就可以进行文件传输了。
在左边也就是本地浏览器找到自己要发送的文件,比如tomcat压缩包,拖到右边,等待传输完成。如果用户的目录配置是按照我们上面的步骤来的,那传送到的位置就在服务器的 /home/wwwroot/ftptest目录下