资源简介 (共38张PPT)项目7 网络服务配置与管理Linux网络操作系统项目式教程(第二版)任务61FTP服务概述FTP服务配置与管理2FTP服务端配置3配置不同FTP用户1FTP服务概述1FTP服务简介FTP服务概述历史悠久,是应用最广泛的应用层协议运行于TCP之上,文件传输可靠,跨平台、跨系统采用客户机/服务器模式,上传和下载文件方便登录用户类型:匿名用户:没有对应的系统账户,可以访问公开的、没有版权和保密性要求的文件本地用户:实际存在的操作系统用户,以本地用户身份登录FTP服务器虚拟用户:可以使用FTP服务但不能登录操作系统,登录时被映射为实际的操作系统用户1FTP运行模式-主动模式FTP服务概述控制信道的发起方是FTP客户端,数据信道的发起方是FTP服务器容易受到防火墙和NAT的影响连接建立过程:客户端选择端口Port A与服务器的 21 端口建立TCP连接FTP客户端随机启用端口Port B,通过控制信道通知服务器采用主动模式,以及端口Port B服务器用20端口与客户端的Port B建立TCP连接1FTP运行模式-被动模式FTP服务概述控制信道的发起方是FTP客户端,数据信道的发起方也是FTP客户端客户端很可能不能使用被动模式与位于防火墙后方或内网的服务器建立数据连接连接建立过程:客户端选择Port A与服务器的 21 端口建立TCP连接客户端通过控制信道通知FTP服务器采用被动模式FTP服务器随机启用端口Port P,并通过控制信道将这个端口告知FTP客户端客户端随机使用Port B与服务器的Port P建立TCP连接2FTP服务端配置FTP安装与启停软件名称:vsftpd后台守护进程:vsftpd[root@centos7 ~]# yum install vsftpd -y // 安装vsftpd软件[root@centos7 ~]# rpm -qa | grep vsftpdvsftpd-3.0.2-28.el7.x86_64systemctl start | stop | restart | status | enable vsftpd客户端软件名称:ftp[root@centos7 ~]# yum install ftp -y // 安装ftp软件2FTP服务端配置2FTP服务主配置文件FTP服务端配置/etc/vsftpd/vsftpd.conf注释以“#”开头先对文件进行备份,然后过滤掉所有以“#”开头的行,只保留有效的行包含单行指令和配置段语法是“参数名=参数值”“=”前后不能有空格[root@centos7 ~]# cd /etc/vsftpd[root@centos7 vsftpd]# mv vsftpd.conf vsftpd.conf.bak[root@centos7 vsftpd]# grep -v ‘^#' vsftpd.conf.bak > vsftpd.conf[root@centos7 vsftpd]# cat vsftpd.confanonymous_enable=YESlocal_enable=YESwrite_enable=YES2FTP全局参数FTP服务端配置全局参数对三种类型的登录用户都适用FTP 全局参数 功能说明listen 指定FTP服务是否以独立方式运行,默认为NOlisten_address 指定在独立方式下FTP服务的监听地址listen_port 指定在独立方式下FTP服务的监听端口,默认是21max_clients 指定最大的客户端连接数,值为0表示不限制max_per_ip 指定同一IP地址可以发起的最大连接数,值为0表示不限制port_enable 指定是否允许主动模式,默认为YESpasv_enable 指定是否允许被动模式,默认为YESwrite_enable 指定是否允许用户上传文件、新建目录、删除文件和目录等操作,默认为NOdownload_enable 指定是否允许用户下载文件,默认为YESvsftpd_log_file vsftpd进程的日志文件,默认是/var/log/vsftpd.log3配置不同FTP用户3FTP用户登录-匿名用户配置不同FTP用户要特别注意控制匿名用户的访问权限和根目录匿名用户相关参数 功能说明anonymous_enable 是否允许匿名用户登录,默认为YESanon_root 匿名用户登录后使用的根目录。这里的根目录是指匿名用户的主目录,而不是文件系统的根目录“/”ftp_username 匿名用户登录后具有哪个用户的权限,默认是ftpno_anon_password 如果设为YES,那么vsftpd服务不会向匿名用户询问密码。默认为NOanon_upload_enable 是否允许匿名用户上传文件,默认为NOanon_mkdir_write_enable 是否允许匿名用户创建目录anon_umask 匿名用户上传文件时使用的umask值,默认为077anon_other_write_enable 是否允许匿名用户执行除上传文件和创建目录之外的写操作。默认为NOanon_max_rate 指定匿名用户的最大传输速率,单位是字节/秒,值为0表示不限制第1步:在FTP服务器上创建根目录,在根目录下新建测试文件file1.100例允许匿名用户登录,根目录是/var/anon_ftp,只能下载文件,不可以上传文件、创建目录,或删除和重命名文件等3配置不同FTP用户FTP用户登录-匿名用户[root@centos7 ~]# mkdir -p /var/anon_ftp[root@centos7 ~]# ls -ld /var/anon_ftpdrwxr-xr-x. 2 root root 6 12月 5 20:13 /var/anon_ftp[root@centos7 ~]# touch /var/anon_ftp/file1.100第2步:修改vsftpd主配置文件例允许匿名用户登录,根目录是/var/anon_ftp,只能下载文件,不可以上传文件、创建目录,或删除和重命名文件等3配置不同FTP用户FTP用户登录-匿名用户[root@centos7 ~]# vim /etc/vsftpd/vsftpd.confanonymous_enable=YES <==允许匿名登录anon_root=/var/anon_ftp <== 匿名用户根目录write_enable=NO <== 全局参数,不允许写操作第3步:重启FTP服务,修改防火墙和SELinux设置第4步:登录FTP客户端,在/tmp目录中新建测试文件file1.110[zys@centos7 ~]$ cd /tmp[zys@centos7 tmp]$ touch file1.110[root@centos7 ~]# vim /etc/vsftpd/vsftpd.confanonymous_enable=YES <==允许匿名登录anon_root=/var/anon_ftp <== 匿名用户根目录write_enable=NO <== 全局参数,不允许写操作第5步:在客户端使用ftp命令连接FTP服务器并查询服务器端测试文件例允许匿名用户登录,根目录是/var/anon_ftp,只能下载文件,不可以上传文件、创建目录,或删除和重命名文件等3配置不同FTP用户FTP用户登录-匿名用户[zys@centos7 tmp]$ ftp 192.168.100.100Name (192.168.100.100:zys): ftp <== 输入匿名用户的登录身份Password: <== 提示输入密码,这里直接按Enter键即可230 Login successful. <== 登录成功ftp> pwd <== 查看当前工作目录257 "/"ftp> ls <== 使用ls命令查看文件-rw-r--r-- 1 0 0 0 Dec 05 12:14 file1.100ftp>第6步:测试匿名用户的文件上传和下载权限。从服务器下载file1.100文件时操作成功,但上传file1.110文件时提示“550 Permission denied”,即没有权限执行上传操作例允许匿名用户登录,根目录是/var/anon_ftp,只能下载文件,不可以上传文件、创建目录,或删除和重命名文件等3配置不同FTP用户FTP用户登录-匿名用户ftp> get file1.100226 Transfer complete.ftp> put file1.110550 Permission denied.ftp> quit3FTP用户登录-本地用户配置不同FTP用户推荐的做法是允许本地用户使用FTP服务,但是不能登录操作系统,这样可以降低账号密码泄露带来的系统风险本地用户相关参数 功能说明local_enable 是否允许本地用户登录FTP服务器,默认为NOlocal_max_rate 指定本地用户的最大传输速率,单位是字节/秒,值为0表示不限制。默认为0local_umask 本地用户上传文件时使用的umask值,默认为077local_root 本地用户登录后使用的根目录chroot_local_user 是否将用户锁定在根目录,默认为NOchroot_list_enable 指定是否启用chroot用户列表文件,默认为NOchroot_list_file 用户列表文件。根据chroot_list_enable的设置,文件中的用户可能被chroot,也可能不被chroot3FTP用户登录-本地用户chroot配置不同FTP用户被 chroot的用户登录FTP服务器后将被锁定在自己的根目录内chroot_local_user 用来设置是否将用户锁定在根目录chroot_list_enable 和 chroot_list_file 两个参数指定一个文件,文件中的用户作为默认设置的“例外”而存在。如果默认设置是锁定所有用户的根目录,那么文件中的用户将不被锁定,反之亦然 chroot_local_user=NO chroot_local_user=YESchroot_list_enable=NO 所有用户都不被chroot 所有用户都被chrootchroot_list_enable=YES 所有用户都不被chroot。chroot_list_file文件指定的用户是例外,被chroot 所有用户都被chroot。chroot_list_file文件指定的用户是例外,不被chroot第1步:确保系统中存在本地用户ss和zys。在FTP服务器中新建目录/siso/ito及两个测试文件例目录 /siso/ito,管理员用户 ss 对目录有全部的读写权限,而且不被chroot。用户 zys 可以执行上传下载等操作,但是要被chroot3配置不同FTP用户FTP用户登录-本地用户[root@centos7 ~]# id ssuid=1237(ss) gid=1237(ss) 组=1237(ss),1003(devteam1),1004(devteam2)[root@centos7 ~]# id zysuid=1000(zys) gid=1000(zys) 组=1000(zys),1002(devteam)[root@centos7 ~]# mkdir -p /siso/ito[root@centos7 ~]# ls -ld /siso/itodrwxr-xr-x. 2 root root 40 12月 5 20:37 /siso/ito[root@centos7 ~]# touch /siso/ito/file2.100 // 新建服务器端测试文件[root@centos7 ~]# touch /siso/ito/file3.100第2步:修改主配置文件,设置两个的读写权限及chroot。重启FTP服务例目录 /siso/ito,管理员用户 ss 对目录有全部的读写权限,而且不被chroot。用户 zys 可以执行上传下载等操作,但是要被chroot3配置不同FTP用户FTP用户登录-本地用户[root@centos7 ~]# vim /etc/vsftpd/vsftpd.confwrite_enable=YES <== 允许用户写入download_enable=YES <== 允许用户下载local_enable=YES <== 允许本地用户登录FTP服务器local_root=/siso/ito <== 本地用户根目录chroot_local_user=YES <== 所有用户默认被chrootchroot_list_enable=YES <== 启用例外用户chroot_list_file=/etc/vsftpd/chroot_list <== 例外用户列表文件[root@centos7 ~]# systemctl restart vsftpd第3步:新建例外用户列表文件/etc/vsftpd/chroot_list,添加用户ss例目录 /siso/ito,管理员用户 ss 对目录有全部的读写权限,而且不被chroot。用户 zys 可以执行上传下载等操作,但是要被chroot3配置不同FTP用户FTP用户登录-本地用户[root@centos7 ~]# vim /etc/vsftpd/chroot_listss <== 只添加ss一个用户第4步:修改防火墙和SELinux设置第5步:在FTP客户端中新建测试文件file2.110和file3.110[zys@centos7 ~]$ cd /tmp[zys@centos7 tmp]$ touch file2.110 file3.110第6步:在FTP客户端中使用用户zys登录FTP服务器,测试能否更改目录例目录 /siso/ito,管理员用户 ss 对目录有全部的读写权限,而且不被chroot。用户 zys 可以执行上传下载等操作,但是要被chroot3配置不同FTP用户FTP用户登录-本地用户[zys@centos7 tmp]$ ftp 192.168.100.100Name (192.168.100.100:zys): zys <== 输入用户名 zysPassword: <== 输入用户zys的密码230 Login successful.ftp> pwd <== 查看当前目录257 "/" <== 即/siso/itoftp> cd /siso <== 更改目录550 Failed to change directory. <== 更改目录失败ftp> ls <== 查看目录内容-rw-r--r-- 1 0 0 0 Nov 28 11:46 file2.100-rw-r--r-- 1 0 0 0 Nov 28 12:34 file3.100ftp>第7步:继续测试下载和上传操作。用户zys可以下载文件,但是上传文件时系统提示“553 Could not create file”,即无权限创建文件例目录 /siso/ito,管理员用户 ss 对目录有全部的读写权限,而且不被chroot。用户 zys 可以执行上传下载等操作,但是要被chroot3配置不同FTP用户FTP用户登录-本地用户ftp> get file2.100 <== 下载文件226 Transfer complete.ftp> put file2.110 <== 上传文件553 Could not create file. <== 上传文件失败ftp> quit注意:一般从两个方面检查:一,检查主配置文件中是否开放了相应的权限二,检查FTP服务器的相应目录是否开放写权限第8步:在主配置文件中,已经设置为允许本地用户上传文件。但是 /siso/ito 目录权限是 rwxr-xr-x,没有对zys开放写权限。可以直接赋予zys写权限,也可以修改/siso/ito目录的所有者和属组例目录 /siso/ito,管理员用户 ss 对目录有全部的读写权限,而且不被chroot。用户 zys 可以执行上传下载等操作,但是要被chroot3配置不同FTP用户FTP用户登录-本地用户[root@centos7 ~]# chmod o+w /siso/ito // 或 chown zys /siso/ito[root@centos7 ~]# ls -ld /siso/itodrwxr-xrwx. 2 root root 40 12月 5 20:37 /siso/ito例目录 /siso/ito,管理员用户 ss 对目录有全部的读写权限,而且不被chroot。用户 zys 可以执行上传下载等操作,但是要被chroot3配置不同FTP用户FTP用户登录-本地用户第9步:修改完之后继续测试,登录FTP服务器时出现新错误[zys@centos7 tmp]$ ftp 192.168.100.100Name (192.168.100.100:zys): zysPassword:500 OOPS: vsftpd: refusing to run with writable root inside chroot()Login failed.421 Service not available, remote server has closed connectionftp> quit注意:如果用户被chroot,就不能再对主目录具有写权限例目录 /siso/ito,管理员用户 ss 对目录有全部的读写权限,而且不被chroot。用户 zys 可以执行上传下载等操作,但是要被chroot3配置不同FTP用户FTP用户登录-本地用户第10步:在主配置文件中设置allow_writeable_chroot参数,重启FTP服务[root@centos7 ~]# vim /etc/vsftpd/vsftpd.confallow_writeable_chroot=YES <== 增加这一行,允许对主目录的写操作[root@centos7 ~]# systemctl restart vsftpd例目录 /siso/ito,管理员用户 ss 对目录有全部的读写权限,而且不被chroot。用户 zys 可以执行上传下载等操作,但是要被chroot3配置不同FTP用户FTP用户登录-本地用户第11步:重新登录服务器,再次尝试上传文件,现在文件上传成功[zys@centos7 tmp]$ ftp 192.168.100.100Name (192.168.100.100:zys): zysPassword:230 Login successful. <==登录成功ftp> put file2.110226 Transfer complete. <== 文件上传成功ftp> ls-rw-r--r-- 1 0 0 0 Dec 05 12:37 file2.100-rw-r--r-- 1 1000 1000 0 Dec 05 13:00 file2.110-rw-r--r-- 1 0 0 0 Dec 05 12:37 file3.100ftp> quit例目录 /siso/ito,管理员用户 ss 对目录有全部的读写权限,而且不被chroot。用户 zys 可以执行上传下载等操作,但是要被chroot3配置不同FTP用户FTP用户登录-本地用户第12步:在FTP客户端中使用用户ss进行以上测试[siso@localhost tmp]$ ftp 192.168.100.100Name (192.168.100.100:zys): ss <== 输入用户名ssPassword: <== 输入用户ss的密码ftp> cd /siso <== 更改目录250 Directory successfully changed. <== 目录更改成功ftp>cd ito <== 返回根目录250 Directory successfully changed.ftp> get file3.100 <== 上传文件226 Transfer complete.ftp> put file3.110 <== 下载文件226 Transfer complete.3FTP用户登录-虚拟用户配置不同FTP用户虚拟账户被映射为本地用户,默认情况下和匿名用户具有相同的权限可以为每个虚拟用户指定不同的配置文件,放在 user_config_dir 参数指定的目录下。自定义配置文件中的设置比主配置文件具有更高的优先级虚拟用户相关参数 功能说明local_enable 启用虚拟用户也要将此参数设为YES,默认为NOguest_enable 启用虚拟账户功能,默认为NOguest_username 虚拟账户对应的本地用户user_config_dir 用户自定义配置文件所在目录virtual_use_local_privs 指定虚拟账户是否和本地用户具有相同的权限,默认为NOanon_upload_enable 允许虚拟用户上传文件时要将此参数设为YES,默认为NOpam_service_name vsftpd使用的PAM模块名例创建两个虚拟用户vuser1和vuser2,根目录分别为/siso/ito/pub和/var/ftp/vuser,分别映射到本地用户itopub和ftp;vuser1可以上传和下载文件,vuser2只能下载文件3配置不同FTP用户FTP用户登录-虚拟用户第1步:建立保存虚拟用户的账号和密码的文件,奇数行是用户名,偶数行是密码。然后使用db_load命令生成本地数据库文件[root@centos7 ~]# cd /etc/vsftpd[root@centos7 vsftpd]# vim vuser.pwdvuser1 <== 奇数行是用户名123456 <== 偶数行是密码vuser2abcdef[root@centos7 vsftpd]# db_load -T -t hash -f vuser.pwd vuser.db[root@centos7 vsftpd]# chmod 700 vuser.db[root@centos7 vsftpd]# ls vuser*vuser.db vuser.pwd例目录 /siso/ito,管理员用户 ss 对目录有全部的读写权限,而且不被chroot。用户 zys 可以执行上传下载等操作,但是要被chroot。3配置不同FTP用户FTP用户登录-虚拟用户第2步:调用操作系统提供的PAM以使用第1步中生成的数据库文件对虚拟用户进行验证。修改vsftpd对应的PAM配置文件/etc/pam.d/vsftpd,将默认配置全部注释掉,添加以下内容[root@centos7 vsftpd]# vim /etc/pam.d/vsftpdauth required pam_userdb.so db=/etc/vsftpd/vuseraccount required pam_userdb.so db=/etc/vsftpd/vuser例目录 /siso/ito,管理员用户 ss 对目录有全部的读写权限,而且不被chroot。用户 zys 可以执行上传下载等操作,但是要被chroot。3配置不同FTP用户FTP用户登录-虚拟用户第3步,创建vuser1的根目录和测试文件,并修改权限,新建vuser1的映射用户itopub[root@centos7 vsftpd]# mkdir -p /siso/ito/pub[root@centos7 vsftpd]# chmod o+w /siso/ito/pub[root@centos7 vsftpd]# ls -ld /siso/ito/pubdrwxr-xrwx. 2 root root 6 12月 5 21:19 /siso/ito/pub[root@centos7 vsftpd]# touch /siso/ito/pub/file4.100[root@centos7 vsftpd]# useradd itopub[root@centos7 vsftpd]# passwd itopub[root@centos7 vsftpd]# mkdir -p /siso/ito/pub[root@centos7 vsftpd]# chmod o+w /siso/ito/pub[root@centos7 vsftpd]# ls -ld /siso/ito/pubdrwxr-xrwx. 2 root root 6 12月 5 21:19 /siso/ito/pub[root@centos7 vsftpd]# touch /siso/ito/pub/file4.100[root@centos7 vsftpd]# useradd itopub[root@centos7 vsftpd]# passwd itopub例目录 /siso/ito,管理员用户 ss 对目录有全部的读写权限,而且不被chroot。用户 zys 可以执行上传下载等操作,但是要被chroot。3配置不同FTP用户FTP用户登录-虚拟用户第4步,创建vuser2的根目录和测试文件,并修改权限[root@centos7 vsftpd]# mkdir -p /var/ftp/vuser[root@centos7 vsftpd]# chmod o+w /var/ftp/vuser[root@centos7 vsftpd]# ls -ld /var/ftp/vuserdrwxr-xrwx. 2 root root 6 12月 5 21:21 /var/ftp/vuser[root@centos7 vsftpd]# touch /var/ftp/vuser/file5.100[root@centos7 vsftpd]# mkdir -p /var/ftp/vuser[root@centos7 vsftpd]# chmod o+w /var/ftp/vuser[root@centos7 vsftpd]# ls -ld /var/ftp/vuserdrwxr-xrwx. 2 root root 6 12月 5 21:21 /var/ftp/vuser[root@centos7 vsftpd]# touch /var/ftp/vuser/file5.100[root@centos7 vsftpd]# mkdir -p /var/ftp/vuser[root@centos7 vsftpd]# chmod o+w /var/ftp/vuser[root@centos7 vsftpd]# ls -ld /var/ftp/vuserdrwxr-xrwx. 2 root root 6 12月 5 21:21 /var/ftp/vuser[root@centos7 vsftpd]# touch /var/ftp/vuser/file5.100例目录 /siso/ito,管理员用户 ss 对目录有全部的读写权限,而且不被chroot。用户 zys 可以执行上传下载等操作,但是要被chroot。3配置不同FTP用户FTP用户登录-虚拟用户第5步,修改vsftpd主配置文件,通过user_config_dir参数指定保存用户自定义配置文件的目录[root@centos7 vsftpd]# vim /etc/vsftpd/vsftpd.confanonymous_enable=NOlocal_enable=YESguest_enable=YESanon_upload_enable=NOallow_writeable_chroot=YESuser_config_dir=/etc/vsftpd/user_conf <== 此目录要手动创建pam_service_name=vsftpd[root@centos7 vsftpd]# vim /etc/vsftpd/vsftpd.confanonymous_enable=NOlocal_enable=YESguest_enable=YESanon_upload_enable=NOallow_writeable_chroot=YESuser_config_dir=/etc/vsftpd/user_conf <== 此目录要手动创建pam_service_name=vsftpd例目录 /siso/ito,管理员用户 ss 对目录有全部的读写权限,而且不被chroot。用户 zys 可以执行上传下载等操作,但是要被chroot。3配置不同FTP用户FTP用户登录-虚拟用户第6步,创建上一步中指定的目录,同时为两个虚拟用户添加自定义配置文件,文件名和虚拟用户名相同[root@centos7 vsftpd]# mkdir /etc/vsftpd/user_conf[root@centos7 vsftpd]# vim /etc/vsftpd/user_conf/vuser1 // 文件名和虚拟用户名相同guest_username=itopubwrite_enable=YESanon_upload_enable=YESlocal_root=/siso/ito/pub[root@centos7 vsftpd]# vim /etc/vsftpd/user_conf/vuser2guest_username=ftpwrite_enable=NOlocal_root=/var/ftp/vuser例目录 /siso/ito,管理员用户 ss 对目录有全部的读写权限,而且不被chroot。用户 zys 可以执行上传下载等操作,但是要被chroot。3配置不同FTP用户FTP用户登录-虚拟用户第7步,重启FTP服务,并且修改防火墙和SELinux设置[zys@centos7 ~]$ cd /tmp[zys@centos7 tmp]$ touch file4.110 file5.110第8步,在FTP客户端中创建测试文件例目录 /siso/ito,管理员用户 ss 对目录有全部的读写权限,而且不被chroot。用户 zys 可以执行上传下载等操作,但是要被chroot。3配置不同FTP用户FTP用户登录-虚拟用户第9步,在FTP客户端中使用vuser1登录服务器并测试下载和上传操作[zys@centos7 tmp]$ ftp 192.168.100.100Name (192.168.100.100:zys): vuser1 <== 输入用户名vuser1Password: <== 输入用户vuser1的密码123456230 Login successful.ftp> ls-rw-r--r-- 1 0 0 0 Dec 05 13:20 file4.100ftp> get file4.100 <== 下载文件226 Transfer complete.ftp> put file4.110 <== 上传文件226 Transfer complete.ftp> quit例目录 /siso/ito,管理员用户 ss 对目录有全部的读写权限,而且不被chroot。用户 zys 可以执行上传下载等操作,但是要被chroot。3配置不同FTP用户FTP用户登录-虚拟用户第10步,在FTP客户端中使用vuser2登录服务器并测试下载和上传操作[zys@centos7 tmp]$ ftp 192.168.100.100Name (192.168.100.100:zys): vuser2 <== 输入用户名vuser2Password: <== 输入用户vuser2的密码abcdef230 Login successful.ftp> ls-rw-r--r-- 1 0 0 0 Dec 05 13:21 file5.100ftp> get file5.100 <== 下载文件226 Transfer complete.ftp> put file5.110 <== 上传文件550 Permission denied.ftp> quit 展开更多...... 收起↑ 资源预览