FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。
工作方式
主动模式:客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口,也就是21端口。然后客户端开始 监听端口N+1,并发送FTP命令“port N+1”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。
被动模式:当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口(N > 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交 PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。
先安装vsftpd
[root@localhost ~]# yum install vsftpd -y[root@localhost ~]# systemctl start vsftpd #启动vsftpd[root@localhost ~]# systemctl status vsftpd #查看vsftpd状态
vsftpdservice - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpdservice; disabled; vendor preset: disabled)
Active: active (running) since 五 2018-02-02 08:22:39 CST; 1min 50s ago
Process: 12558 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpdconf (code=exited, status=0/SUCCESS)
Main PID: 12559 (vsftpd)
CGroup: /systemslice/vsftpdservice
└─12559 /usr/sbin/vsftpd /etc/vsftpd/vsftpdconf
vsftp三种认证模式
annoymous 匿名用户 #无虚输入密码即可访问
local user 真实用户 #服务器上存在的用户
guest user 虚拟用户 #映射到ftp服务器的用户
vsftpd的默认配置文件
[root@localhost ~]# vim /etc/vsftpd/vsftpdconf
# Allow anonymous FTP (Beware - allowed by default if you comment this out)anonymous_enable=YES #允许匿名用户登陆## Uncomment this to allow local users to log in# When SELinux is enforcing check for SE bool ftp_home_dirlocal_enable=YES #允许本地用户登陆## Uncomment this to enable any form of FTP write commandwrite_enable=YES #允许本地用户读写## Default umask for local users is 077 You may wish to change this to 022,# if your users expect that (022 is used by most other ftpd's)local_umask=022 #本地用户创建文件的umask值
dirmessage_enable=YES #当用户进入某个目录时,会显示该目录需要注意的内容是 messagexferlog_enable=YES #启动维护记录服务器上传和下载情况的日志文件connect_from_port_20=YES #FTP PORT主动模式进行数据传输时使用20端口xferlog_std_format=YES #传输日志文件将以标准 xferlog 的格式书写listen_ipv6=YES #监听ipv6pam_service_name=vsftpd #pam认证模块的名字userlist_enable=YES #拒绝登陆ftp的名单tcp_wrappers=YES #限制IP访问vsftpd
匿名用户认证
我们刚才已经开启了vsftpd 我们已经可以登陆ftp站点 #需关闭防火墙或设置规则 并关闭selinux
我们已经登陆到ftp站点了
试着创建一个文件夹 出现550报错 是因为我们是以匿名用户登陆到FTP站点 并没有给匿名用户创建目录的权限
在vsftpd配置文件中添加
anon_upload_enbale #允许匿名用户上传anon_mkdir_write_enable=yes #允许匿名用户创建目录anon_other_write_enable=yes #允许匿名用户修改目录名称或删除目录
再赋予匿名用户登陆的文件夹最高权限
chmod 777 /var/ftp/pub
已经可以创建并修改文件夹
还有一种方法 是将匿名用户登陆到的目录系统用户改成ftp 就不用修改目录权限
[root@localhost ~]#chown -Rf ftp /var/ftp/pub
本地用户模式
修改vsftp配置文件
[root@localhost ~]# vim /etc/vsftpd/vsftpdconf
加入一行
local_root=/etc/ftp
创建 一个用户
[root@localhost ~]#useradd 51cto[root@localhost ~]# passwd 51cto更改用户 51cto 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
创建这个目录
[root@localhost ~]#mkdir /etc/ftp
重启一下vsftpd
用我们刚创建的用户登陆
登陆成功
诶? 既然说本地用户模式是 服务器上真是存在的用户 那我们的管理员root 也是真实存在的 那是否可以登陆呢?
无法登陆 这是为什么呢?
这是因为vsftpd有一个禁止用户登陆的名单
在上面的匿名用户说过 vsftpd默认是开启禁止用户名单的 我们的root用户在名单之中 自然就无法登陆了 禁止root用户登陆也对服务器提升了安全性 防止通过ftp爆破root密码
虚拟用户
虚拟用户是这三种认证模式中最安全的一种 也稍微复杂一些
虚拟用户是用PAM认证模块中配置 FTP认证的数据库文件来进行加密
关于PAM认证可以看>
首先我们在/etc/目录下 创立一个用户数据库文件
奇数行为账户偶数行为密码
为了安全我们用db_load命令 用哈希算法将明文信息转换成密文数据库文件并降低文件的权限 避免其他人看到数据库文件
[root@localhost etc]#db_load -T -t hash -f /etc/ftp/ftptxt ftpdb[root@localhost etc]#rm ftptxt[root@localhost etc]#chmod 600 ftpdb
我们用默认的pam文件 注释其他行
新加两行
db_load 后面跟的是数据库的路径不用写数据库的后缀
创建存放虚拟用户配置文件的目录
[root@localhost etc]#mdir -p /etc/ftp
配置虚拟用户权限
[root@localhost ftp]#vim user1
[root@localhost ftp]#vim user2
创建两个用户登陆的目录
[root@localhost ftp]#mkdir -p /home/user1 [root@localhost ftp]#mkdir -p /home/user2赋予最高权限
[root@localhost ftp]#chmod 777 /home/
修改vsftpd配置文件
重启一下vsftpd
测试一下权限
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)