ftp
Posted skyzy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ftp相关的知识,希望对你有一定的参考价值。
FTP 文件传输协议;跨平台;文件上传和下载 vsftpd:非常安全的一个ftp服务 tcp 21端口(命令端) 20端口(数据端口,主动模式下) 默认情况下,ftp是被动模式 主动模式:server——>主动的去连接客户端的数据端口 被动模式:server——>等待客户端来连接服务端所开启随机的数据端口 客户端工具: Linux:lftp、ftp、sftp.. windows:IE/firefox、FileZilla 1、 2、 3、软件三步曲 # rpm -ql vsftpd /etc/vsftpd/vsftpd.conf :主配置文件 /usr/sbin/vsftpd :二进制命令 /etc/rc.d/init.d/vsftpd :启动脚本 /etc/vsftpd :主目录 /etc/vsftpd/ftpusers :用户访问控制文件(黑名单) /etc/vsftpd/user_list :用户访问控制列表文件(可黑可白) /etc/logrotate.d/vsftpd :日志轮转文件 /etc/pam.d/vsftpd :认证文件 /var/ftp :默认匿名用户上传下载的数据目录 /var/ftp/pub :扩展目录 /usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_USERS :虚拟用户相关的文档 /usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_HOSTS :虚拟主机相关的文档 4、了解配置文件 # cat /etc/vsftpd/vsftpd.conf anonymous_enable=YES ---> 允许匿名用户访问 local_enable=YES --->允许本地用户访问 write_enable=YES --->可写(相当于总开关:本地用户,对匿名用户也有效) local_umask=022 ---> 本地用户的默认掩码 connect_from_port_20=YES --->支持主动模式(默认被动模式) dirmessage_enable=YES --->开启消息文件 xferlog_enable=YES ---> 开启日志 xferlog_std_format=YES --->日志格式 listen=YES --->独立模式 pam_service_name=vsftpd --->认证名称 userlist_enable=YES --->启用用户列表 tcp_wrappers=YES --->支持tcp_wrappers功能,类似防火墙,但是没有防火墙强大 local:本地用户 anon:匿名用户 # vim /etc/vsftpd/vsftpd.conf ---->修改配置文件 # man 5 vsftpd.conf 5、根据需求通过修改配置文件来完成服务的搭建 需求:给所有匿名用户共享文件(只允许查看,但不允许上传) 结论:不需要修改任何的配置文件(默认可以查看下载,不允许上传) 6、启动服务|开机自启动 # service vsftpd restart 7、测试验证 lftp 10.1.1.1 -u username:以某一用户的身份: lftp 10.1.1.1 -->user username-->passwd ftp 10.1.1.1-->ftp---->(ENTER键) 匿名 需求2:允许匿名用户上传并且可以删除、修改文件 ---> anon_other_write_enable=YES (可以删除,重命名) ---> anon_upload_enable=YES (可以上传) ---> anon_mkdir_write_enable=YES (可以创建文件) 验证:lftp 10.1.1.1:~> ls ls: Login failed: 500 OOPS: vsftpd: refusing to run with writable anonymous root 原因:/var/ftp 777 o+w 解决:# chmod o+w 755 /var/ftp 或:在默认的数据根目录里再创建一个目录,并且给1777或者o+w 需求3:匿名用户下载别人的文件 ----> anon_umask=022 需求4:更改匿名用户的默认数据根目录(/var/ftp默认) eg: ——> /data/anon 1、# mkdir /data/anon -p 2、# vim vsftpd.conf ---> anon_root=/data 3. # chmod o+w /data/anon 需求5:更改本地用户的数据根目录(本地用户默认是其家目录) eg:/data/local ---> local_root=/data/local 需求6:控制本地用户来回切换数据根目录 (默认匿名用户不能切换至其它目录,本地用户可以) 情况1:禁锢所有用户的数据根目录 ---> chroot_local_user=YES (默认为NO) 情况2:只允许user2用户可以切换,其他人不允许 ---> chroot_local_user=YES ---> chroot_list_enable=YES ---> chroot_list_file=/etc/vsftpd/chroot_list # echo user2 >>/etc/vsftpd/chroot_list 情况3:只拒绝user2用户切换,其他人都可以切换 #chroot_local_user=YES(注释掉) ---> chroot_list_enable=YES ---> chroot_list_file=/etc/vsftpd/chroot_list chroot_local_user #是否将所有用户限制在主目录,YES为启用 (只能在主目录内);NO禁用. (该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到要目录之外的) chroot_list_enable #是否启动限制用户的名单 YES为启用 NO禁用(包括注释掉也为禁用) chroot_list_file=/etc/vsftpd/chroot_list #是否限制在主目录下的用户名单,至于是限制名单还是排除名单,这取决于chroot_local_user的值 需求7:ftp自身的访问控制 1、不允许user3用户访问ftp服务 # echo user3 >> /etc/vsftpd/ftpusers(黑名单) 2、/etc/vsftpd/user_list 默认是黑名单 # vim /etc/vsftpd /user_list If userlist_deny=NO, only allow users in this file(只允许该文件内的用户访问) If userlist_deny=YES (default), never allow users in this file, and do not even prompt for a password.([默认]不允许该文件内的用户访问) 需求8:开启消息提示 开启本地用户和匿名用户a-common.x86_64 的消息提示: --->banner_file=/etc/banner 指定消息文件(连接登录时显示) # echo welcome to user1 home > /data/local/.message # echo welcome to anon home > /data/.message 其他访问控制: max_clients :最大的连接数 max_per_ip :每个IP能连接的最大数 pasv_max_port :被动模式的最大端口 pasv_min_port :被动模式的最小端口 max_login_fails :最大的失败登录次数 local_max_rate :本地用户的最大传输速率 anon_max_rate :匿名用户的最大传输速率 listen_port :监听的端口号 网络访问控制: tcp_wrappers 工具 /etc/hosts.allow /etc/hosts.deny 先匹配allow再匹配deny;如果两个都没有,全部允许;如果两个都有allow优先 /etc/hosts.deny ---> vsftpd:all vsftpd:172.16.0.0/255.255.255.0 EXCEPT 172.16.250.1 sshd,vsftpd:.uplooking.com vsftpd:10.1.1.1 注意:不支持172.16.0.0/24写法 lftp 10.1.1.1 -u username:以某一用户的身份: lftp 10.1.1.1 -->user username-->passwd ftp 10.1.1.1-->ftp---->(ENTER键) 匿名 下载目录:~> mirror dirname 下载文件:get filename 上传目录:~>mirror -R dirname 上传文件:put filename 练习1: 搭建一个自己的ftp服务器,要求如下: 1、匿名用户可以上传下载文件,同时也可以下载其他人的上传的文件,并且所有匿名用户的文件都保存在/anon/data目录里 anon_upload_enable=YES anon_umask=022 anon_root=/anon/data 2、创建一个本地用户zhagnsan(自己名字),可以访问你的ftp服务器,但是不能登录你的主机,并且只能在自己的家里面活动 useradd -s /sbin/nologin zhangsan 或者 useradd -r zhangsan 不允许zhangsan用户切换其他人可以 chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list # echo zhangsan > /etc/vsftpd/chroot_list 3、zhangsan用户可以上传下载文件,并且所有本地用户上传的文件都在/local/data目录里 local_root=/local/data chmod o+w /local/data 4、在你的本地创建/tmp/zhangsan目录,并且在其下创建5个文件,通过客户端工具以匿名用户的身份将整个目录上传到10.1.1.1上的data目录里 lftp——>user xxx ftp ——>ftp lftp 10.1.1.1 5、使用客户端工具(除了浏览器)用本地用户user1/123下载10.1.1.1上的“2017-04-26”目录到你的本地/tmp/zhangsan里 6、不允许10.1.1.2访问你的ftp服务,但是允许10.1.1.254访问 7、ftp服务的随机端口范围在2000~2050之间 pasv_max_port: pasv_min_port : 练习2:将vsftpd服务托管给xinetd服务管理 # vim /etc/xinetd/ftp (在xinetd服务下创建vsftpd的配置文件) service ftp { disable = no socket_type = stream wait = no user = root server = /usr/sbin/vsftpd log_on_failure += USERID } # vim /etc/vsftpd/vsftpd.conf --->listen=NO 将YES变为NO(将vsftpd的独立服务停掉) # service xinetd restart 基于IP的虚拟主机: 需求: 访问10.1.1.1时,提供匿名用户下载功能,限速500kbps,匿名用户的家目录是/data/anon 访问192.168.0.1时,提供用户user1/123上传下载文件功能,并且可以删除、修改、创建、只能在自己的家里活动 思路: 1、需要两个ip地址 2、根据需求去创建各自的配置文件 3、重启服务测试验证 步骤: 1、配置ip地址 # ifconfig eth0 10.1.1.1 # ifconfig eth0:1 192.168.0.1 2、创建各自的配置文件 1> vim vsftpd1.conf anon_max_rate=512000 anon_root=/data/anon listen_address=10.1.1.1 2> vim vsftpd2.conf chroot_local_user=YES listen_address=192.168.0.1 3、重启服务测试验证 基于端口的虚拟主机: 需求: 访问10.1.1.1的21端口时,提供匿名用户上传下载功能,并且最大连接数20,每个ip最大连接数为2 访问10.1.1.1的10021端口时,提供用户user1/123上传下载功能,默认数据目录为/data,并且最大登录失败次数为2 思路: 1、根据需求去创建各自的配置文件 2、重启服务测试验证 步骤: 1、环境还原 2、# vim /etc/vsftpd/vsftpd1.conf anon_upload_enable=YES max_clients=20 max_per_ip=2 listen_port=21 # vim /etc/vsftpd/vsftpd2.conf local_root=/data max_login_fails=2 listen_port=10021 启动服务验证: # service vsftpd restart # lftp 10.1.1.110 -p21 # lftp 10.1.1.110 -p10021 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 虚拟用户: 需求: 1、用户u1可以下载 限速200kbps /home/ftpsite/u1 2、用户u2可以上传 限速500kbps /home/ftpsite/u2 3、用户u3超级vip 不限速 可以上传下载 /home/ftpsite 思路: 1、创建相应的虚拟用户 2、根据需求创建不同的配置文件 3、测试验证 1006 vim logins.txt 1007 ll 1008 db_load -T -t hash -f logins.txt /etc/vsftpd/login.db 1009 ll 1010 chmod 600 /etc/vsftpd/login.db 1011 ll 1012 ll /etc/pam.d/vsftpd 1013 mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak 1014 vim /etc/pam.d/vsftpd 1015 useradd -d /home/ftpsite virtual 1016 ls -ld /home/ftpsite 1017 cp /etc/hosts /home/ftpsite 1018 ll /home/ftpsite/ 1019 chown virtual.virtual /home/ftpsite/hosts 1020 ll /home/ftpsite/ 1021 vim vsftpd.conf 1022 service vsftpd restart 1023 vim vsftpd.conf 1024 service vsftpd restart 1025 cat vsftpd.conf 思考:怎么样让虚拟用户和本地用户同时使用? Required:堆栈中的所有 Required 模块必须看作一个成功的结果。如果一个或多个 Required 模块失败,则实现堆栈中的所有 Required 模块,但是将返回第一个错误。 也就意味着,required需要所有内容都满足才行,当我们前两条配置虚拟用户登录验证通过后,继续向下面的配置条目进行验证,验证是否是本地用户时结果 发现不是,又因为,验证本地用户的control_flag(见上网址中解释)也为required,所以这时候,就会返回错误,也即验证不成功。 所以我们不能同时设置虚拟用户和本地用户的control_flag为required。按照上面的网址所说: Sufficient:如果标记为 sufficient 的模块成功并且先前没有 Required 或 sufficient 模块失败,则忽略堆栈中的所有其余模块并返回成功。 我们可以把虚拟用户的验证配置放在最前面,且把control_flag设为sufficient。这样的话,如果遇到是虚拟用户,那么可以通过验证,如果是本地用户,忽略掉sufficient的两条配置规则,只要满足required就行,所以也能通过验证。 需求: 1、用户u1可以下载 限速200kbps /home/ftpsite/u1 2、用户u2可以上传 限速500kbps /home/ftpsite/u2 3、用户u3超级vip 不限速 可以上传下载 /home/ftpsite 思路: 1、创建相应的虚拟用户 2、根据需求创建不同的配置文件 3、测试验证 创建用户的子配置文件放在指定的目录下(/home/ftpsite/) u1: local_root=/home/ftpsite/u1 anon_max_rate=200000 u2: anon_upload_enable=YES anon_other_write_enable=YES anon_mkdir_write_enable=YES local_root=/home/ftpsite/u2 anon_max_rate=500000 u3: anon_upload_enable=YES anon_other_write_enable=YES anon_mkdir_write_enable=YES以上是关于ftp的主要内容,如果未能解决你的问题,请参考以下文章