天天看点

Linux自学笔记——文件共享服务之ftp

文件共享服务:

 ftp:应用层,c/s架构,文件共享;

 nfs,cifs:文件系统接口,网络文件系统;

 nfs:(network file system)是unix和linux系统上常见的内核的网络文件共享服务;

  cifs:(common internet file system),是windows上常见的网络文件共享服务;

 samba:是在linux之上实现cifs协议来解决跨平台的文件共享服务;

ftp:file transfer protocol

 应用层协议:tcp,21/tcp

 c/s:

  client:客户端

  server:服务器

数据:

 命令连接:文件管理类命令,始终在线的连接;

 数据连接:数据传输,按需创建及关闭的连接

数据传输格式:

  文本传输;

  二进制传输;

主动:由服务器创建连接

 命令:client:5000  server:21

 数据:server:20/tcp  client: 5000+1

被动:由客户端创建连接

 命令:client:50000 --> server: 21

  数据:client:50000+1 --> server: 随机端口

c/s:服务及工具

 server:

  wu-ftpd

  proftpd

   pureftpd

   vsftpd:very secure

  servu

 client:

   ftp

   lftp,lftpget

   wget,curl

   filezilla

   gftp(linux gui)

演示:用一台主机ftp连接另一台vsftpd的服务器主机;

安装vsftpd;

#yum install vsftpd –y

开启vsftpd服务并查看端口是否开启;

Linux自学笔记——文件共享服务之ftp

远程连接测试;

Linux自学笔记——文件共享服务之ftp

发现当前目录为当前用户的家目录;

Linux自学笔记——文件共享服务之ftp

centos6.6:vsftpd

用户认证配置文件:/etc/pam.d/vsftpd

服务脚本:/etc/tc.d/init.d/vsftpd

配置文件目录:/etc/vsftpd

主配置文件:vsftpd.conf

匿名用户(映射为ftp用户)共享资源位置:/var/ftp

系统用户通过ftp访问的资源的位置:用户自己的家目录

虚拟用户通过ftp访问的资源的位置:给虚拟用户指定的映射称为的系统用户的家目录;

匿名用户的配置:

anonymous_enable=yes

anon_upload_enable=yes

anon_mkdir_write_enable=yes

anon_other_write_enable=yes

Linux自学笔记——文件共享服务之ftp

演示:

1) 用匿名用户远程登录ftp服务器,发现没有上传文件权限和创建目录权限;

Linux自学笔记——文件共享服务之ftp

2) 修改ftp服务器配置文件如下;

Linux自学笔记——文件共享服务之ftp

3) 重启服务;

#service vsftpd restart

4) 重新远程ftp服务器,发现创建目录,上传文件等还是失败;

Linux自学笔记——文件共享服务之ftp

5) 因为ftp用户对/var/ftp没有写权限,为了稳妥,我们在ftp服务器上/var/ftp目录下我们创建了pub,upload目录,我们赋予子目录权限;

Linux自学笔记——文件共享服务之ftp

6) 重新测试,可以上传文件了;

Linux自学笔记——文件共享服务之ftp

也可以删除文件了;

Linux自学笔记——文件共享服务之ftp

7) 下载文件,发现错误提示failed to open file;

Linux自学笔记——文件共享服务之ftp

8) 编辑配置文件,添加以下项;

Linux自学笔记——文件共享服务之ftp

9) 重启服务后,重新测试,重新上传文件,重新下载,会成功下载;

Linux自学笔记——文件共享服务之ftp

系统用户的配置:

local_enable=yes

write_enable=yes

local_unmask=022

禁锢所有的ftp本地用户于其家目录中:

chroot_local_user=yes

禁锢文件中指定的ftp本地用户于其家目录中:

chroot_list_enable=yes

chroot_list_file=/etc/vsftpd/chroot_list

示例:

1) 编辑配置文件,启用如下选项;

Linux自学笔记——文件共享服务之ftp

2) 编辑chroot_list_file;

Linux自学笔记——文件共享服务之ftp

3) 测试,显示已被锁定;

Linux自学笔记——文件共享服务之ftp

4) 用centos用户登录,没有被锁定在家目录;

Linux自学笔记——文件共享服务之ftp

日志:

xferlog_enable=yes #是否启用传输日志;

xferlog_std_format=yes

xferlog_file=/var/log/xferlog #日志文件,需要手动创建

改变上传文件的属主:

chown_uploads=yes

chown_username=whoever

vsftpd使用pam完成用户认证,其用到的pam配置文件:/etc/pam.d/vsftpd

pam_servcie_name=vsftpd

1) vsftpd使用pam完成认证;使用配置文件/etc/pam.d/vsftpd

Linux自学笔记——文件共享服务之ftp

可以看到用户控制的文件为/etc/vsftpd/ftpusers;

2) 编辑配置文件/etc/vsftpd/vsftpd.conf,启用用户认证控制,其中userlist_deny=yes代表黑名单,no的话代表白名单;

Linux自学笔记——文件共享服务之ftp

3) 编辑/etc/vsftpd/ftpusers配置文件;

Linux自学笔记——文件共享服务之ftp

4) 重载服务,测试,centos用户登录不上ftp服务器;

Linux自学笔记——文件共享服务之ftp

是否启用控制用户登录的列表文件

userlist_enable=yes

userlist_deny=yes|no #yes为黑名单,no为白名单;

默认文件为/etc/vsftpd/user_list

1) 编辑/etc/vsftpd/user_list文件;

Linux自学笔记——文件共享服务之ftp

2) 测试;

Linux自学笔记——文件共享服务之ftp

连接限制:

max_clients:最大并发连接数;

max_per_ip:每个ip可同时发起的并发请求数;

传输速率:

anon_max_rate:匿名用户的最大传输速率,单位是“字节/秒”;

local_max_rate:本地用户的…

虚拟用户:

所有的虚拟用户会被统一映射为一个指定的系统账号,访问的共享位置即为此系统账号的家目录;

各虚拟用户可被赋予不同的访问权限:

通过匿名用户的权限控制参数进行指定;

各虚拟用户账号的存储方式:

1) 存于文件中:编辑文件

奇数行为用户名;

偶数行为密码;

此文件需要被编码为hash格式;

2) 存于关系型数据库中的表中:

即时查询数据库完成用户认证;

mysql库,pam要依赖与pam_mysql

#yum –y insatall pam_mysql

具体步骤:

a. 在数据库中创建虚拟用户账号;

Linux自学笔记——文件共享服务之ftp

添加表内容;

Linux自学笔记——文件共享服务之ftp

b. 建立pam认证所需文件

Linux自学笔记——文件共享服务之ftp

c. 建立虚拟用户映射的本地用户及对应的目录;

Linux自学笔记——文件共享服务之ftp

d. 修改vsftpd的配置文件,使其使用mysql认证;

编辑/etc/vsftpd/vsftpd.conf文件,首先确保已经启用如下选项;

anon_upload_enable=no

anon_mkdir_write_enable=no

并添加以下选项:

guest_enable=yes #启用虚拟用户;

guest_username=vuser #指定映射到哪个本地用户

pam_service_name=vsftpd.mysql

Linux自学笔记——文件共享服务之ftp

e. 配置虚拟用户具有不同的访问权限;

vsftpd可以在配置文件中每一个用户提供单独的配置文件以及定义设置服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用的目录,只需要在主配置文件中指明路径即可;

在主配置文件中定义目录;

Linux自学笔记——文件共享服务之ftp

创建相关目录及文件:

Linux自学笔记——文件共享服务之ftp

note:虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。

f. 启动服务并测试;

Linux自学笔记——文件共享服务之ftp

note:如果是二进制安装的mysql,可能会出现登录不了ftp服务器的情况,因为其socket默认路径不是/var/lib/mysql/msyql.socket,此时需要编辑/etc/my.cnf文件修改socket路径;