天天看点

Linux 中的文件共享服务---ftp

文件共享服务---ftp

==============================================================================

概述:

   本章将主要介绍文件共享服务中的ftp服务,内容包括:ftp的程序环境,配置文件的相关介绍,以及如何配置基于虚拟用户的vsftpd服务

 1.介绍

★ftp:(file transfer protocol) 应用层,c/s架构,文件共享; ★nfs,cifs:  文件系统接口,网络文件系统; ☉nfs:(network file system ) 是unix和类unix系统上常见的基于内核的网络文件共享服务; ☉cifs:(common internet file system),是windows上常见的网络文件共享服务; samba:是在linux之上实现cifs(sma)协议来解决跨平台的文件共享服务。 ★网络存储: ☉nas:network attached storage 网络附加存储,是一台文件服务器,通过网络文件的形式来提供文件共享存储(通常通过nfs或cifs协议来实现),文件级别(已经有文件系统了,直接挂载使用即可); ☉san:storage area network, 块级别共享服务,分区-->格式化-->创建文件系统;常用协议:ipsan, fcsan;

 1.ftp

★c/s架构的: ☉client --> ftp(协议)-->server client:connect (客户端发起连接请求) server:listen  服务器监听在21号端口,接受客户端请求 ★连接: 命令连接:命令传输,连接将一直存在,直到用户显示退出或意外终止为止; 数据连接:数据传输,按需创建; ☉数据连接的建立模式: ◆主动模式: 服务器通过20/tcp主动连接客户端的命令连接端口向后最近一个空闲端口;port模式; ◆被动模式: 客户端发出数据请求后,服务端会响应一个打开的临时使用的随机端口,客户端对此端口进行请求;pasv模式; ☉数据传输模式: 文本格式:ascii 二进制格式:binary ☉协议安全: ◆明文:数据、认证时传输账号和密码均是明文 ; ◆安全增强: ftp over ssl/tls:ftps ftp over ssh:sftp  ◆虚拟用户账号; ☉c/s: ◆server:  windows:serv-u, iis, ...  开源解决方案: wuftpd:washington university ftp daemon vsftpd:very secure ftp daemon proftpd, pureftpd, ... ◆client: gui:flashfxp, cute, filezilla, gftp, .. cli:ftp, lftp,wget,get,mget,curl ...

 1.程序环境:

★主程序:/usr/sbin/vsftpd unit file:/usr/lib/systemd/system/vsftpd.service(centos 7) ★主配置文件: /etc/vsftpd/vsftpd.conf ★文档路径映射: fedora用户:/home/fedora/pub/a.txt --> ftp://host:port/pub/a.txt ☉用户的家目录映射: 访问vsftpd服务必须以某个系统用户的身份进行;此用户的家目录即为文档映射的根目录; ☉匿名用户: anonymous,映射为一个系统用户,此用户为 ftp,其目录为 /var/ftp 下 ★安装启动服务 # yum install vsftpd -y # systemctl start vsftpd

演示:

 1.启动ftp服务并查看端口

2.本地用户登录ftp文档路径会映射为用户自己的家目录

 1)在tao的家目录下再创建一个名叫xiu的目录

   计算机登录如下

Linux 中的文件共享服务---ftp
Linux 中的文件共享服务---ftp

 3.匿名用户登录会映射为ftp用户,文档路径为/var/ftp

 浏览器访问如下

Linux 中的文件共享服务---ftp

 4.使用lftp本地用户登录发现可上传可删除文件,如下:

 使用lftp匿名用户登录,发现不能上传删除文件,如下:

 这里要注意匿名用户登录很危险,所以必须不能有写权限,如果想有写权限的话建议对一个子目录进行修改,如下:

 2.配置文件:vsftpd.conf

★格式:directive value,... directive:指令之前不能存在任何字符,包括空白(即顶格写); ★匿名用户: anonymous_enable=yes             启用匿名用户 anon_upload_enable=yes           匿名用户上传权限 anon_mkdir_write_enable=yes    匿名用户创建目录权限 anon_other_write_enable=yes     匿名用户写权限(删除) ★本地用户: local_enable=yes  启用本地系统用户 write_enable=yes  允许本地用户写操作 ★pam认证服务:(pluggable authencate module 插入式认证模块) ☉pam_service_name=vsftpd  表示调用pam的vsftpd配置文件 /etc/pam.d/vsftpd :通过此文件定义了该如何认证系统用户账号来访问ftp服务 ★切换目录时的提示信息: dirmessage_enable=yes       文件要为 .messages (隐藏文件) ★修改上传文件的属主:默认为ftp用户 chown_uploads=yes chown_username=username ★禁锢用户于自己的家目录:   会引入别的风险,因此,要求用户对自己的家目录不能有写权限; ☉禁锢所有用户于自己的家目录 chroot_local_user=yes ☉禁锢部分用户 ◆白名单:名单中的用户不被禁锢; chroot_list_enable=yes chroot_list_file=/etc/vsftpd/chroot_list ◆黑名单:名单中的用户被禁锢 chroot_local_user=no 注意: 只用写进禁锢文件中的用户才可以正常访问,没写进去的要想访问就必须把自己的写权限去掉之后才可以访问。 ★user_list控制用户访问vsftpd: ☉白名单 userlist_enable=yes userlist_deny=no  ☉黑名单,默认 userlist_deny=yes ★其他相关配置详见 man vsftpd.conf

1.匿名用户设置 

 1)修改配置文件使匿名用户拥有上传权限:anon_upload_enable=yes 

 2)anon_other_write_enable=yes  其他写权限

2.认证服务

  1)使用root用户登录如下

  2)pam认证机制

3.禁锢用户于自己的家目录

  1)编辑配置文件开启chroot_local_user=yes

Linux 中的文件共享服务---ftp

2)禁锢除文件中指定的ftp本地用户于其家目录中(设置白名单)

Linux 中的文件共享服务---ftp

 4.user_list控制用户访问vsftpd:

    设置白名单,注意这里的userlist_enable会和 禁锢用户文件chroot_local_user=yes 冲突,所以启用前先把禁锢文件注释掉;

    在配置文件中添加userlist_deny=no,如下图

Linux 中的文件共享服务---ftp

       虚拟用户就是系统不存在的实体用户,他只能访问服务器为其提供的ftp服务,但不能访问其他的额外资源信息。所以如果想让一些用户可以对ftp服务中的内容具有写权限,但又不允许访问其他系统资源,那我们就可以通过使用虚拟用户来提高系统的安全性。在vsftpd中,虚拟用户的认证方式是单独的口令库文件(pam_userdb),有可插入式认证模块来完成认证,使用这种方式配置更加灵活也更加安全。具体过程如下:

★vsftpd依赖pam完成认证,pam存储支持的认证方式,vsftpd都可调用; ★账号密码存储于何处? 文件、mysql、ldap、redis、... ★pam_mysql模块   pam默认是不支持myaql的,要想让pam利用mysql认证,要先安装pam_mysql驱动模块 centos 6:epel源 centos 7:编译安装 ★编译: (1)编译环境; (2)依赖关系:mariadb-devel, pam-devel (3)执行过程   # ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security/ # make install  ★准备要映射成为的系统账号: # mkdir -pv /ftproot/{pub,upload} # useradd -d /ftproot vuser # setfacl -m u:vuser:rwx /ftproot/upload ★准备基于mysql认证的pam配置文件:/etc/pam.d/vsftpd.mysql ★配置vsftpd启用虚拟用户,并使用指定的pam service:vsftpd.conf pam_service_name=vsftpd.mysql guest_enable=yes guest_username=vuser ★配置每虚拟用户拥有不同的权限:vsftpd.conf user_config_dir=/etc/vsftpd/vusers_conf ☉创建此文件 # mkdir /etc/vsftpd/vusers_conf # touch username ☉权限配置指令 anon_upload_enable anon_mkdir_write_enable anon_other_write_enable

 1.首选编译安装pam_mysql

 2.编译完成后,启用数据库,创建一个名叫vsftpd的数据库,授权一个用户,并在库中创建表和数据

3.准备要映射成为的系统账号,这个家目录将成为虚拟用户访问登录时的家目录

4.准备基于mysql认证的pam配置文件:/etc/pam.d/vsftpd.mysql

5.配置vsftpd启用虚拟用户,并使用指定的pam service:vsftpd.conf

6.使用ftp登录ftp服务,验证能否登陆成功

  认证登录失败可查看认证日志,我这里此前登录失败过两次,是因为粗心导致/etc/vsftpd/vsftpd.conf中pam_service_name=vsftpd.mysql和创建的pam配置文件名称不符

7.配置每虚拟用户拥有不同的权限:vsftpd.conf

总结:

Linux 中的文件共享服务---ftp