一、ftp含义FTP(File Transfer Protocol)文件传输协议,主要目的使得主机之间可以共享文件。监听在tcp的21端口,是一个文件共享服务,主要工作在应用层;FTP使用tcp生成一个虚拟连接用于控制消息,然后再生成一个单独的tcp连接用于数据传输。控制连接(命令连接)使用类似telnet协议在主机间交换命令和消息。ftp客户端可以给服务器端发出命令来下载文件、上传文件、创建或删除服务器上的目录。二、ftp连接方式1.数据连接 数据连接属于按需打开,按需关闭,对于ftp服务器而言,有两种模式; 1.1主动模式: 服务器端主动连接客户端,此时服务器端监听在21/tcp,而对于客户端来讲,监听端口打开一个随机端口(端口号大于1024,在这里,我们称它为x),客户端开始打开监听端口(x+1),同时向服务器端发送一个端口命令,此命令是告诉客户端正在监听的端口号并准备好端口接受数据,服务器端打开20号端口并建立数据端口的连接。 1.2被动模式: 在被动方式中,命令连接和数据连接都是由客户端发起的,客户端打开两个任意的非特权本地端口(n>1024和n+1),第一个端口连接服务器的21端口,但与主动方式的ftp不同,客户端不会提交PORT命令并允许服务器来回连接它的数据端口,而是提交PASV命令。服务器会开启一个任意的非特权端口(P>1024),并发送命令给客户端,然后客户端发起本地端口n+1到服务器的端口的连接用来传送数据。 2.控制连接 控制连接也称为命令连接,监听在20/tcp三、ftp服务器端服务程序vsftpd在生产环境中主要会用到服务程序vsftpd,下面我主要对vsftpd程序的文件目录结构做个简单了解四、ftp用户分类匿名用户(anonymous):主要用到的用户是ftp和anonymous用户,但最终映射为一个系统用户,同时也要注意,匿名用户登录ftp服务器时也要写上匿名用户名称 系统用户:也称为本地用户,对于系统用户来说,一般要禁锢在其家目录下 虚拟用户:虚拟用户最终也要映射为一个系统用户登录ftp服务器五、分析vsftpd的主配置文件##################定义匿名用户##################### anonymous_enable={YES|NO}:是否启动匿名用户 anon_upload_enable={YES|NO}:控制是否允许匿名用户上传文件 anon_mkdir_write_enable={YES|NO}:控制是否允许匿名用户创建目录 anon_other_write_enable={YES|NO}:控制是否允许匿名用户可以执行其它操作,比如:删除目录 dirmessage_enable=yes:定义进入匿名用户的家目录下时,是否开启目录显示提示功能 message_file=.message:定义提示信息的文件名,该项只有在dirmessage_enable激活后才可以使用,一般要在匿名用户的家目录下创建一个.message文件,在此文件中定义提示信息内容 说明:为了演示效果,我将选项都设置为YES ##################################################################
以ftp匿名用户名登录ftp服务
[root@ftp~]#ftp172.16.52.2 Connectedto172.16.52.2. 220(vsFTPd2.0.5) 504UnknownAUTHtype. 504UnknownAUTHtype. KERBEROS_V4rejectedasanauthenticationtype Name(172.16.52.2:root):ftp 331Pleasespecifythepassword. Password: 230Loginsuccessful. RemotesystemtypeisUNIX. Usingbinarymodetotransferfiles.创建目录
上传文件
删除文件
#vim/var/ftp/upload/.message####在文件中可以自己定义提示信息,这个过程略过 #########################定义系统用户############################ local_enable={YES|NO}:是否启动系统用户 write_enable={YES|NO}:是否定义系统用户上传文件 chroot_list_enable={YES|NO}:是否禁锢指定用户在其家目录下 chroot_list_file=/etc/vsftpd/chroot_list:把禁锢用户写在定义的文件中,这个文件事先不存在,一般这个选项与上一条一起使用 chroot_local_user={YES|NO}:表示是否定义所有用户都被禁锢在家目录下 userlist_enable={YES|NO}:表示是否使用控制用户登录的用户列表,如果用户出现在此列表中,则在登录ftp服务器时被vsftpd禁止使用 userlist_deny={YES|NO}:是否允许此文件中的用户登录ftp服务,当为no时表示仅允许user_list文件中的用户登录 在/etc/vsfptd目录下有个ftpuser文件,定义在此文件中的用户都被禁止登录ftp服务,主要这个文件起作用 在/etc/vsfptd目录下还有个user_list文件,是否允许用户登录ftp可以自己定义,写在这个文件中的用户都不能登录##################################################################系统用户上传文件
#useraddluo #echo“luo”|passwd–stdinluo禁锢所有用户都在自己的家目录下
[root@ftp~]#ftp172.16.52.2 Connectedto172.16.52.2. 220(vsFTPd2.0.5) 530PleaseloginwithUSERandPASS. 530PleaseloginwithUSERandPASS. KERBEROS_V4rejectedasanauthenticationtype Name(172.16.52.2:root):luo 331Pleasespecifythepassword. Password: 230Loginsuccessful. RemotesystemtypeisUNIX. Usingbinarymodetotransferfiles. ftp>pwd 257"/"不允许user_list文件中的用户登录ftp服务
设置userlist_deny=YES,并在/etc/vsftpd/user_list文件中添加系统用户luo [root@ftp~]#ftp172.16.52.2 Connectedto172.16.52.2. 220(vsFTPd2.0.5) 530PleaseloginwithUSERandPASS. 530PleaseloginwithUSERandPASS. KERBEROS_V4rejectedasanauthenticationtype Name(172.16.52.2:root):luo 530Permissiondenied. Loginfailed.允许user_list文件中的用户登录ftp服务
设置userlist_deny=NO,表示除了user_list文件中的用户都不可以访问ftp服务 [root@ftp~]#ftp172.16.52.2 Connectedto172.16.52.2. 220(vsFTPd2.0.5) 530PleaseloginwithUSERandPASS. 530PleaseloginwithUSERandPASS. KERBEROS_V4rejectedasanauthenticationtype Name(172.16.52.2:root):luo 331Pleasespecifythepassword. Password: 230Loginsuccessful. RemotesystemtypeisUNIX. Usingbinarymodetotransferfiles. ###此时的系统用户luo还在user_list文件中,大家可以多设置几个系统用户测试一下开启日志功能,使用系统用户上传、下载文件上传文件到系统用户的家目录下
ftp>lcd/etc Localdirectorynow/etc ftp>putfstab local:fstabremote:fstab 227EnteringPassiveMode(172,16,52,2,41,90) 150Oktosenddata. 226FilereceiveOK. 608bytessentin0.0002seconds(2.9e+03Kbytes/s) ftp>ls 227EnteringPassiveMode(172,16,52,2,151,90) 150Herecomesthedirectorylisting. -rw-r--r--125312531608Apr2108:04fstab下载文件到/var目录下
ftp>pwd 257"/"ftp>lcd/var Localdirectorynow/var ftp>getfstab local:fstabremote:fstab 227EnteringPassiveMode(172,16,52,2,74,110) 150OpeningBINARYmodedataconnectionforfstab(608bytes). 226FilesendOK. 608bytesreceivedin0.00036seconds(1.6e+03Kbytes/s) ftp>ls 227EnteringPassiveMode(172,16,52,2,57,76) 150Herecomesthedirectorylisting. -rw-r--r--125312531608Apr2108:04fstab查看上传、下载日志的记录信息六、ftps安全通信的实现1.生成CA私钥
#cd/etc/pki/CA CA#(umask077;opensslgenrsa–keyprivate/cakey.pem2048)2.生成CA自签证书3.创建文件和目录
CA#mkdirnewcertscertscrl CA#touchindex.txt CA#echo01>serial4.在/etc/vsftpd/目录下创建ssl目录,并在目录下生成密钥
#cd/etc/vsftpd vsftpd#mkdirssl vsftpd#cdssl ssl#(umask077;opensslgenrsa-outvsftpd.key2048)
5.vsftpd签署申请证书请求,同时在配置文件/etc/pki/tls/f修改指定的目录
#vim/etc/pki/tls/f dir=/etc/pki/CA6.CA机构为vsftpd服务签署请求的证书7.在vsftpd配置文件中添加内容8.测试非认证用户
还可以使用openssl模拟客户端连接ftp服务器
9.安装客户端软件
我这里使用的是FlashFXP.zip压缩包,大家可以下载一下关于ftp服务器的这几个操作是很常用的,也是在生产环境中非常重要的操作,所谓小小的操作,会制造出大大的效果;如果在这次演示中有什么不太完整的地方,希望好朋友们提出来,这也算是一种进步吧!