ftp的三种用户模式
匿名用户:vsftp默认开启匿名用户,但只允许下载不允许上传;匿名用户anonymous或ftp;匿名用户目录/var/ftp,但实际上vsftp对匿名用户做了chroot
本地用户:vsftp默认开启本地用户登录;本地用户登录目录是其主目录,可以随意切换目录(可通过local_root=指定登录目录);一般通过系统权限控制用户访问
虚拟用户:需要手工配置,通过本地文件或数据库将ftp虚拟用户映射为一个系统用户,通过对此系统用户的控制实现更高的安全性
安装
yum install vsftpd
vsftp的主配置文件:/etc/vsftpd/vsftpd.conf
启动vsftp
service vsftpd start
开启防火墙
vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
service iptables restart
修改SELinux //解决本地用户登录出现500错误问题(无法进入用户主目录)
setsebool –P ftp_home_dir 1
setsebool –P allow_ftpd_full_access 1
或关闭SELinux
vi /etc/sysconfig/selinux
SELINUX=enforcing改为disable
启用自启动
chkconfig --level 35 vsftpd on
常用配置
anonymous_enable=YES //默认开启了匿名用户,请注意如果想要关闭匿名用户,不是简单的注释掉此选项(因为默认匿名用户开启),而是指定选项值为NO(anonymous_enable=NO)
ftpd_banner= //登录banner,默认未开
xferlog_enable=YES //开启日志,默认开启
xferlog_file=/var/log/xferlog //日志路径,默认未开
xferlog_std_format=YES //日志格式,默认开启
anon_max_rate=100000 //匿名用户最大传输速率,默认不存在
local_max_rate=1000000 //本地用户最大传输速率,默认不存在
max_clients=xx //服务器最大并发连接数
max_per_ip=x //每IP最大连接数
pasv_enable=NO //关闭被动模式,用以解决ftp工具和windows连接无法list问题(我并不想在防火墙上开放过多的端口提供客户端的被动连接,如果必须采用被动模式,请参考小僧的博客文章。需要注意的是采用被动模式时,windows连接时需要把internet option---advaneced--use passive mode取消勾选,否则windows默认采用被动模式连接;一般客户端工具连接时能够自动判断,不需要过多配置)
cmds_allowed=ABOR,CWD,LIST,MKD,NLST,PASS,PASV,PORT,PWD,QUIT,RETR,RNFR,RNTO,SITE,SIZE,STOR,TYPE,USER,CDUP,APPE,MDTM //此选项用以指定可以使用的FTP交互命令,我去掉了DELE(删除)用以限制用户删除远程文件,具体命令参数请参
用户访问控制
1.指定用户禁止访问,其他用户允许访问
userlist_enable=YES
userlist_file=/etc/vsftpd/vsftpd.userlist
userlist_deny=YES
2.指定用户允许访问,其他用户禁止访问
userlist_file=/etc/vsftpd/vsftpd.userlist
userlist_deny=NO
本地用户chroot
1.指定用户不受限制,其他用户受限
chroot_local_user=YES //启用本地用户chroot,启用后本地用户登录就被限制在其登录目录中(默认为其主目录)
chroot_list_enable=YES //启用例外列表
chroot_list_file=/etc/vsftpd/chroot_list //例外列表路径
2.指定用户受限,其他用户不受限
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
ftp常用命令
open x.x.x.x //打开到ftp服务器的连接
user xxx //登录用户
cd //改变远程登陆目录(服务器端)
lcd //改变本地目录(客户端)
bin //以二进制模式传输(通常用于程序等)
ascii //asc码模式传输(默认方式,常用于传输文本类文件)
hash //显示传输进度
bell //传输完毕后响铃
prompt //交互模式开关(多用于mget,mput关闭交互)
status //显示当前状态(传输模式,是否显示传输进度,是否响铃,是否交互等)
get //下载
mget //批量下载
put //上传
mput //批量上传