FTP服务是c/s结构(有服务器和客户端),需要两个套接字。客户端的端口是随机生成的,服务器端有两个端口,分别为命令端口(通讯端口)、数据端口;1.命令端口是用来传输指令的。2.数据端口是用来传输数据的,只有传输数据时才会打开(传输结束立即关闭)。
命令端口是固定的,TCP的21端口;数据端口有两种情况:
1.FTP的工作模式为被动模式时,数据端口不固定
2.主动模式时,数据端口固定为20
FTP的两种工作模式:主动模式、被动模式
被动模式:客户端发起连接请求,连接到服务器,虽然数据端口不固定,但是可以通过命令端口来协商数据端口,进行数据传输。
计算方法:FTP命令连接时的界面中出现的IP地址之后两个数字,例如:172.18.0.1.181.0;其中第一个数字乘256再加第二个数字,结果就是服务器端的数据端口号:182*256+0
客户端的命令与数据端口的关系不一定是port+1
主动模式:服务器端主动连接客户端,数据端口固定为20。
主动模式与被动模式的切换:使用passive命令,默认为被动模式,使用命令切换为主动模式,再敲命令,变为被动模式
由于客户端有防火墙,限制外网连接,所以主动模式容易连接失败;服务器端也有防火墙,但是,防火墙会分析命令端口发来的数据包,找到其中记载的数据端口号,并打开,允许客户端访问;FTP服务的工作模式取决于服务器,一般两种模式都会允许访问。
不同的客户端工作模式不同:
1.linux系统默认为被动模式。
2.windows系统默认为主动模式
FTP的数据传输格式有两种:
1.二进制格式(默认)
2.文本格式
数据作为文本传输时可以考虑文本格式,但是linux与windows进行数据传输时,作为文本格式传输,FTP服务会自动进行格式转换,有可能造成数据破坏,尤其是图片类的文件,最好以二进制方式传输。
FTP服务器端软件:Wu-ftpd、servu、proftpd、IIS(windows软件,可提供FTP、HTTP服务)
linux系统使用vsftpd
客户端软件:gftp(图形化工具,centos6、7已经不再使用);filezilla(专业FTP软件,也可作ssh服务)
FTP的用户认证:
1.匿名用户,登陆时可以不用输入用户名和密码,也可输入ftp、anonymous用户名(系统自动提交的用户)。匿名用户一登陆,就会默认在用户的家目录下:/var/ftp,若不希望进入此目录,可以更改用户的家目录
2.系统用户: 用户/etc/passwd,密码:/etc/shadow
3.虚拟用户,针对FTP服务的用户,与linux系统用户无关。需要建立文件存放用户名与密码,但有安全隐患,所以也可以转存到数据库中。虚拟用户要用到用户名与密码的管理,使用nsswitch(名称解析框架)
一、vsftpd服务默认是独立服务,但可以改为非独立服务,使用xinetd进行托管。
vsftpd服务默认以root帐号作为服务帐号,以root身份运行,并且为单层服务,没有父进程与子进程之分。
启动服务打开了21端口,帮助文档man 5 vsftpd.conf:定义了主配置文件的格式k/v形式:option=value (key=value)。主配置文件中默认端口为21(没有相关定义),也可以更改(需手动添加,文件中没有段落分层,可在任意行添加):
更改后客户端访问时要指明端口
二、主动模式的端口定义
vsftpd进行连接服务时(有用户访问时,会开子进程),以root和nobody以及ftp的身份运行,分为父进程和子进程,第一个进程是root,第二个子进程为nobody,第三个子子进程为ftp,三个进程代表一次连接,意味着用户连接一次要开三个进程
三、定义被动模式的端口范围:手动添加两行,6000与6001意味者打开两个端口,同一时间只能有两个用户可以传输数据
四、时区问题
帮助文档中定义默认为NO,即不使用GMT(格林尼治时间),使用当地时间
默认支持匿名帐号,更改为不支持:
虽然是匿名用户,但也要密码验证(密码任意输),可改为略过密码检查:手动添加一行
六、修改匿名用户的家目录
1.创建目录
2.匿名登录使用的用户是ftp,修改创建的目录的所有者
不用重启服务就可以生效,此处不需要更改配置文件,只更改了帐号的家目录(vsftp服务会以root身份运行,当用户访问时才会以ftp的身份运行)
更改匿名用户的家目录后,不能进行上传文件等操作,给创建的目录以写权限,或者acl方式给ftp帐号写权限,都不能进行文件的上传等操作,
说明匿名用户的家目录不允许有写权限。
要想解决问题,可以在家目录下创建子目录,使之具有写权限:
1.创建子目录
2.直接上传文件,权限拒绝,有两个原因:一是目录本身没有权限(文件系统的权限),二是ftp服务本身没有给目录上传的权限(服务本身的权限)
3.打开服务的权限
4.针对ftp用户,给予目录的读写执行权限
成功上传
实现在子目录下创建目录的功能,更改配置文件
系统用户
默认操作系统的用户可以登录ftp,登录以后,显示在自己的家目录中,也可以切换到其他目录中(存在安全隐患)
基于安全考虑,需要设置:
1.将所有系统用户映射成指定的guest用户,配置文件中设置
指定的whoever用户的家目录有写权限,不允许登录,所以要将用户家目录的写权限去掉
登录后显示的家目录不是mage的家目录,而是whoever的家目录/home/whoever,此时就不能再切换目录了,保证了安全问题
配置文件中设置允许linux用户(本地的系统用户)登录,改为no,则wang帐号不能登录
允许用户上传文件(默认允许),如果注释掉,意味着普通帐号不能上传文件
指定非匿名用户登录的目录。配置文件中手动添加一行,则所有用户登录都在/app下,但不影响切换目录,安全性不高
禁锢所有用户在家目录中,不能切换目录,配置文件中默认是no
.禁锢特定的目录
禁锢列表中的用户在自己的家目录中,配置文件中,YES表示列表中的用户不禁锢,NO表示禁锢。意味着YES时,列表是白名单;NO时为黑名单