CentOS 7 搭建vsftp server
一、 Vsftp服务器简介
- 非常安全的FTP服务进程(Very Secure FTP daemon,Vsftpd),Vsftpd在Unix/Linux发行版中 主流的FTP服务器程序,优点小巧轻快,安全易用、稳定高效、满足企业跨部门、多用户的使用 (1000用户)等。
- Vsftpd基于GPL开源协议发布,在中小企业中得到广泛的应用,Vsftpd可以快速上手,基于Vsftpd 虚拟用户方式,访问验证更加安全。Vsftpd还可以基于MYSQL数据库做安全验证,多重安全防 护。
二、Vsftp的登陆类型
VSFTP提供了系统用户、匿名用户、和虚拟用户三种不同的登陆方式。所有的虚拟用户会映射成一个系 统用户,访问时的文件目录是为此系统用户的家目录;匿名用户也是虚拟用户,映射的系统用户为ftp, 详细信息可以通过man vsftpd.conf查看
三、Vsftp安装配置
-
环境需求
- 服务端系统:CentOS 7.8.2003 ; 软件:vsftpd
- 客户系统:windows 10 ;软件:File Zilla
-
安装epel 源
[root@vsftp ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
-
安装vsftpd及相关依赖
[root@vsftp ~]# yum -y install vsftpd* pam* db4*
- vsftpd:ftp软件
- pam:认证模块
- DB4:支持文件数据库
-
vsftp配置文件说明
配置文件 作用 /etc/vsftpd/vsftpd.conf vsftpd的核心配置文件 /etc/vsftpd/ftpusers 用于指定哪些用户不能访问FTP服务器 /etc/vsftpd/user_list 指定允许使用vsftpd的用户列表文件 /etc/vsftpd/vsftpd_conf_migrate.sh 是vsftpd操作的一些变量和设置脚本 /var/ftp/ 默认情况下匿名用户的根目录 -
vsftpd配置详解
属性 属性值 含义 anonymous_enable YES/NO 是否允许匿名用户(anonymous)登录 FTP,如果 该设置被注释,则默认允许 local_enable YES/NO 是否允许本地系统用户登录 write_enable YES/NO 是否开启任何形式的 FTP 写入命令,上传文件 local_umask xxx 本地用户的 umask 设置,如果注释该设置则默认为 077,但一般都设置成 022 anon_upload_enable YES/NO 是否允许匿名用户上传文件,如果要设置为允许,则 需要先开启 write_enable,否则无效,此外对应目录 还要具有写权限 anon_mkdir_write_enable YES/NO 是否允许匿名用户创建新目录 dirmessage_enable YES/NO 当进入某个目录时,发送信息提示给远程用户 xferlog_enable YES/NO 是否开启 上传/下载 的日志记录 connect_from_port_20 YES/NO 是否使用 20 端口来连接 FTP chown_uploads YES/NO 匿名上传的文件是否由某一指定用户 chown_username 所有 chown_username 有效用户名 匿名上传的文件由该设定用户所有 xferlog_file 有效路径 设置日志文件的保存位置,默认为 /var/log/xferlog xferlog_std_format YES/NO 是否使用标准的 ftpd xferlog日志格式,该格式日志 默认保存在 /var/log/xferlog idle_session_timeout 数值 设置空闲连接的超时时间,单位 秒 data_connection_timeout 数值 设置等待数据传输的大时间,单位 秒 (data_connection_timeout 与 idle_session_timeout 在同一时间只有一个有效) nopriv_user 有效用户名 指定一个非特权用户,用于运行vsftpd async_abor_enable YES/NO 是否支持异步 ABOR 请求 ascii_upload_enable YES/NO 是否开启 ASCII 模式进行文件上传,一般不开启 ascii_download_enable YES/NO 是否开启 ASCII 模式进行文件下载,一般不开启 ftpd_banner ... 自定义登录标语 deny_email_enable YES/NO 如果匿名登录,则会要求输入 email 地址,如果不希 望一些 email 地址具有登录权限,则可以开启此项, 并在 banned_email_file 指定的文件中写入对应的 email 地址 banned_email_file 有效文件 当开启 deny_email_enable 时,需要通过此项指定 一个保存登录无效 email 的文件 chroot_local_user YES/NO 是否将所有用户限制在主目录,当为 NO 时, FTP 用 户可以切换到其他目录 chroot_list_enable YES/NO 是否启用限制用户的名单列表 chroot_list_file 有效文 件 用户列表,其作用与 chroot_local_user 和 chroot_local_user 的组合有关,详见下表 allow_writeable_chroot YES/NO 是否允许用户对 ftp 根目录具有写权限,如果设置成 不允许而目录实际上却具备写权限,则会报错 ls_recurse_enable YES/NO 是否允许 ls -R 指令来递归查询,递归查询比较耗资 源 listen YES/NO 如果为 YES,vsftpd 将以独立模式运行并监听 IPv4 的套接字,处理相关连接请求(该指令不能与 listen_ipv6 一起使用) listen_ipv6 YES/NO 是否允许监听 IPv6 套接字 pam_service_name ... 设置 PAM 外挂模块提供的认证服务所使用的配置文 件名 ,即 /etc/pam.d/vsftpd 文件,此文件中 file=/etc/vsftpd/ftpusers 字段,说明了 PAM 模块能 抵挡的帐号内容来自文件 /etc/vsftpd/ftpusers 中 userlist_enable YES/NO 是否启用 user_list 文件来控制用户登录 userlist_deny YES/NO 是否拒绝 user_list 中的用户登录,此属性设置需在 userlist_enable = YES 时才有效 tcp_wrappers YES/NO 是否使用 tcp_wrappers 作为主机访问控制方式 max_clients 数值 同一时间允许的大连接数 max_per_ip 有效目录 同一个IP客户端连接的大值 local_root 有效目录 系统用户登陆后的根目录 anon_root 有效目录 匿名用户登录后的根目录 user_config_dir 有效目录 用户单独配置文件存放目录,该目录下用户的文件名 就是对应用户名 -
vsftpd 修改配置前备份配置文件
[root@vsftp ~]# cd /etc/vsftpd/ [root@vsftp vsftpd]# ls ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh [root@vsftp vsftpd]# cp vsftpd.conf{,.bak} [root@vsftp vsftpd]# ls ftpusers user_list vsftpd.conf vsftpd.conf.bak vsftpd_conf_migrate.sh
-
vsftpd配置匿名用户
-
编辑配置文件
[root@vsftp vsftpd]# cat vsftpd.conf write_enable=YES anon_umask=022 anonymous_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES
vim下删除全部内容:ggdG,gg定位到首行
注意:命令每行不能有空格,通过set list可以查看
-
常用的匿名FTP配置项
anonymous_enable=YES # 是否允许匿名用户访问 anon_umask=022 # 匿名用户所上传文件的权限掩码 anon_root=/var/ftp # 设置匿名用户的FTP根目录 anon_upload_enable=YES # 是否允许匿名用户上传文件 anon_mkdir_write_enable=YES # 是否允许匿名用户允许创建目录 anon_other_write_enable=YES # 是否允许匿名用户有其他写入权 (改名,删除,覆盖) anon_max_rate=0 # 限制最大传输速率(字节/秒)0为 无限
-
开启vsftp服务
[root@vsftp vsftpd]# systemctl start vsftpd.service [root@vsftp vsftpd]# netstat -lnpt | grep vsftpd tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 178636/vsftpd
-
客户端登陆验证,登陆成功
-
修改权限实现上传
[root@vsftp vsftpd]# cd /var/ftp/ [root@vsftp ftp]# ls pub [root@vsftp ftp]# chown -R ftp.ftp pub/ [root@vsftp ftp]# ll 总用量 0 drwxr-xr-x 2 ftp ftp 6 4月 1 2020 pub
- 重点:改变根目录的属主,如果不改变的话,只能访问,其他权限不能生效。因为我们是以ftp用 户的身份访问的,而pub默认的属主属组是root。
- 注意:
- 修改完配置之后需要重启完服务才能生效
- 还需要重新从客户端登陆,否则修改后的配置看不到效果。
-
-
vsftp配置本地(系统)用户
-
创建测试用户
-
创建zhangsan、lisi 密码都设置为“123456”
[root@vsftp ftp]# useradd zhangsan [root@vsftp ftp]# useradd lisi [root@vsftp ftp]# echo "123456" | passwd --stdin zhangsan 更改用户 zhangsan 的密码 。 passwd:所有的身份验证令牌已经成功更新。 [root@vsftp ftp]# echo "123456" | passwd --stdin lisi 更改用户 lisi 的密码 。 passwd:所有的身份验证令牌已经成功更新。
-
-
修改配置文件
[root@vsftp ftp]# cat /etc/vsftpd/vsftpd.conf local_enable=YES local_umask=077 chroot_local_user=YES allow_writeable_chroot=YES write_enable=YES dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=YES pam_service_name=vsftpd userlist_enable=YES userlist_deny=NO tcp_wrappers=YES
-
常用的本地用户FTP配置项
local_enable=YES # 是否允许本地系统用户访问 local_umask=022 # 本地用户所上传文件的权限掩码 local_root=/var/ftp # 设置本地用户的FTP根目录 chroot_list_enable=YES # 表示是否开启chroot的环境,默认 没有开启 chroot_list_file=/etc/vsftpd/chroot_list # 表示写 在/etc/vsftpd/chroot_list文件里面的用户是不可以出chroot环境的。默认是可以的。 Chroot_local_user=YES # 表示所有写 在/etc/vsftpd/chroot_list文件里面的用户是可以出chroot环境的,和上面的相反。 local_max_rate=0 # 限制最大传输速率(字节/秒)0为 无限制
-
添加用户到白名单
[root@vsftp ftp]# vim /etc/vsftpd/user_list zhangsan lisi
-
重启服务
[root@vsftp ftp]# systemctl restart vsftpd
-
登陆测试,登陆成功
-
添加并进行测试
-
-
vstp配置虚拟用户
-
建立虚拟FTP用户的账号
[root@vsftp /]# useradd -s /sbin/nologin vu
-
创建虚拟用户文件
[root@vsftp /]# cd /etc/vsftpd/ [root@vsftp vsftpd]# vim user wangwu 12345 maliu 12345
- 奇数行代表用户名,偶数行代表密码
-
创建数据文件
-
通过 db_load 工具创建出 Berkeley DB 格式的数据库文件
[root@vsftp vsftpd]# db_load -T -t hash -f user user.db [root@vsftp vsftpd]# ls ftpusers user user.db user_list vsftpd.conf vsftpd.conf.bak vsftpd_conf_migrate.sh
- -f 指定数据原文件
- -T 允许非Berkeley DB的应用程序使用文本格式转换的DB数据文件
- -t hash 读取文件的基本方法
-
-
建立支持虚拟用户的PAM认证文件
[root@vsftp vsftpd]# vim /etc/pam.d/vsftpd.vu auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/user account required /lib64/security/pam_userdb.so db=/etc/vsftpd/user
- 对应刚才生成 user.db 的文件
-
修改配置文件
write_enable=YES dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=YES userlist_enable=YES tcp_wrappers=YES allow_writeable_chroot=YES guest_enable=YES guest_username=vu pam_service_name=vsftpd.vu local_enable=YES local_umask=077 chroot_local_user=YES virtual_use_local_privs=YES user_config_dir=/etc/vsftpd/user_dir
-
常用的全局配置项
listen=YES # 是否以独立运行的方式监听服务 listen_address=192.168.4.1 # 设置监听FTP服务的IP地址 listen_port=21 # 设置监听FTP服务的端口号 write_enable=YES # 是否启用写入权限(上传,删除文 件) download_enable=YES # 是否允许下载文件 dirmessage_enable=YES # 用户切换进入目录时显 示.message文件 xferlog_enable=YES # 启用日志文件,记录 到/var/log/xferlog xferlog_std_format=YES # 启用标准的xferlog日志格式,禁 用此项将使用vsftpd自己的格式 connect_from_port_20=YES # 允许服务器主动模式(从20端口建 立数据连接) pasv_enable=YES # 允许服务器被动模式 pasv_max_port=24600 # 设置被动模式服务器的最大端口号 pasv_min_port=24500 # 设置被动模式服务器的最小端口号 pam_service_name=vsftpd # 用户认证的PAM文件位置 (/etc/pam.d/vsftpd.vu) userlist_enable=YES # 是否启用user_list列表文件 userlist_deny=YES # 是否禁用user_list中的用户 max_clients=0 # 限制并发客户端连接数 max_per_ip=0 # 限制同一IP地址的并发连接数 tcp_wrappers=YES # 是否启用tcp_wrappers主机访问 控制 chown_username=root # 表示匿名用户上传的文件的拥有人 是root,默认关闭 ascii_upload_enable=YES # 表示是否允许用户可以上传一个二 进制文件,默认是不允许的 ascii_download_enable=YES # 这个是代表是否允许用户可以下载 一个二进制文件,默认是不允许的 nopriv_user=vsftpd # 设置支撑Vsftpd服务的宿主用户为 手动建立的Vsftpd用户 async_abor_enable=YES # 设定支持异步传输功能 ftpd_banner=Welcome to Awei FTP servers # 设定Vsftpd的登陆标语 guest_enable=YES # 设置启用虚拟用户功能 guest_username=ftpuser # 指定虚拟用户的宿主用户 virtual_use_local_privs=YES # 设定虚拟用户的权限符合他们的宿 主用户 user_config_dir=/etc/vsftpd/vconf # 设定虚拟用户个人Vsftp的配置文 件存放路径
-
为用户建立独立的配置目录及文件
[root@vsftp vsftpd]# mkdir /etc/vsftpd/user_dir [root@vsftp vsftpd]# ls ftpusers user user.db user_dir user_list vsftpd.conf vsftpd.conf.bak vsftpd_conf_migrate.sh [root@vsftp vsftpd]# cd /etc/vsftpd/user_dir [[root@vsftp user_dir]# vim wangwu local_root=/etc/vsftpd/data # 虚拟用户数据的存放路径
-
创建虚拟用户数据存放目录
[root@vsftp user_dir]# cd .. [root@vsftp vsftpd]# mkdir data [root@vsftp vsftpd]# chmod 777 data/
-
登陆成功
-
添加文件进行测试
[root@vsftp vsftpd]# cd data/ [root@vsftp data]# touch wangwu.txt
重点:本地用户和虚拟用户不能同时登录、因为认证方式只有一种
本地是 pam_service_name =vsftpd
虚拟是 pam_service_name =vsftpd.vu
-