1.ftp简介
网络文件共享服务主流的主要有三种,分别是ftp、nfs、samba。
在FTP的使用当中,用户经常遇到两种概念:下载和上传
2.ftp架构
FTP工作于应用层,监听于tcp的21号端口,是一种C/S架构的应用程序。
我们最常用的ftp应用程序是vsftpd。
3.用户认证
ftp的用户主要有三种:
- 虚拟用户:仅用于访问某特定服务中的资源
- 系统用户:可以登录系统的真实用户
- 匿名用户
4.vsftpd配置
- /etc/pam.d/vsftpd //vsftpd用户认证配置文件
- /etc/vsftpd/ //配置文件目录
- /etc/vsftpd/vsftpd.conf //主配置文件
//匿名用户(映射为ftp用户)的共享资源位置是/var/ftp
//系统用户通过ftp访问的资源位置为用户的家目录
//虚拟用户通过ftp访问的资源位置为给虚拟用户指定的映射成为的系统用户的家目录
5.vsftpd常见的配置参数
- anonymous_enable=YES 启用匿名用户登录
- anon_upload_enable=YES 允许匿名用户上传
- anon_mkdir_write_enable=YES 允许匿名用户创建目录,但是不能删除
- anon_other_write_enable=YES 允许匿名用户创建和删除目录
- ocal_enable=YES 启用本地用户登录
- write_enable=YES 允许本地用户有写权限
- local_umask=022 通过ftp上传文件的默认遮罩码
- chroot_local_user=YES 禁锢所有的ftp本地用户于其家目录中
实例:
配置匿名用户ftp(不推荐,不安全)
服务端配置:
//安装vsftpd服务
[root@xaii-server ~]# yum -y install vsftpd
//关闭防火墙和selinux,并开启vsftpd服务,设置为开机自动启动
[root@xaii-server ~]# systemctl stop firewalld
[root@xaii-server ~]# setenforce 0
[root@xaii-server ~]# systemctl start vsftpd
[root@xaii-server ~]# systemctl enable vsftpd
//修改vsftpd的主配置文件,允许匿名用户创建和删除目录,上传等功能
12 anonymous_enable=YES
13 anon_mkdir_write_enable=YES
14 anon_other_write_enable=YES
15 anon_upload_enable=YES
//进入/var/ftp/pub中创建三个文件
[root@xaii-server pub]# touch lizhao
[root@xaii-server pub]# touch messi
[root@xaii-server pub]# touch leo
[root@xaii-server pub]# ll
总用量 0
-rw-r--r--. 1 root root 0 2月 18 12:01 leo
-rw-r--r--. 1 root root 0 2月 18 12:01 lizhao
-rw-r--r--. 1 root root 0 2月 18 12:01 messi
//将pub目录的权限设置为777
[root@xaii-server ftp]# chmod 777 pub
客户端:
匿名登录,并将三个文件下载到本地
//下载并安装lftp命令
[root@xaii-client ~]# yum -y install lftp
//匿名登录(-u是指定用户,匿名登录用户名为ftp)
[root@xaii-client ~]# lftp -u ftp 192.168.157.33
口令: (直接回车)
lftp ftp@192.168.157.33:~> ls
drwxr-xr-x 2 0 0 6 Mar 23 2017 pub
lftp ftp@192.168.157.33:/> cd pub
lftp ftp@192.168.157.33:/pub> ls
-rw-r--r-- 1 0 0 0 Feb 18 15:01 lizhao
-rw-r--r-- 1 0 0 0 Feb 18 15:01 messi
-rw-r--r-- 1 0 0 0 Feb 18 15:01 leo
//mget可以同时下载多个文件(若下载目录,则用mirror)
lftp ftp@192.168.157.33:/pub> mget lizhao messi leo
Total 3 files transferred
//退出到本地查看是否下载成功
lftp ftp@192.168.157.33:/pub> exit
[root@xaii-client ~]# ls
anaconda-ks.cfg leo lizhao messi
//创建一个目录,在服务端查看是否为匿名创建
lftp ftp@192.168.157.33:/pub> mkdir aaa
mkdir 成功, 建立 `aaa'
[root@xaii-server pub]# ll
总用量 0
drwx------. 2 ftp ftp 6 2月 18 12:13 aaa
//在本地创建一个文件asamu,利用匿名用户上传到ftp服务端
[root@xaii-client ~]# touch asamu
[root@xaii-client ~]# lftp -u ftp 192.168.157.33
口令:
lftp ftp@192.168.157.33:/> cd pub/
lftp ftp@192.168.157.33:/pub> put asamu
[root@xaii-server pub]# ll
总用量 0
drwx------. 2 ftp ftp 6 2月 18 12:13 aaa
-rw-------. 1 ftp ftp 0 2月 18 12:52 asamu
配置虚拟用户ftp(推荐使用)
//配置虚拟用户需要用到db_load命令,查看提供该命令的软件包,然后下载安装
[root@xaii-server ~]# yum provides *bin/db_load
已加载插件:product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
xx/filelists_db | 3.4 MB 00:00:00
libdb-utils-5.3.21-20.el7.x86_64 : Command line tools for managing Berkeley DB databases
源 :xx
匹配来源:
文件名 :/usr/bin/db_load
libdb-utils-5.3.21-20.el7.x86_64 : Command line tools for managing Berkeley DB databases
源 :@anaconda/7.4
匹配来源:
文件名 :/usr/bin/db_load
//下载安装libdb-utils软件包
[root@xaii-server ~]# yum -y install libdb-utils
//创建文本格式的用户名、密码列表,例如若要添加两个用户tom、jerry,密码分别为123、456
[root@xaii-server ~]# vim /etc/vsftpd/vu.list
[root@xaii-server ~]# cat /etc/vsftpd/vu.list
tom
123
jerry
456
//为了安全,将刚创建的文本格式用户名、密码文件使用db4工具转换成数据库文件
[root@xaii-server ~]# db_load -T -t hash -f /etc/vsftpd/vu.list /etc/vsftpd/vu.db
[root@xaii-server ~]# ll /etc/vsftpd/
总用量 36
-rw-------. 1 root root 125 3月 23 2017 ftpusers
-rw-------. 1 root root 361 3月 23 2017 user_list
-rw-------. 1 root root 5107 2月 18 12:51 vsftpd.conf
-rwxr--r--. 1 root root 338 3月 23 2017 vsftpd_conf_migrate.sh
-rw-r--r--. 1 root root 12288 2月 18 14:06 vu.db
-rw-r--r--. 1 root root 18 2月 18 13:48 vu.list
查看vu.list和vu.db的文件类型
[root@xaii-server vsftpd]# file vu.list
vu.list: ASCII text
[root@xaii-server vsftpd]# file vu.db
vu.db: Berkeley DB (Hash, version 9, native byte-order)
//为提高虚拟用户帐号文件的安全性,应将文件权限设置为600,以避免数据外泄
[root@xaii-server vsftpd]# chmod 600 /etc/vsftpd/vu.*
[root@xaii-server vsftpd]# ll
-rw-------. 1 root root 12288 2月 18 14:06 vu.db
-rw-------. 1 root root 18 2月 18 13:48 vu.list
//添加虚拟用户的映射帐号、创建ftp根目录。例如要将使用的ftp根目录设置为/opt/vftp
[root@xaii-server ~]# useradd -d /opt/vftp -s /sbin/nologin vftp
[root@xaii-server ~]# chmod 755 /opt/vftp/
[root@xaii-server ~]# ll -d /opt/vftp/
drwxr-xr-x. 2 vftp vftp 62 2月 18 14:19 /opt/vftp/
//为虚拟用户建立PAM认证
[root@xaii-server ~]# cp /etc/pam.d/vsftpd{,.bak} (将vsftp备份为vsftpd.bak)
[root@xaii-server ~]# vim /etc/pam.d/vsftpd
[root@xaii-server ~]# cat /etc/pam.d/vsftpd
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vu
account required pam_userdb.so db=/etc/vsftpd/vu
//修改vsftpd配置文件,添加虚拟用户支持
[root@xaii-server ~]# vim /etc/vsftpd/vsftpd.conf
[root@xaii-server ~]# tail -2 /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=vftp
//为不同的虚拟用户建立独立的配置文件,需要先创建一个空目录用来存放虚拟用户的配置文件
[root@xaii-server ~]# cd /etc/vsftpd/
[root@xaii-server vsftpd]# mkdir user_config
[root@xaii-server vsftpd]# tail -2 /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/user_config
allow_writeable_chroot=YES
//设置tom用户可上传文件、创建目录
[root@xaii-server ~]# cd /etc/vsftpd/user_config/
[root@xaii-server user_config]# vim tom
[root@xaii-server user_config]# cat tom
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=(指定tom用户的上传路径)
//设置jerry用户只有默认的下载权限,只需要创建一个名为jerry的空文件即可
[root@xaii-server user_config]# touch jerry
[root@xaii-server user_config]# ll
总用量 4
-rw-r--r--. 1 root root 0 2月 18 14:34 jerry
-rw-r--r--. 1 root root 79 2月 18 14:32 tom
验证虚拟用户:
//tom用户验证(上传文件):
[root@xaii-client ~]# lftp -u tom 192.168.157.33
口令: 123
lftp tom@192.168.157.33:~> put iphone(本地创建的一个文件)
//在客户端查看:
[root@xaii-server vftp]# ll
总用量 0
-rw-------. 1 vftp vftp 0 2月 18 14:54 iphone
//tom用户下载服务段的woshitom文件
lftp tom@192.168.157.33:/> get woshitom
[root@xaii-client ~]# ll
-rw-r--r-- 1 root root 0 2月 19 01:45 iphone
-rw-r--r-- 1 root root 0 2月 19 01:57 woshitom
//tom创建目录
lftp tom@192.168.157.33:/> mkdir hehe
mkdir 成功, 建立 `hehe'
[root@xaii-server vftp]# ll
总用量 0
drwx------. 2 vftp vftp 6 2月 18 15:01 hehe
//jerry用户只能下载,不能进行其他操作
[root@xaii-client ~]# lftp -u jerry 192.168.157.33
口令: 456
lftp jerry@192.168.157.33:/> get woshijerry
lftp jerry@192.168.157.33:/> exit
[root@xaii-client ~]# ls
iphone woshijerry woshitom
//jerry用户不能上传和创建目录
lftp jerry@192.168.157.33:/> put leo
put: Access failed: 550 Permission denied. (leo)
lftp jerry@192.168.157.33:/> mkdir haha
mkdir: Access failed: 550 Permission denied. (haha)
//注意:虚拟用户是通过匿名访问的,所以必须开启匿名访问功能!!!只需开启匿名登录即可,其他匿名功能不必开启!!!否则,jerry用户无法验证!!!