一:安装ftp
1、检查是否安装了 ftp :(下图是已安装的效果,没安装没有展示)
rpm -qa|grep vsftpd
2、安装指令:(找一个 -y 指令)
yum install -y vsftpd
3、安装完成后执行步骤1 就可以看到ftp的版本信息
4、安装完成后,启动 FTP 服务:
service vsftpd start
whereis vsftpd 查看相关信息, /etc/vsftpd 存放配置文件等
5、启动后,可以看到系统已经监听了 21 端口:
netstat -nltp | grep 21
6、禁用匿名用户
vi /etc/vsftpd/vsftpd.conf (anonymous_enable=NO-----yes改为no)
7、保存后重启
service vsftpd restart
8、设置开机启动
systemctl enable vsftpd.service
PS:其他相关命令
查看服务是否启动 ps -ef|grep ftp
停止命令 service vsftpd stop
二、新建用户
1、创建用户,并指定分组和主目录(根据自己的需求设定参数)
useradd -d /var/ftp/ftpuser -s /sbin/nologin -G root ftpuser
解析:
useradd 添加用户ftpUser
-d 指定用户根目录为/opt/reconciliation
-s 指定shell脚本为/sbin/nologin,表示不允许shell登录 (vi /etc/passwd 编辑用户shell权限的地方)
-g 创建分组ftpGroup
-G 指定root分组
PS:相关命令:
usermod -s /sbin/nologin ftpuser 修改用户登入后所使用的shell
usermod -s /bin/bash ftpuser
usermod -d /var/www/html ftpuser 修改用户登入时的主目录
userdel -r ftpuser 删除指定用户 -r 参数是指删除用户全部文件
2、查看用户
cat /etc/passwd
3、设定密码
passwd ftpuser
4、设置访问权限
chown ftpuser /var/ftp/ftpuser
安装ftp客户端 (便于本地测试,非必须)
rpm -Uvh http://mirror.centos.org/centos/6/os/x86_64/Packages/ftp-0.17-54.el6.x86_64.rpm
三、测试
我是直接安装了ftp客户端,直接在本地测试,当然也可在windos上测试
ftp localhost
连接成功, 可查看当前目录文件
ftp> ls
可切换至上级目录
ftp> cdup
其他常用命令
ftp> cd # 同UNIX的CD命令.
ftp> cdup # 返回上一级目录
ftp> ls #查看当前目录文件
ftp> dir #查看当前目录文件
ftp> put #上传
ftp> get #下载
为安全起见,需要将ftp用户限定于指定文件夹
查看 /etc/vsftpd/vsftpd.conf 配置文件中 chroot_list_enable
cat /etc/vsftpd/vsftpd.conf | grep "chroot_local_user",该项值默认注释,即默认值为NO,不将所有用户限制在主目录。
修改vsftpd.conf,放开注释,再重启ftp服务即可
重新登录
发现报错,500 OOPS: vsftpd: refusing to run with writable root inside chroot(),如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误,因此需要赋予主目录的写权限。添加如下配置即可:
allow_writeable_chroot=YES
修改完配置文件,再重启服务后,再次连接,能登录成功,再次切换至上级目录时,仍停留在主目录,由此,所有配置已完成。
常见报错极解决方案
一、防火墙
阿里云服务器默认端口是未开启的,需要手动配置策略,我就因为端口的问题,掉坑了,
强烈推荐一个小工具 tcpiing,ping 命令不能带端口,tcping最大的一个特点就是可以指定监控的端口。tcping命令使用方法很简单
工具下载使用参考链接:https://www.cnblogs.com/kuoAT/p/7515403.html
centos7 查看防火墙
systemctl status firewalld
结果:Active: active (running/dead) 运行/非运行
启动防火墙 systemctl start firewalld
阻止所有服务器访问1521端口 iptables -I INPUT -p tcp --dport 1521 -j DROP
放行172.17.79.4 iptables -I INPUT -s 172.17.79.4 -p tcp --dport 1521 -j ACCEPT
打开21端口:iptables -I INPUT -p tcp --dport 21 -j ACCEPT
PS:查看端口占用
ss -lntpd | grep :22
netstat -tnlp | grep :22
netstat -ntulp |grep 80
fuser 22/tcp
二、linux ftp 530 Login incorrect
解决方案
检查/etc/pam.d/vsftpd,将pam_shells.so 修改为pam_nologin.so 即可
------------------------------------------------------------------------华丽丽的分割线----------------------------------------------------------------------------
附注:
很多文章配置时都提到了 userlist_enable、userlist_deny以及chroot_local_user 、chroot_list_enable,多半都没说清楚,反而导致了很多问题,根据我踩过的坑,将详细的说明附注如下:
(一)
vsftpd.ftpusers:位于/etc/vsftpd目录下。它指定了哪些用户账户不能访问FTP服务器,例如root等。
vsftpd.user_list:位于/etc/vsftpd目录下。该文件里的用户账户在默认情况下也不能访问FTP服务器,仅当vsftpd .conf配置文件里启用userlist_enable=NO选项时才允许访问。
vsftpd.conf:位于/etc/vsftpd目录下。来自定义用户登录控制、用户权限控制、超时设置、服务器功能选项、服务器性能选项、服务器响应消息等FTP服务器的配置。
userlist_enable和userlist_deny两个选项联合起来针对的是:本地全体用户(除去ftpusers中的用户)和出现在user_list文件中的用户以及不在在user_list文件中的用户
这三类用户集合进行的设置。
当且仅当userlist_enable=YES时:userlist_deny项的配置才有效,user_list文件才会被使用;当其为NO时,无论userlist_deny项为何值都是无效的,
本地全体用户(除去ftpusers中的用户)都可以登入FTP
当userlist_enable=YES时,userlist_deny=YES时:user_list是一个黑名单,即:所有出现在名单中的用户都会被拒绝登入;
当userlist_enable=YES时,userlist_deny=NO时:user_list是一个白名单,即:只有出现在名单中的用户才会被准许登入(user_list之外的用户都被拒绝登入);
另外需要特别提醒的是:使用白名单后,匿名用户将无法登入!除非显式在user_list中加入一行:anonymous
(二)
chroot_local_user
是否将所有用户限制在主目录,YES为启用 NO禁用.(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到要目录之外的)
chroot_list_enable
是否启动限制用户的名单 YES为启用 NO禁用(包括注释掉也为禁用)
chroot_list_file=/etc/vsftpd/chroot_list
是否限制在主目录下的用户名单,至于是限制名单还是排除名单,这取决于chroot_local_user的值。