linux文件共享服务器,有三种:
1.工作在应用层的ftp服务器;
2.工作在linux系统内核的nfs服务器,由sun开发。不能跨windows平台,只能用于linux和unix之间。类似于windows的ntfs文件共享服务器。
3.跨windows平台的samba服务器,因为它在linux实现了CIFS协议(windows的smb协议)。
文件存储有三种协议:DAS,NAS,SAN。
NAS,SAN用于共享存储。
linux的samba和windows的smb(ntfs)共享文件服务器用的就是NAS,基于CIFS或SMB协议,用于文件共享。
SAN,跨级别共享。
 
FTP:File Transfer Protocol,基于应用层协议:tcp,21端口;C/S架构。
FTP的数据:
  1.命令连接:文件管理类命令,持久性连接,始终在线。
  2.数据连接:数据传输,按需创建及关闭的连接。
    数据传输格式:文本传输和二进制传输。图片使用二进制传输格式。因此数据传输格式,是根据文件格式而定。
    主动连接:由服务器创建连接。
      命令连接:由clintt随机一个端口连接server的21端口
      数据连接:server的20/tcp连接client的命令连接端口+1的端口
    被动连接:由客户端创建连接。常用连接。    
      命令连接:由clintt随机一个端口连接server的21端口
      数据连接:client的命令连接端口+1的端口连接server的随机端口。server的随机端口,由命令连接时确定。
FTP的C/S架构: Server服务器的FTP软件有:wu-ftpd,proftpd,pureftp,vsftpd(very secure ftpd),ServU,filezilla-server
  Client端的FTP工具有:ftp,lftp(lftpget),wget,curl,filezilla,gftp(linux gui开源),商业软件(flashfxp,cuteftp)
FTP的响应码:1xx:信息,2xx:成功类的状态码,3xx:提示需进一步提供补充类信息的状态码,4xx:客户端错误,5xx:服务端错误
FTP的用户认证:
  虚拟用户:仅用于访问某特定服务(如mysql,ftp)中的资源。存放在文件或数据库中。
    nsswitch:network service switch,名称解析框架。模块位置:/lib64/libnss*,/usr/lib64/libnss*。配置文件位置:/etc/nsswitch.conf
    pam:pluggable authentication module插入式认证模块,用户认证框架。模块位置:/lib64/security/。配置文件位置:/etc/pam.conf,/etc/pam.d/*
  系统用户:早期,ftp用户认证所使用的用户是linux的系统用户。现在既可使用linux用户,也可使用虚拟用户。虚拟用户也要映射系统用户!
 
FTP服务器安装CENTOS6.8:yum -y install vsftpd
  查看vsftpd安装了哪些文件:rpm -ql vsftpd | less
  用户认证配置文件:/etc/pam.conf,/etc/pam.d/*
  服务脚本:/etc/rc.d/init.d/vsftpd
  配置文件目录:/etc/vsftpd
    主配置文件:/etc/vsftpd/vsftpd.conf
    控制哪些用户可登录ftp:/etc/vsftpd/ftpusers,/etc/vsftpd/user_list
  主应用程序:/usr/sbin/vsftpd
  匿名用户(映射为ftp用户)共享资源位置:/var/ftp
  系统用户通过ftp访问的资源的位置:用户自己的家目录
  虚拟用户通过ftp访问的资源的位置:给虚拟用户指定的映射成为系统用户的家目录
  启动vsftpd:service vsftpd start
  防火墙:iptables -L -n
 
编辑vsftpd配置文件:
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
vim  /etc/vsftpd/vsftpd.conf
匿名用户配置:
  是否启用匿名用户:anonymous_enable=YES,默认启用
  匿名用户是否可以上传文件:anon_upload_enable=YES,默认被注释
  匿名用户是否可以创建文件:anon_mkdir_write_enable=YES,默认被注释
    修改某用户对某文件夹的权限:setfacl -m u:ftp:rwx 某文件夹
  匿名用户是否有写权限(如删除文件):anon_other_write_enable=YES,默认被注释
系统用户配置:
  是否启动系统用户:local_enable=YES
  系统用户是否有写权限:enable_user=YES,默认开启
  系统用户默认的umask:local_umask=022
  锁定所有系统用户在其家目录,即禁止访问其它人的家目录:chroot_local_user=YES
  锁定文本中指定的系统用户在其家目录:chroot_local_user=YES,chroot_list_file=/etc/vsftpd/chroot_list
目录信息:dirmessage_enable=YES
  创建目录信息,在相应的目录下创建.message
日志:
  是否启用传输日志:xferlog_enable=YES
  是否启用标准的传输日志格式:xferlog_std_format=YES
  指定日志文件位置:xferlog_file=/var/log/xferlog
是否改变上传文件的属主:
  chown_uploads=YES,默认被注释
  chown_username=whoever
用户的空闲会话超时时间:edle_connection_timeout=120
数据连接超时时间:data_connection_timeout=YES
是否强制启动ascii文本上传下载:ascii_upload_enable=YES,ascii_download_enable=YES,建议不启用,将它注释掉
欢迎信息:ftp_banner=welcome message
vsftpd使用pam完成用户认证:pam_service_name=vsftpd
是否启用控制用户登录的列表文件:
  user_list_enable=YES,此项启用以后,在/etc/vsftpd/ftpusers中的用户,将拒绝登录。即YES,启用黑名单。
  user_list_deny=YES|NO,YES表示启用黑名单,文件中的用户列表属于黑名单;NO启用白名单。默认文件/etc/vsftpd/user_list
连接限制:
  max_clients:最大并发连接数
  max_per_ip:每个IP可同时发起的并发请求数
传输速率:
  anon_max_rate:所有匿名用户总和的最大传输速率,单位“字节/秒”
  local_max_rate:所有系统用户总和的最大传输速率,单位“字节/秒”
 
虚拟用户:所有的虚拟用户会被统一映射 为一个指定的系统帐号,访问的共享位置即为此系统帐号的家目录。
  各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定。
  虚拟用户帐号的存储方式:
    文件:奇数行为用户,偶数行为密码。此文件需要被编码为hash格式。不可直接读。具每增加一个用户会重新编码一次。
    关系型数据库中的表中:即使查询数据库完成用户认证。如mysql库,此时pam要依赖于第三方pam-mysql,要安装此依赖
      yum install pam_mysql
 
示例:
一、安装所需要程序
1、安装mysql和pam_mysql
# yum -y install  mysql-server mysql-devel pam_mysql
注意:pam_mysql由epel源提供。
二、创建虚拟用户账号
1.准备数据库及相关表
首先请确保mysql服务已经正常启动。而后,按需要建立存储虚拟用户的数据库即可,这里将其创建为vsftpd数据库。
mysql> create database vsftpd;
mysql> grant select on vsftpd.* to vsftpd@localhost identified by 'www.magedu.com';
mysql> grant select on vsftpd.* to vsftpd@127.0.0.1 identified by 'www.magedu.com';
mysql> flush privileges;mysql> use vsftpd;
mysql> create table users (
 id int AUTO_INCREMENT NOT NULL,
 name char(20) binary NOT NULL,
password char(48) binary NOT NULL,
 primary key(id)
 );2、添加测试的虚拟用户
根据需要添加所需要的用户,需要说明的是,这里将其密码为了安全起见应该使用PASSWORD函数加密后存储。
mysql> insert into users(name,password) values('magedu1',password('magedu'));
mysql> insert into users(name,password) values('magedu2',password('magedu'));三、配置vsftpd
1.建立pam认证所需文件
#vi /etc/pam.d/vsftpd.mysql
添加如下两行
auth required /lib/security/pam_mysql.so user=vsftpd passwd=www.magedu.com host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib/security/pam_mysql.so user=vsftpd passwd=www.magedu.com host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2注意:由于mysql的安装方式不同,pam_mysql.so基于unix sock连接mysql服务器时可能会出问题,此时,建议授权一个可远程连接的mysql并访问vsftpd数据库的用户。
2.修改vsftpd的配置文件,使其适应mysql认证
建立虚拟用户映射的系统用户及对应的目录
# useradd -s /sbin/nologin -d /var/ftproot vuser
# chmod go+rx /var/ftproot请确保/etc/vsftpd.conf中已经启用了以下选项
anonymous_enable=NO
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES而后添加以下选项
guest_enable=YES
guest_username=vuser并确保pam_service_name选项的值如下所示
pam_service_name=vsftpd.mysql四、启动vsftpd服务
# service vsftpd start
# chkconfig vsftpd on查看端口开启情况
# netstat -tnlp |grep :21
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      23286/vsftpd 使用虚拟用户登录,验正配置结果,以下为本机的命令方式测试,你也可以在其它Win Box上用IE或者FTP客户端工具登录验正
# ftp localhost 
五、配置虚拟用户具有不同的访问权限
vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可。
1、配置vsftpd为虚拟用户使用配置文件目录
# vim vsftpd.conf
添加如下选项
user_config_dir=/etc/vsftpd/vusers_config 2、创建所需要目录,并为虚拟用户提供配置文件
# mkdir /etc/vsftpd/vusers_config/
# cd /etc/vsftpd/vusers_config/
# touch tom jerry3、配置虚拟用户的访问权限
虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。比如,如果需要让tom用户具有上传文件的权限,可以修改/etc/vsftpd/vusers_config/tom文件,在里面添加如下选项即可。
anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable={YES|NO} 
 
客户端工具:ftp,lftp,wget,curl
# lftp -u 用户名 主机名
# lftp -u 用户名,密码  主机名
多线程并发下载客户端工具:axel
 
windows客户端工具:filezilla,flashFXP
ftp协议是明文
ftps基于ssl
sftp基于ssh