Vsftpd文件传输服务(三种认证模式:匿名开放 、本地用户、虚拟用户)
FTP是一种在互联网中进行中文件传输的协议,基于客户端/服务器端模式,默认使用20、21号端口,其中端口20(数据端口)用于进行数据传输,端口21(命令端口)用于接受客户端发出的相关FTP命令与参数。
FTP的出现解决了各类设备、各类操作系统之间文件传输问题,极大地方便了用户通过网络资源的获取。
FTP服务器常部署于企业内网中,具有容易搭建、方便管理的特点,目前有些FTP客户端工具还可以支持文件的多点下载以及断点续传,因此FTP服务得到了广大用户的青睐。
FTP协议有两种工作模式:
主动模式: FTP服务器主动向客户端发起连接请求;
被动模式: FTP服务器等待客户端发起连接请求(默认模式);
vsftpd的三种认证模式
-
匿名开放模式: 它是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到FTP服务器; -
本地用户模式 它是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。但是若被恶意用户破解了账户的信息,就可以畅通无阻地登录FTP服务器,从而完全控制服务器; -
虚拟用户模式 它是三种模式中最安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出的用户进行口令验证的账户信息,而这些账户信息在服务器系统上并不存在,仅供FTP服务器进行认证使用。
部署服务
环境准备
服务 | 系统 | IP |
---|
服务器 | centos7 | 192.168.129.135 | 客户端 | win7 | 19.168.129.134 |
内容
安装vsftpd服务
systemctl stop firewalld ebtables
systemctl disable firewalld ebtables
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
yum -y install vsftpd
默认FTP站点目录:/var/ftp 配置文件路径:/etc/vsftpd/vsftpd.conf
一、匿名开放模式
修改vsftpd.conf配置文件
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES //允许匿名访问模式
anon_upload_enable=YES //启用,允许匿名用户上传文件
anon_mkdir_write_enable=YES //启用,允许匿名用户创建目录
no_anon_password=YES //匿名用户不要密码就靠这个
新增下面参数
anon_other_write_enable=YES //允许匿名用户修改目录名称或删除目录
启动服务
service vsftpd start
修改ftp目录权限
chown -R ftp.ftp /var/ftp/pub/
chmod -R 777 /var/ftp/pub/
测试
查看ftp服务器站点目录及文件
在客户端中运行“命令提示符”,登录ftp站点
客户端下载文件
客户端上传文件
进入ftp服务器站点查看上传文件
客户端删除文件
进入ftp服务器站点查看文件是否删除
二、本地用户模式
修改vsftpd.conf配置文件
vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO //禁止匿名访问模式
local_root=/var/ftp/pub //设置本地用户登录所在的目录(如没有设置则默认为家目录/home/zhangsan)
ftpd_banner=Welcome to blah FTP service. //ftp工具连接成功提示
local_enable=YES //允许本地用户模式
write_enable=YES //设置可写权限
local_umask=022 //本地用户创建文件的umask值
userlist_enable=YES //启动“禁止名单”,名单文件为ftpusers和user_list
userlist_deny=YES //开启用户作用名单文件功能
创建两个本地用户zhangsan、lisi
useradd -s /sbin/nologin zhangsan //创建用户zhangsan
echo 123456 | passwd zhangsan --stdin //设置密码
useradd -s /sbin/nologin lisi //创建用户lisi
echo 123456 | passwd lisi --stdin //设置密码
修改ftpusers文件
vi /etc/vsftpd/ftpusers
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
lisi
重启服务
service vsftpd restart
测试
ftp服务器开启了本地用户验证登录,lisi添加到了黑名单中,不让其登录,zhagnsan可以进行正常登录 客户端分别使用lisi、zhangsan两个账户进行登录测试
三、虚拟用户模式
创建ftp用户数据库文件 奇数行为账户名,偶数行为密码
vim /etc/vsftpd/user.list
natasha
123
tom
123
加密用户信息文件 明文信息既不安全,也不符合让vsftpd服务程序直接加载的格式,因此需要使用db_load命令用算法将原始的明文信息文件转换成数据库文件,并且降低数据库文件的权限(避免其他人看到数据库文件的内容),然后再把原始的明文信息文件删除。
使用哈希算法加密信息文件:
db_load -T -t hash -f user.list user.db //转换为数据库文件
chmod 600 user.db //修改权限不让其他用户查看
创建用于储存文件的根目录以及添加虚拟用户映射的系统本地用户 创建虚拟用户以及FTP服务用于存储文件的根目录
ps:当虚拟用户登录后所访问的默认位置。
useradd -d /var/user -s /sbin/nologin virtual
由于Linux系统中的每一个文件都有所有者、所属组属性,例如使用虚拟账户“张三”新建了一个文件,但是系统中找不到账户“张三”,就会导致这个文件的权限出现错误。为此,需要再创建一个可以映射到虚拟用户的系统本地用户。简单来说,就是让虚拟用户默认登录到与之有映射关系的这个系统本地用户的家目录中,虚拟用户创建的文件的属性也都归属于这个系统本地用户,从而避免Linux系统无法处理虚拟用户所创建文件的属性权限。
为了方便管理FTP服务器上的数据,可以把这个系统本地用户的家目录设置为/var目录(该目录用来存放经常发生改变的数据)。并且为了安全起见,我们将这个系统本地用户设置为不允许登录FTP服务器,这不会影响虚拟用户登录,而且还可以避免黑客通过这个系统本地用户进行登录。
赋予存储目录权限:
chmod 755 /var/user/
建立用于支持虚拟用户的PAM文件
新建一个用于虚拟用户认证的PAM文件vsftpd.vu,其中PAM文件内的“db=”参数为使用db_load命令生成的账户密码数据库文件的路径,但不用写数据库文件的后缀
cd /etc/pam.d/
cp vsftpd vsftpd.a
vim vsftpd.a
清空原本数据,添加以下信息: ps:开头注释信息不能删除!!
auth required pam_userdb.so db=/etc/vsftpd/user
account required pam_userdb.so db=/etc/vsftpd/user
修改vsftpd服务程序的主配置文件
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO //禁止匿名开放模式
local_enable=YES //允许本地用户
guest_enable=YES //开启虚拟用户
guest_username=virtual //指定虚拟用户为virtual
pam_service_name=vsftpd.a //指定PAM文件
userlist_enable=YES //判断/etc/vsftpd/user_list文件是否生效
chroot_local_user=YES //使用户不能离开主目录,默认有取消注释即可
重启服务
service vsftpd restart
firewall-cmd --list-all
firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
|