VSFTPd
vsFTPd的软件信息
服务端软件名:vsftpd
客户端软件名:ftp
服务名:vsftpd
端口号:20,21,地址范围内随机端口
vsFTP是linux中很安全的一种ftp软件,本章主要介绍搭建FTP服务器的过程
[root@kk ~]# yum -y install vsftpd
配置开机自动启动vsftp服务
查看自动启动的服务列表中有无vsftpd服务:
[root@kk vsftpd]# systemctl list-unit-files|grep vsftpd.service
vsftpd.service disabled
[root@kk vsftpd]# systemctl enable vsftpd
创建vsftp系统用户
为了安全性要求,以及方便维护和权限控制管理,我们采用FTP虚拟用户来进行管理。这种方式就要求首先要有系统用户,然后将FTP虚拟用户映射到系统用户上,然后给FTP虚拟用户设置访问得目录和权限。
首先要新建系统本地用户,比如virtftp,设置该用户的主目录为/data/ftp,不允许登录,命令如下:
[root@kk vsftpd]# useradd -d /data/ftp -s /sbin/nologin virtftp
[root@kk vsftpd]# chown -R virtftp:virtftp /data/ftp
[root@kk vsftpd]# chmod 755 -R /data/ftp/
virtftp的作用是提供一个家目录给所创建的ftp用户使用,而不是登录
vsftp的配置文件目录
- vftpd.conf是配置文件
- ftpuser 永久黑名单
- user_list 临时黑名单
[root@kk ~]# cd /etc/vsftpd/
[root@kk vsftpd]# ll
total 20
-rw------- 1 root root 125 Oct 14 00:10 ftpusers
-rw------- 1 root root 361 Oct 14 00:10 user_list
-rw------- 1 root root 5116 Oct 14 00:10 vsftpd.conf
-rwxr--r-- 1 root root 338 Oct 14 00:10 vsftpd_conf_migrate.sh
添加配置文件参数
[root@kk vsftpd]# mv vsftpd.conf vsftpd.conf_bak
[root@kk vsftpd]# cat >>vsftpd.conf<<x
# modify config
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
tcp_wrappers=YES
listen=YES
listen_ipv6=NO
listen_port=10021
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=50000
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
user_config_dir=/etc/vsftpd/vuserconf
allow_writeable_chroot=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
guest_enable=YES
guest_username=virtftp
virtual_use_local_privs=YES
x
[root@kk vsftpd]# systemctl restart vsftpd
配置参数 | 说明 |
local_enable=YES | 允许本地用户登录 |
write_enable=YES | 允许ftp用户写权限 |
local_umask=022 | 本地用户默认的掩码 |
dirmessage_enable=YES | 激活目录消息 |
xferlog_enable=YES | 激活上传、下载日志 |
connect_from_port_20=YES | 确保连接端口20开放 |
xferlog_std_format=YES | 采用标准的日志文件输出格式 |
anonymous_enable=NO | 不允许匿名访问 |
tcp_wrappers=YES | 允许主机访问控制 可以将允许访问FTP的主机放入配置文件/etc/hosts.allow中,不允许访问FTP的主机放入配置文件/etc/hosts.deny中 执行顺序为先allow,后deny |
listen=YES | 打开ipv4监听 |
listen_ipv6=NO | 关闭ipv6监听 |
listen_port=10021 | 修改监听端口为10021 |
pasv_enable=YES | 开启被动模式 |
pasv_min_port=40000 | 被动模式数据端口最小值40000 |
pasv_max_port=50000 | 被动模式数据端口最大值50000 |
pam_service_name=vsftpd | pam验证设备名,在目录/etc/pam.d下的文件vsftpd,该文件配置pam验证参数 |
userlist_enable=YES && userlist_deny=YES | 只允许指定的账号登陆FTP,其他用户不允许 在/etc/vsftpd/user_list中配置允许访问ftp的用户,这里是指虚拟用户 |
userlist_enable=YES && userlist_deny=NO | 仅允许/etc/vsftpd/user_list文件中出现的用户登录ftp |
user_config_dir=/etc/vsftpd/vuserconf | 存放虚拟用户配置信息的目录 |
allow_writeable_chroot=YES | 允许ftp用户对chroot目录写权限 |
chroot_local_user=YES | #默认没有禁锢用户的时候,客户端登录后可以随便切换目录,查看目录所在位置和文件名 所有用户被限制在其主目录下,限制用户不能随意切换用户,主要保护linux操作系统不会被ftp用户影响 |
chroot_list_enable=YES | 1.开启白名单功能,允许白名单中的用户随意切换用户 |
chroot_list_file=/etc/vsftpd/chroot_list | 2.白名单文件所在位置(需要自己创建,往里写用户名就行) |
guest_enable=YES | 虚拟用户被假设成guest登录 |
guest_username=virtftp | 虚拟用户被映射为本地的virtftp用户 |
virtual_use_local_privs=YES | 虚拟用户与本地用户有相同的权限 |
local_root=/data/ftp | 本地用户登录后的根目录 |
anon_root=/data/ftp | 匿名用户登录后的根目录 |
anon_world_readable_only=NO | 允许匿名用户浏览目录 |
anon_mkdir_write_enable=YES | 允许匿名用户建立目录 |
anon_upload_enable=YES | 允许匿名用户上传文件 |
anon_other_write_enable=YES | 允许匿名用户除了新建和上传外的其他权限,如:删除、更名 |
max_clients=10000 | 最大并发客户连接数 |
max_per_ip=5 | 每个IP最大连接数 |
dual_log_enable=YES | 允许双日志输出 |
vsftpd_log_file=/var/log/vsftpd.log | 记录登陆ftp的日志文件 |
xferlog_enable=YES | 允许记录上传、下载活动日志 |
xferlog_file=/var/log/xferlog | 记录上传、下载活动日志的文件 |
登录验证方式
匿名用户验证:
所有人都可以用一个用户来登录,只是无法确认使用这个账号登录了
好处:不需要创建大量用户和密码
坏处:所有的人资料都存在了同一个根目录下,内容容易混淆,丢失,盗窃
- 用户账号名称:ftp或anonymous
- 用户账号密码:无密码
- 工作目录:/var/ftp(不要直接把文件往这里放,可以新建直接的目录放东西)
- 默认权限:默认可下载不可上传,上传权限由两部分组成(主配置文件和文件系统)
本地用户验证:
每个人有一个独立的账号,主要解决匿名用户内容的隔离问题
- 用户账号名称:本地用户(/etc/passwd)
- 用户账号密码:用户密码(/etc/shadow)
- 工作目录:登录用户的宿主目录
- 权限:最大权限(drwx------)
虚拟用户验证:
- 创建虚拟用户用来代替本地用户,减少本地用户的曝光率
- 使用本地用户作为虚拟用的映射用户,为虚拟用户提供工作目录和权限控制
- 能够设置严格的权限(为每一个用户生成单独的配置文件)
虚拟用户规划
虚拟用户名 | 密码 | 权限 |
wsk | 123456 | 下载文件,删除文件 |
user | 123456 | 上传文件,创建目录 |
admin | 123456 | 管理权限,可以上传、下载、文件改名,创建目录 |
配置虚拟用户访问权限
配置有哪些虚拟用户可以登陆访问FTP服务,可以访问哪些目录,都是什么访问权限。
配置允许访问FTP的用户
修改/etc/vsftpd/user_list,增加允许访问ftp的用户wsk、user、admin:
[root@kk vsftpd]# vim /etc/vsftpd/user_list
wsk
user
admin
建立虚拟用户配置文件并设置访问权限
为FTP虚拟用户wsk、user、admin指定访问的目录和权限。
mkdir /etc/vsftpd/vuserconf cd /etc/vsftpd/vuserconf
wsk用户
[root@kk vuserconf]# cat >>wsk<<x guest_username=virtftp local_root=/data/ftp anon_root=/data/ftp virtual_use_local_privs=NO write_enable=YES download_enable=YES anon_world_readable_only=NO anon_mkdir_write_enable=NO anon_upload_enable=YES anon_other_write_enable=YES x
anon_mkdir_write_enable=NO 不允许创建目录
anon_other_write_enable=YES 删除文件,文件名称,覆盖文件
anon_upload_enable=YES 允许匿名用户上传文件
anon_world_readable_only=NO 允许匿名用户浏览目录
user用户
[root@kk vuserconf]# cat >>user<<x guest_username=virtftp local_root=/data/ftp anon_root=/data/ftp virtual_use_local_privs=NO write_enable=YES download_enable=NO anon_world_readable_only=NO anon_mkdir_write_enable=YES anon_upload_enable=YES anon_other_write_enable=YES x
admin用户
[root@kk vuserconf]# cat >>user<<<x guest_username=virtftp local_root=/data/ftp anon_root=/data/ftp virtual_use_local_privs=YES write_enable=YES download_enable=YES anon_world_readable_only=NO anon_mkdir_write_enable=YES anon_upload_enable=YES anon_other_write_enable=YES x
配置ftp用户的访问权限在主目录内
将配置文件/etc/vsftpd/chroot_list置为空,不允许有超出主目录的访问权限。
[root@kk vsftpd]# echo > /etc/vsftpd/chroot_list
配置虚拟用户验证密码
进入目录/etc/vsftpd,新建FTP虚拟用户及密码的管理文件vuser.txt,该文件内容的格式为一行用户名,后面紧跟一行该用户的密码,多个用户以此类推,用户名占奇数行,用户密码占偶数行。比如我们配置三个用户wsk、user、admin,内容如下:
wsk 12345 user 12345 admin 12345
vuser.txt配置好以后,我们要使用db_load生成加密后的db文件,命令如下:
[root@kk vsftpd]# db_load -T -t hash -f vuser.txt vuser.db
修改数据库文件权限,保证其安全性
[root@kk vsftpd]# chmod 600 vuser.db
配置pam验证文件
配置完FTP虚拟用户,需要修改用户的验证方式,这就需要修改pam验证文件/etc/pam.d/vsftpd,注释掉原文件中所有内容,新增内容如下:
[root@kk vsftpd]# vim /etc/pam.d/vsftpd auth required pam_userdb.so db=/etc/vsftpd/vuser account required pam_userdb.so db=/etc/vsftpd/vuser

评论