NFS,SAMBA都是基于RPC的网络文件系统,用户可以挂载共享目录到本地来使用,与本地磁盘分区上的文件系统使用方式无区别。
FTP是不用RPC而基于C/S模式来运行的7层协议,提供文件传输服务。
一 两种工作模式
主动模式:服务端命令连接监听在端口21,数据连接使用端口20。客户端通过某个本地端口(如12340)去连接服务端,服务端通过21端口接收客户端的命令。当有数据传输时客户端又再打开一个本地端口12340+1(如这个端口已被占用,再+1)并通知服务端,服务端使用20端口主动去请求连接客户端新打开的端口,完成数据传输。
被动模式:服务端命令连接监听在端口21。客户端通过某个本地端口(如12340)去连接服务端,服务端通过21端口接收客户端的命令。当有数据传输需求时,服务端打开一个随机端口并通知客户端(服务端会发送两个数字如[123,31],客户端通过计算123*256+31的结果得知端口号),然后客户端再打开一个本地端口12340+1(如这个端口已被占用,再+1)去请求连接服务端打开的随机端口,完成数据传输。由于每次数据连接端口都是随机的,所以也就有了多用户同时下载功能。
客户端为了网络安全都有防火墙,一般不会允许外部的连接请求,从而导致主动模式的ftp数据传输失败。服务器工作于被动模式下的同时使用防火墙的连接追踪功能可以避免这个问题。
二 数据传输格式
流式化数据有两种形式:文本格式/二进制格式。
不能流式化的数据不能通过网络发送,也不能存储到文件中(文件就是文件流)。
ftp能传输文本格式和二进制格式的数据。http传输二进制数据的功能,是基于mime协议以base64编码二进制格式数据为文本格式后再传输的。
数据传输安全
sftp(基于ssh协议)
ftps(基于ssl协议)
三 程序包
服务端程序:vsftpd
客户端程序:GUI(flashfxp,cuteftp),CLI(ftp,lftp,wget)
安装 yum -y install vsftpd ftp
主配置文件:/etc/vsftpd/vsftpd.conf(配置项行首无空格,等号两边无空格)
基于pam认证用户的配置文件:/etc/pam.d/vsftpd(rpm包方式安装才有,主要包括:身份检查/账号检查/会话检查/修改密码检查等)
ftp用户家目录:/var/ftp/(匿名用户默认被禁锢在这个目录,windows上匿名用户登录用anonymous)
所有三种类型的用户上传文件的umask都为077
四 匿名用户登录控制
允许匿名用户登录
anonymous_enable=YES
允许匿名用户上传(需要文件系统权限+服务权限),最好在/var/ftp目录下新建任意目录,并给这个目录加facl权限rwx给ftp用户
anon_upload_enable=YES #上传文件
anon_other_write_enable=YES #删除文件
anon_mkdir_write_enable=YES #创建目录
指定匿名用户上传文件的属主
chown_uploads=YES
chown_username=ftp
如果开启了SELinux,还需要命令行中修改域
setsebool -P ftpd_full_access=on
五 本地用户登录控制
允许本地用户登录
local_enable=YES
允许本地用户上传
write_enable=YES
匿名用户或ftp用户都默认被禁锢在家目录中,为了安全,本地用户也应该禁锢在各自家目录中
chroot_local_user=YES
或者使用下面的(用户名写入文件,每行一个,写入的全部禁锢)
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
控制本地用户登录机制
1./etc/pam.d/vsftpd中定义了规则,限制写在文件/etc/vsftpd/ftpusers文件中的用户不能登陆。
2.还可以在主配置文件中设置
userlist_enable=YES #启用文件/etc/vsftpd/user_list
userlist_deny=YES #默认值,表示黑名单,如果是NO则是白名单
3.ftpusers文件中的规则优先于user_list文件
六 虚拟用户登录控制
创建虚拟用户库文件
cd /etc/vsftpd
vim vuser.txt #写入用户名密码,单数行写用户名,双数行写密码
zhangsan
123456
lisi
123
db_load -T -t hash -f vuser.txt vuser.db
chmod 600 vuser.db
rm -rf vuser.txt
创建一个本地用户,用于虚拟用户映射
useradd -d /var/ftproot -s /sbin/nologin virtual
chmod -Rf 755 /var/ftproot
提供pam认证规则,写入这个文件中/etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
在主配置文件中支持虚拟用户
anonymous_enable=NO #启用虚拟用户必须关闭匿名用户
local_enable=YES
guest_enable=YES
guest_username=virtual #虚拟用户映射的本地用户名
pam_service_name=vsftpd.vu #pam规则配置文件
allow_writeable_chroot=yes #vsftpd2.2 中不支持这一项,可以不用
user_config_dir=/etc/vsftpd/vuser_dir #虚拟用户权限控制文件存放目录
给虚拟用户分别设置访问权限
mkdir /etc/vsftpd/vuser_dir
vim /etc/vsftpd/vuser_dir/zhangsan
anon_upload_enable=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES
重启vsftpd服务即可检查虚拟用户登录效果