- 匿名开放模式
- 本地用户模式
- 虚拟用户模式
实验环境
VMware CentOS6.5 NAT模式
安装
# yum install vsftpd
永久关闭iptables防火墙
# chkconfig iptables off
永久关闭SELinux
vi /etc/selinux/config
将SELINUX=enforcing改为SELINUX=disabled 设置后需要重启系统才能生效,(实验环境下)启动服务前一定要确定防火墙与SELinux服务关闭了,否则会引起很多问题。
匿名开放模式
• anonymous_enable=YES //允许匿名访问;
• anon_root=/var/ftp/ //设置匿名用户的FTP根目录(默认)
• write_enable=YES //启用任何形式的写入权限,(如上传、删除文件等)都需要开启此项
• anon_upload_enable=YES //允许匿名用户上传文件
• anon_umask=022://设置匿名用户所上传文件的默认权限掩码值(反掩码)
• anon_mkdir_write_enable=YES //允许匿名用户有创建目录的写入权限
• anon_other_write_enable=YES //允许匿名用户有其他写入权限,如对文件改名、覆盖及删除文件等
• anon_world_readable_only=no //仅允许ftp用户对文件有读权限才可下载
• anon_max_rate=0 //匿名用户的最大传输速度,单位为bytes/sec,值为0表示不限制
• xferlog_enable=YES //启用xferlog日志,默认记录到 /var/log/xferlog
• xferlog_std_format=YES //启用标准的xferlog日志格式,若禁用此项,将使用vsftpd自己的日志格式
• ftpd_banner=Welcome to FTP service //服务器标签,登录时会显示
• dirmessage_enable=YES
• listen=YES //以独立运行的方式监听服务
• connect_from_port_20=YES //允许服务器主动模式(从20端口建立数据连接)
在/etc/vsftpd/vsftpd.conf 文件中配置以下信息
anonymous_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_umask=022
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_world_readable_only=no
anon_max_rate=0
xferlog_enable=YES
xferlog_std_format=YES
ftpd_banner=Welcome to FTP service
dirmessage_enable=YES
listen=YES
connect_from_port_20=YES
启动服务
service vsftpd start
测试
Liunx端 (客户端中需要有ftp程序,没有ftp,下载指令yum install ftp)匿名模式下使用ftp(或anonymous)账号登录,密码为空。
[root@localhost vsftpd]# ftp 192.168.213.130
Connected to 192.168.213.130 (192.168.213.130).
220 Welcome to FTP service
Name (192.168.213.130:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
Windows10端
连接前 去Internet属性中把“被动使用FTP”栏勾选去掉
资源管理器中地址栏连接(匿名模式默认访问路径/var/ftp)
本地用户模式
本地用户使用系统用户账号登录,访问用户的家目录(/home/用户名),所以不存在写入权限不足的情况,如果权限不对,手动查看修改权限。
/etc/vsftpd/ftpusers 文件 用于指定不能访问Vsftpd服务器的用户列表,在其中的用户不管怎样都不能访问vsftpd服务
/etc/vsftpd/user_list 文件 当配置文件中userlist_enable=YES且userlist_deny=YES,user_list文件中的用户无法访问vsftpd服务,当userlist_deny=NO 只有user_list文件中的用户才有权访问vsftpd服务
vsftpd服务器先执行检查user_list文件,再执行ftpusers文件,所以同时出现在两个文件中的用户,只要去掉在ftpusers中的记录,就可以正常登陆服务器
- anonymous_enable=NO //禁止匿名访问
- local_enable=YES //允许本地用户访问
- userlist_enable=YES //启用userl_ist用户列表文件;
- userlist_deny=NO //不禁用user_list列表文件中的用户账号,即在user_list中的账号可以访问ftp服务
- tcp_wrappers=YES //启用tcp_wrappers主机访问控制
- allow_writeable_chroot=YES //允许被限制用户的主目录具有写权限(此项必须写入,否则可能会报错)
- chroot_local_user=YES //所有本地用户不可切换到主目录以外的目录
- pam_service_name=vsftpd //登录验证方式 默认为vsftpd(***必须写在配置文件中,否则不管怎么登陆都会报登录失败,
这个卡了两个小时 - tcp_wrappers=YES //启动防火墙(
不设应该也没关系,防火墙我们都关了,用个锤锤,没测试过!!
local_enable=YES
write_enable=YES
local_umask=022
userlist_enable=YES
userlist_deny=NO
chroot_local_user=YES
anonymous_enable=NO
#anon_upload_enable=YES
#anon_umask=022
#anon_mkdir_write_enable=YES
#anon_other_write_enable=YES
#anon_world_readable_only=no
#anon_max_rate=0
xferlog_enable=YES
xferlog_std_format=YES
ftpd_banner=Welcome to FTP service
dirmessage_enable=YES
listen=YES
connect_from_port_20=YES
pam_service_name=vsftpd
tcp_wrappers=YES
启动服务
# service vsftpd start
测试
测试与匿名模式一样只不过多了账号与密码输入,这里我们设置了userlist_deny=NO所以只有在user_list文件且不在ftpuser文件中的用户才可正常访问服务。
虚拟用户模式
需要为FTP服务单独建立用户数据库文件,虚拟出用来进行口令验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务程序进行认证使用。这样,即使黑客破解了账户信息也无法登录服务器,从而有效降低了破坏范围和影响。
1️⃣创建FTP认证的数据库文件,账号密码各占一行
[root@localhost Desktop]# vi /etc/vsftpd/fuser.list
[root@localhost Desktop]# cat /etc/vsftpd/fuser.list
test
mima
2️⃣将fuser.list进行hash加密转成数据库文件,并降低文件权限,删除原文件
[root@localhost vsftpd]# db_load -T -t hash -f fuser.list fuser.db
[root@localhost vsftpd]# chmod 600 fuser.db
[root@localhost vsftpd]# rm -f fuser.list
3️⃣创建虚拟用户访问的文件目录,和虚拟用户映射的系统本地用户,因为虚拟用户登录后是通过其映射的系统用户对目录进行一系列操作,这里我们创建一个不允许登录服务器的系统用户(在生产环境中避免误操作以及提高安全)。
[root@localhost vsftpd]# useradd -d /var/ftpshare -s /sbin/nologin ftpxuni
[root@localhost vsftpd]# chmod -R 755 /var/ftpshare/
[root@localhost vsftpd]# ll -ld /var/ftpshare/
drwxr-xr-x 4 ftpxuni ftpxuni 4096 Apr 22 03:50 /var/ftpshare/
4️⃣建立用于支持虚拟用户的PAM文件,一种vsftpd认证方式
新建一个用于虚拟用户认证的PAM文件vsftpd.xn,其中PAM文件内的“db=”参数为使用db_load命令生成的账户密码数据库文件的路径,但不用写数据库文件的后缀:
[root@localhost vsftpd]# vi /etc/pam.d/vsftpd.xn
[root@localhost vsftpd]# cat /etc/pam.d/vsftpd.xn
auth required pam_userdb.so db=/etc/vsftpd/fuser
account required pam_userdb.so db=/etc/vsftpd/fuser
5️⃣配置文件
虚拟用户登录后想要获得对目录的一系列操作权限,需要把匿名模式下的操作权限写上,这里我开放了对文件的所有操作(增删改),但anonymous_enable=NO,匿名模式并没有开启
- local_enable=YES 虚拟用户模式需要开启本地用户模式,以进行连接
- guest_enable=YES 启动虚拟用户模式
- guest_username=ftpxuni 绑定虚拟用户的系统用户
- #allow_writeable_chroot=YES 这一句在CentOS6.5中不支持,用write_enable=YES替换
- pam_service_name=vsftpd.xn 使用自己设定的认证文件
local_enable=YES
guest_enable=YES
guest_username=ftpxuni
#allow_writeable_chroot=YES
write_enable=YES
local_umask=022
userlist_enable=YES
userlist_deny=YES
chroot_local_user=YES
anonymous_enable=NO
anon_upload_enable=YES
anon_umask=022
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_world_readable_only=no
anon_max_rate=0
xferlog_enable=YES
xferlog_std_format=YES
ftpd_banner=Welcome to FTP service
dirmessage_enable=YES
listen=YES
connect_from_port_20=YES
pam_service_name=vsftpd.xn
tcp_wrappers=YES
保存退出配置文件 启动服务
# service vsftpd start
到这,简单虚拟用户模式已经配置完,后面就是一样的测试,不再记录。
上面配置的结果是对所有虚拟用户都开放了权限(因为我把文件操作权限全写在配置文件中了)想要实现不同虚拟用户有不同权限,进行以下操作,新建一个目录,用来保存虚拟用户的配置文件,文件名以虚拟用户名命名。
[root@localhost vsftpd]# mkdir /etc/vsftpd/fusers_dir
[root@localhost vsftpd]# cd /etc/vsftpd/fusers_dir
[root@localhost fusers_dir]# vim test
[root@localhost fusers_dir]# cat test
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
修改vsftpd.conf文件中的配置信息
这里一开始我只设置了一个虚拟用户,所以后面没有进行权限比较。当你有设置多个虚拟账号时,你就可以通过在/etc/vsftpd/fusers_dir 创建每个虚拟账号的权限文件,实现不同权限分配,不设置,账号对目录文件没有操作权限。
- user_config_dir=/etc/vsftpd/fusers_dir 指定虚拟用户的配置文件路径
local_enable=YES
guest_enable=YES
guest_username=ftpxuni
#allow_writeable_chroot=YES
write_enable=YES
local_umask=022
userlist_enable=YES
userlist_deny=YES
chroot_local_user=YES
anonymous_enable=NO
#anon_upload_enable=YES
anon_umask=022
#anon_mkdir_write_enable=YES
#anon_other_write_enable=YES
anon_world_readable_only=no
anon_max_rate=0
xferlog_enable=YES
xferlog_std_format=YES
ftpd_banner=Welcome to FTP service
dirmessage_enable=YES
listen=YES
connect_from_port_20=YES
pam_service_name=vsftpd.xn
user_config_dir=/etc/vsftpd/fusers_dir
tcp_wrappers=YES
`
重启服务
service vsftpd restart
测试结束