vsftp-基于redhat8配置虚拟用户
目录1.安装vsftp及相关软件包2.配置vsftp服务3.创建虚拟用户4.配置虚拟用户数据5.配置认证文件6.配置虚拟用户权限7.验证vsftp服务1.安装vsftp及相关软件包[rootpoc ~]# dnf -y install vsftpd psmisc net-tools systemd-devel libdb-devel perl-DBIUpgraded:systemd-239-45.el8_4.1.x86_64 systemd-libs-239-45.el8_4.1.x86_64 systemd-pam-239-45.el8_4.1.x86_64 systemd-udev-239-45.el8_4.1.x86_64Installed:libdb-devel-5.3.28-40.el8.x86_64 net-tools-2.0-0.52.20160912git.el8.x86_64perl-Carp-1.42-396.el8.noarch perl-DBI-1.641-3.module_el8.3.04139be2aeb5.x86_64perl-Data-Dumper-2.167-399.el8.x86_64 perl-Digest-1.17-395.el8.noarchperl-Digest-MD5-2.55-396.el8.x86_64 perl-Encode-4:2.97-3.el8.x86_64perl-Errno-1.28-419.el8.x86_64 perl-Exporter-5.72-396.el8.noarchperl-File-Path-2.15-2.el8.noarch perl-File-Temp-0.230.600-1.el8.noarchperl-Getopt-Long-1:2.50-4.el8.noarch perl-HTTP-Tiny-0.074-1.el8.noarchperl-IO-1.38-419.el8.x86_64 perl-IO-Socket-IP-0.39-5.el8.noarchperl-IO-Socket-SSL-2.066-4.module_el8.4.0517be1595ff.noarch perl-MIME-Base64-3.15-396.el8.x86_64perl-Math-BigInt-1:1.9998.11-7.el8.noarch perl-Math-Complex-1.59-419.el8.noarchperl-Mozilla-CA-20160104-7.module_el8.3.0416dee7bcef.noarch perl-Net-SSLeay-1.88-1.module_el8.4.0517be1595ff.x86_64perl-PathTools-3.74-1.el8.x86_64 perl-Pod-Escapes-1:1.07-395.el8.noarchperl-Pod-Perldoc-3.28-396.el8.noarch perl-Pod-Simple-1:3.35-395.el8.noarchperl-Pod-Usage-4:1.69-395.el8.noarch perl-Scalar-List-Utils-3:1.49-2.el8.x86_64perl-Socket-4:2.027-3.el8.x86_64 perl-Storable-1:3.11-3.el8.x86_64perl-Term-ANSIColor-4.06-396.el8.noarch perl-Term-Cap-1.17-395.el8.noarchperl-Text-ParseWords-3.30-395.el8.noarch perl-Text-TabsWrap-2013.0523-395.el8.noarchperl-Time-Local-1:1.280-1.el8.noarch perl-URI-1.73-3.el8.noarchperl-Unicode-Normalize-1.25-396.el8.x86_64 perl-constant-1.33-396.el8.noarchperl-interpreter-4:5.26.3-419.el8.x86_64 perl-libnet-3.11-3.el8.noarchperl-libs-4:5.26.3-419.el8.x86_64 perl-macros-4:5.26.3-419.el8.x86_64perl-parent-1:0.237-1.el8.noarch perl-podlators-4.11-1.el8.noarchperl-threads-1:2.21-2.el8.x86_64 perl-threads-shared-1.58-2.el8.x86_64psmisc-23.1-5.el8.x86_64 systemd-devel-239-45.el8_4.1.x86_64vsftpd-3.0.3-34.el8.x86_64Complete!如果登录ftp速度慢清空dns服务器地址文件[rootpoc ~]# cat /etc/resolv.conf# Generated by NetworkManagernameserver 223.5.5.5nameserver 114.114.114.114如果访问ftp速度慢检查或删除nameserver2.配置vsftp服务:g/^#/d 将会删除全篇中以#开头的行:g/^s*$/d 将会删除全篇中所有的空行:%s *$ 删除行尾空白:%s/^(.*)n1/1$/ 删除重复行:%s/r//g 删除DOS方式的回车^M[rootpoc ~]# vim /etc/vsftpd/vsftpd.confanonymous_enableNOlocal_enableYESwrite_enableYESlocal_umask022dirmessage_enableYESxferlog_enableYESconnect_from_port_20YESxferlog_std_formatYESlistenNOlisten_ipv6YESpam_service_namevsftpduserlist_enableYES修改成以下内容#######################################用户登录控制######################################接受匿名用户anonymous_enableNO#接受本地用户local_enableYES#若启用此选项userlist_deny选项才被启动userlist_enableYES#######################################用户权限控制######################################可以上传全局控制write_enableYES#本地用户上传文件的umasklocal_umask022#上传文件的权限配合umask使用#file_open_mode0666#如果开启那么所有非匿名登录的用户名都会被切换成guest_username指定的用户名guest_enableYES#指定guest_username用户名guest_usernamevirtualallow_writeable_chrootYES#管控是否可用ASCII模式上传。默认值为NOascii_upload_enableYES#管控是否可用ASCII模式下载。默认值为NOascii_download_enableYES#######################################超时设置##########################################空闲连接超时#idle_session_timeout600#数据传输超时#data_connection_timeout120#PAVS请求超时#ACCEPT_TIMEOUT60#PROT模式连接超时#connect_timeout60#######################################服务器功能选项#####################################开启日志功能xferlog_enableYES#使用标准格式xferlog_std_formatYES#定义PAM所使用的名称预设为vsftpdpam_service_namevsftpd#允许使用pasv模式#pasv_enableYES#允许使用port模式#port_enableYES#######################################服务器性能选项#####################################绑定到listen_port指定的端口既然都绑定了也就是每时都开着的standalone模式listenYES#关闭ipv6#listen_ipv6YES#######################################信息类设置#########################################允许为目录配置显示信息显示每个目录下面的message_file文件的内容dirmessage_enableYES#登录时显示欢迎信息如果设置了banner_file则此设置无效ftpd_banner欢迎使用视博电子FTP站点#######################################文件定义###########################################日志文件位置xferlog_file/var/log/vsftpd.log#######################################目录定义###########################################定义用户配置文件的目录user_config_dir/etc/vsftpd/vsftpd_user_conf#######################################用户连接选项########################################使用标准的20端口来连接ftpconnect_from_port_20YES#可接受的最大client数目#max_clients100#每个ip的最大client数目#max_per_ip5#绑定到某个IP,其它IP不能访问#listen_address192.168.0.2#绑定到某个端口#listen_port2121#数据传输端口#ftp_data_port2020#pasv连接模式时可以使用port范围的上界,0表示任意.默认值为0。#pasv_max_port0#pasv连接模式时可以使用port范围的下界,0表示任意,默认值为0。#pasv_min_port0#######################################数据传输选项########################################匿名用户的传输比率(b/s)#anon_max_rate51200#本地用户的传输比率(b/s)#local_max_rate51200003.创建虚拟用户[rootpoc ~]# useradd -d /ftpdata -s /sbin/nologin virtual[rootpoc ~]# ll /drwx------ 2 virtual virtual 62 Jul 1 00:01 ftpdata4.配置虚拟用户数据[rootpoc ~]# vim /etc/vsftpd/login.txtadminadminzbyzby#奇数行为用户名偶数行为奇数行用户的密码[rootpoc ~]# db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/vsftpd_login.db[rootpoc ~]# ll /etc/vsftpd/total 28-rw------- 1 root root 125 Apr 22 13:04 ftpusers-rw-r--r-- 1 root root 20 Jul 1 00:06 login.txt-rw------- 1 root root 361 Apr 22 13:04 user_list-rw------- 1 root root 3198 Jul 1 00:00 vsftpd.conf-rwxr--r-- 1 root root 348 Apr 22 13:04 vsftpd_conf_migrate.sh-rw-r--r-- 1 root root 12288 Jul 1 00:06 vsftpd_login.db5.配置认证文件[rootpoc ~]# ll /etc/pam.d/ | grep vsftpd-rw-r--r-- 1 root root 335 Apr 22 13:04 vsftpd[rootpoc ~]# vim /etc/pam.d/vsftpd#%PAM-1.0#session optional pam_keyinit.so force revoke#auth required pam_listfile.so itemuser sensedeny file/etc/vsftpd/ftpusers onerrsucceed#auth required pam_shells.so#auth include password-auth#account include password-auth#session required pam_loginuid.so#session include password-auth#注释掉以上内容添加以下验证内容auth required pam_userdb.so db/etc/vsftpd/vsftpd_loginaccount required pam_userdb.so db/etc/vsftpd/vsftpd_login6.配置虚拟用户权限[rootpoc ~]# mkdir -p /etc/vsftpd/vsftpd_user_conf cd /etc/vsftpd/vsftpd_user_conf/[rootpoc vsftpd_user_conf]# vim adminanon_world_readable_onlyNO #下载anon_upload_enableYES #上传write_enableYES #写文件anon_mkdir_write_enableYES #写目录anon_other_write_enableYES #删除文件local_root/ftpdata #家目录#配置文件每行尾不能有注释和空格[rootpoc vsftpd_user_conf]# vim zbyanon_world_readable_onlyNOanon_upload_enableYESwrite_enableYESlocal_root/ftpdata7.验证vsftp服务[rootpoc vsftpd_user_conf]# systemctl enable --now vsftpd[rootpoc vsftpd_user_conf]# systemctl restart vsftpd[rootpoc vsftpd_user_conf]# systemctl status vsftpd.service● vsftpd.service - Vsftpd ftp daemonLoaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)Active: active (running) since Thu 2021-07-01 00:28:34 CST; 5s agoProcess: 7346 ExecStart/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (codeexited, status0/SUCCESS)Main PID: 7347 (vsftpd)Tasks: 1 (limit: 23671)Memory: 568.0KCGroup: /system.slice/vsftpd.service└─7347 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.confJul 01 00:28:34 poc systemd[1]: Starting Vsftpd ftp daemon...Jul 01 00:28:34 poc systemd[1]: Started Vsftpd ftp daemon.使用admin管理员用户登录测试[rootpoc ~]# dnf -y install ftpInstalled:ftp-0.17-78.el8.x86_64Complete![rootpoc ~]# ftp 10.9.254.216Connected to 10.9.254.216 (10.9.254.216).220 欢迎使用视博电子FTP站点Name (10.9.254.216:root): admin331 Please specify the password.Password:230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp ls227 Entering Passive Mode (10,9,254,216,43,189).150 Here comes the directory listing.226 Directory send OK.ftpFTP服务端在防火墙后并且使用被动模式时的注意点服务端除了需要指定被动模式端口范围还需要指定pasv_address168.46.41.126防火墙的地址原因由ftp工作原理知道ftp客户端连上来之后需要传输数据时ftp服务端会把服务端的ip和新开的数据端口发送给客户端ftp服务端默认发送的ip地址是服务器的ip地址因为ftp服务端只知道服务器的ip地址客户端收到后会向此ip发送请求因而肯定是连不上的因为中间经过了防火墙因而需要在服务端设置pasv_address为防火墙的地址告知ftp服务端在被动模式下工作时把这个ip发送给客户端客户端收到后会去访问防火墙的地址和端口如果防火墙正确做了端口映射防火墙就会把这个端口的数据转发到ftp服务器上这样就连接成功了被动模式下查看客户端连接到服务端的ip和端口[rootlocalhost]# ftp 168.46.41.126 4621Connected to 168.46.41.126 (168.46.41.126).220 (vsFTPd 3.0.2)Name (168.46.41.126:root): xyftp331 Please specify the password.Password:230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp ls227 Entering Passive Mode (168,46,12,126,18,40).ftp: connect: Network is unreachableftp# 说明# 日志 227 Entering Passive Mode (168,46,41,126,18,40). 中# 前4个字段是ip即168.46.41.126# 后两个字段是端口号端口号计算方法 18*256404,648