学习Vsftpd服务做的笔记,方便自己查阅与复习。
使用Vsftpd服务传输文件 一、文件传输协议
二、配置Vsftpd服务前的准备
三、匿名开放模式
四、本地用户模式
五、虚拟用户模式
六、TFTP简单文件传输协议
七、容易忘的命令归纳
一、文件传输协议FTP与Vsftpd服务   一般来讲,人们把计算机联网的首要目的就是获取资料,而文件传输是一种非常重要的获取资料的方式。今天的互联网是由几千万台个人计算机、工作站、服务器、小型机、大型机、巨型机等具有不同型号、不同架构的物理设备共同组成的,而且即便是个人计算机,也可能会装有Windows、Linux、UNIX、Mac等不同的操作系统。为了能够在如此复杂多样的设备之间解决问题解决文件传输问题,FTP (File Transfer Protocol)文件传输应运而生。
  FTP是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20、21号端口,其中端口20用于进行数据传输,端口21用于接受客户端发出的相关FTP命令与数。FTP服务器普遍部署于内网中,具有容易搭建、方便管理的特点。而且有些FTP客户端工具还可以支持文件的多点下载以及断点续传技术,因此得到了广大用户的青睐。
  两种工作模式
  由于FTP、HTTP、Telnet等协议的数据都是经过明文进行传输,因此从设计的原理上就是不可靠的,但人们又需要解决文件传输的需求,因此便有了vsftpd服务程序。vsftpd(very secure ftp daemon,非常安全的FTP守护进程)是一款运行在Linux操作系统上的FTP 服务程序,不仅完全开源而且免费,此外,还具有很高的安全性、传输速度,以及支持虚拟用户验证等其他FTP服务程序不具备的特点。在不影响使用的前提下,能够让管理者自行决定是公开匿名、本地用户还是虚拟用户的验证方式,这样即便被骇客拿到了我们的账号密码,也不见得能登陆得了服务器。
  三种认证模式:
匿名开放模式:是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到FTP服务器。
本地用户模式:是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。但是如果被骇客破解了账户的信息,就可以畅通无阻地登录FTP服务器,从而完全控制整台服务器。
虚拟用户模式:更安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行口令验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务程序进行认证使用。这样,即使骇客破解了账户信息也无法登录服务器,从而有效降低了破坏范围和影响。
二、配置Vsftpd服务前的准备 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 //安装Vsftpd服务 $ dnf install vsftpd //清空iptables防火墙规则 $ iptables -F $ iptables-save //firewalld防火墙放行ftp服务 $ firewall-cmd --permanent --zone=public --add-service=ftp $ firewall-cmd --reload //修改SELinux域策略 $ getsebool -a | grep ftp $ setsebool -P ftpd_full_access=on //将服务加入到开机启动项 //每次配置完需要重启服务 $ systemctl enable vsftpd $ systemctl restart vsftpd
常见参数及作用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 listen=[YES|NO] 是否以独立运行的方式监听服务 lisen_address=IP地址 设置要监听的IP地址 listen_port=21 设置FTP服务的监听端口 downloadenable = [YES|NO] 是否允许下载文件 userlist_enable=[YES|NO] userlist_deny=[YES|NO] 设置用户列表为"允许“还是”禁止"操作 max_clients=0 最大客户端连接0为不限制 max_per_ip=O 同一IP地址的最大连接数,0为不限制 anonymous_enable=[YES|NO] 是否允许匿名用户访问 anon_upload_enable=[YES|NO] 是否允许匿名用户上传文件 anon_umask=022 匿名用户上传文件的umask值 anon_root=/var/ftp 匿名用户的FTP根目录 anon_mkdir_write_enable=[YES|NO] 是否允许匿名用户创建目录 anon_other_write_enable=[YES|NO] 是否开放匿名用户的其他写入权限(包括重命名、删除等操作权限) anon_max_rate=0 匿名用户的最大传输速率(字节嫩),0为不限制 local_enable=[YES|NO] 是否允许本地用户登录FTP local_umask=022 本地用户上传文件的umask值 local_root=/var/ftp 本地用户的FTP根目录 chroot_local_user=[YES|NO] 是否将用户权限禁锢在FTP目录,以确保安全 local_max_rate=0 本地用户最大传输速率(字节数),0为不限制
三、匿名开放模式 权限参数及作用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 anonymous_enable=YES 允许匿名访问模式 anon_umask=022 匿名用户上传文件的umask值 anon_upload_enable=YES 允许匿名用户上传文件 anon_mkdir_write_enable=YES 允许匿名用户创建目录 anon_other_write_enable=YES 允许匿名用户修改目录名称或删除目录
  umask中文被称为权限掩码或权限补码,新建普通文件的默认权限应该是666,目录权限会是777,这是写在系统配置文件中的,但默认值不等于最终权限值,根据公式:默认权限-umask=实际权限。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 //修改配置文件 $ vim /etc/vsftpd/vsftpd.conf anonymous_enable=YES anon_umask=022 anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES //修改默认访问目录所有者 $ chown -Rf ftp /var/ftp/pub //重启服务 $ systemctl restart vsftpd //连接到FTP服务器,匿名开放认证模式下,账户为anonymous,密码为空。 //默认访问目录为是/var/ftp $ ftp 192.168.10.10
四、本地用户模式 权限参数及作用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 anonymous_enable=NO 禁止匿名访问模式 local_enable=YES 允许本地用户模式 write_enable=YES 设置可写权限 local_umask=022 本地用户模式创建文件的umask值 userlist_deny=YES 启用"禁止用户名单",名单文件为ftpusers和user-list userlist_enable=YES 开启用户作用名单文件功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 //修改配置文件 $ vim /etc/vsftpd/vsftpd.conf anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 userlist_deny=YES userlist_enable=YES //将用户从禁止访问名单中去掉 $ vim /etc/vsftpd/user_list $ vim /etc/vsftpd/ftpusers //重启服务 $ systemctl restart vsftpd
  两个禁止用户登录文件user_list和ftpusers之间的区别:如果把上面主配置文件中userlist deny参数值改成NO,那么user list列表就变成了强制白名单,功能完全是反过来的,只允许列表内的用户访问,拒绝其他人。
五、虚拟用户模式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 //创建用于ftp认证的用户数据库文件vuser.list $ vim /etc/vsftpd/vuser.list zhangsan redhat lisi redhat //使用db_load命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件 $ db_load -T -t hash -f vuser.list vuser.db $ chmod 600 vuser.db $ rm -f vuser.list //创建用于虚拟用户映射的系统本地用户和存储文件的根目录 $ useradd -d /var/ftproot -s /sbin/nologin virtual $ ls -ld /var/ftproot/ $ chmod -Rf 755 /var/ftproot/ //建立用于支持虚拟用户的PAM文件 $ vim /etc/pam.d/vsftpd.vu auth required pam_userdb.so db=/etc/vsftpd/vuser account required pam_userdb.so db=/etc/vsftpd/vuser //修改vsftpd配置文件,将PAM认证文件的名称修改为vsftpd.vu $ vim /etc/vsftpd/vsftpd.conf anonymous_enable=NO local_enable=YES write_enable=YES guest_enable=YES guest_username=virtual //允许对禁涸的FTP根目录执行写入操作,而且不拒绝用户的登录请求 allow_writeable_chroot=YES //把vsftpd主配置文件中原有的PAM认证文件vsftpd修改为新建的vsftpd.vu文件 pam_service_name=vsftpd.vu //为zhangsan和lisi设置不同的权限 $ mkdir /etc/vsftpd/vusers_dir/ $ cd /etc/vsftpd/vusers_dir/ $ touch lisi $ vim zhangsan anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES //修改配置文件中用户权限配置文件的路径 $ vim /etc/vsftpd/vsftpd.conf user_config_dir=/etc/vsftpd/vusers_dir $ systemctl restart vsftpd //登录ftp服务器
六、TFTP简单文件传输协议   简单文件传输协议(Trivial File Transfer Protocol TFTP)是一种基于UDP协议在客户端和服务器之间进行简单文件传输的协议。顾名思义,它提供不复杂、开销不大的文件传输服务,可将其当作FTP协议的简化版本。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 $ dnf install tftp-server tftp xinetd //参考用户示例文件(/usr/share/doc/xinetd/sample.conf)创建配置文件 $ vim /etc/xinetd.d/tftp service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /var/lib/tftpboot disable = no per_source = 11 cps = 100 2 flags = IPv4 } $ systemctl restart xinetd $ systemctl enable xinetd $ firewall-cmd --zone=public --permanent --add-port=69/udp $ firewall-cmd --reload
  tftp命令访问文件,可能用到的参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ? 帮助信息 put 上传文件 get 下载件 verbose 显示详细的处理信息 status 显示当前的状态信息 binary 使用二进制进行传输 ascii 使用ASCH码进行传输 timeout 设置重传的超时时间 quit 退出
七、容易忘的命令归纳 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 $ firewall-cmd --permanent --zone=public --add-service=ftp $ getsebool -a | grep ftp $ setsebool -P ftpd_full_access=on $ chown -Rf ftp /var/ftp/pub $ db_load -T -t hash -f vuser.list vuser.db $ chmod 600 vuser.db $ rm -f vuser.list $ useradd -d /var/ftproot -s /sbin/nologin virtual $ vim /etc/pam.d/vsftpd.vu auth required pam_userdb.so db=/etc/vsftpd/vuser account required pam_userdb.so db=/etc/vsftpd/vuser $ vim /etc/xinetd.d/tftp service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /var/lib/tftpboot disable = no per_source = 11 cps = 100 2 flags = IPv4 }
本章节到此结束!