目录
1.安装vsftp及相关软件包
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [root@poc ~]# dnf -y install vsftpd psmisc net-tools systemd-devel libdb-devel perl-DBI |
| Upgraded: 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_64 Installed: libdb-devel-5.3.28-40.el8.x86_64 net-tools-2.0-0.52.20160912git.el8.x86_64 perl-Carp-1.42-396.el8.noarch perl-DBI-1.641-3.module_el8.3.0+413+9be2aeb5.x86_64 perl-Data-Dumper-2.167-399.el8.x86_64 perl-Digest-1.17-395.el8.noarch perl-Digest-MD5-2.55-396.el8.x86_64 perl-Encode-4:2.97-3.el8.x86_64 perl-Errno-1.28-419.el8.x86_64 perl-Exporter-5.72-396.el8.noarch perl-File-Path-2.15-2.el8.noarch perl-File-Temp-0.230.600-1.el8.noarch perl-Getopt-Long-1:2.50-4.el8.noarch perl-HTTP-Tiny-0.074-1.el8.noarch perl-IO-1.38-419.el8.x86_64 perl-IO-Socket-IP-0.39-5.el8.noarch perl-IO-Socket-SSL-2.066-4.module_el8.4.0+517+be1595ff.noarch perl-MIME-Base64-3.15-396.el8.x86_64 perl-Math-BigInt-1:1.9998.11-7.el8.noarch perl-Math-Complex-1.59-419.el8.noarch perl-Mozilla-CA-20160104-7.module_el8.3.0+416+dee7bcef.noarch perl-Net-SSLeay-1.88-1.module_el8.4.0+517+be1595ff.x86_64 perl-PathTools-3.74-1.el8.x86_64 perl-Pod-Escapes-1:1.07-395.el8.noarch perl-Pod-Perldoc-3.28-396.el8.noarch perl-Pod-Simple-1:3.35-395.el8.noarch perl-Pod-Usage-4:1.69-395.el8.noarch perl-Scalar-List-Utils-3:1.49-2.el8.x86_64 perl-Socket-4:2.027-3.el8.x86_64 perl-Storable-1:3.11-3.el8.x86_64 perl-Term-ANSIColor-4.06-396.el8.noarch perl-Term-Cap-1.17-395.el8.noarch perl-Text-ParseWords-3.30-395.el8.noarch perl-Text-Tabs+Wrap-2013.0523-395.el8.noarch perl-Time-Local-1:1.280-1.el8.noarch perl-URI-1.73-3.el8.noarch perl-Unicode-Normalize-1.25-396.el8.x86_64 perl-constant-1.33-396.el8.noarch perl-interpreter-4:5.26.3-419.el8.x86_64 perl-libnet-3.11-3.el8.noarch perl-libs-4:5.26.3-419.el8.x86_64 perl-macros-4:5.26.3-419.el8.x86_64 perl-parent-1:0.237-1.el8.noarch perl-podlators-4.11-1.el8.noarch perl-threads-1:2.21-2.el8.x86_64 perl-threads-shared-1.58-2.el8.x86_64 psmisc-23.1-5.el8.x86_64 systemd-devel-239-45.el8_4.1.x86_64 vsftpd-3.0.3-34.el8.x86_64 Complete! |
如果登录ftp速度慢,清空dns服务器地址文件
|----------------------------------------------------------------------------------------------------------|
| [root@poc ~]# cat /etc/resolv.conf |
| # Generated by NetworkManager nameserver 223.5.5.5 nameserver 114.114.114.114 如果访问ftp速度慢,检查或删除nameserver |
2.配置vsftp服务
:g/^#/d 将会删除全篇中以#开头的行
:g/^s*$/d 将会删除全篇中所有的空行
:%s= *$== 删除行尾空白
:%s/^(.*)n1/1$/ 删除重复行
:%s/r//g 删除DOS方式的回车^M
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [root@poc ~]# vim /etc/vsftpd/vsftpd.conf |
| anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=NO listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES 修改成以下内容 |
| #######################################用户登录控制##################################### #接受匿名用户 anonymous_enable=NO #接受本地用户 local_enable=YES #若启用此选项,userlist_deny选项才被启动 userlist_enable=YES #######################################用户权限控制##################################### #可以上传(全局控制) write_enable=YES #本地用户上传文件的umask local_umask=022 #上传文件的权限配合umask使用 #file_open_mode=0666 #如果开启,那么所有非匿名登录的用户名都会被切换成guest_username指定的用户名 guest_enable=YES #指定guest_username用户名 guest_username=virtual allow_writeable_chroot=YES #管控是否可用ASCII模式上传。默认值为NO ascii_upload_enable=YES #管控是否可用ASCII模式下载。默认值为NO ascii_download_enable=YES #######################################超时设置######################################### #空闲连接超时 #idle_session_timeout=600 #数据传输超时 #data_connection_timeout=120 #PAVS请求超时 #ACCEPT_TIMEOUT=60 #PROT模式连接超时 #connect_timeout=60 #######################################服务器功能选项#################################### #开启日志功能 xferlog_enable=YES #使用标准格式 xferlog_std_format=YES #定义PAM所使用的名称,预设为vsftpd pam_service_name=vsftpd #允许使用pasv模式 #pasv_enable=YES #允许使用port模式 #port_enable=YES #######################################服务器性能选项#################################### #绑定到listen_port指定的端口,既然都绑定了也就是每时都开着的,standalone模式 listen=YES #关闭ipv6 #listen_ipv6=YES #######################################信息类设置######################################## #允许为目录配置显示信息,显示每个目录下面的message_file文件的内容 dirmessage_enable=YES #登录时显示欢迎信息,如果设置了banner_file则此设置无效 ftpd_banner=欢迎使用视博电子FTP站点 #######################################文件定义########################################## #日志文件位置 xferlog_file=/var/log/vsftpd.log #######################################目录定义########################################## #定义用户配置文件的目录 user_config_dir=/etc/vsftpd/vsftpd_user_conf #######################################用户连接选项####################################### #使用标准的20端口来连接ftp connect_from_port_20=YES #可接受的最大client数目 #max_clients=100 #每个ip的最大client数目 #max_per_ip=5 #绑定到某个IP,其它IP不能访问 #listen_address=192.168.0.2 #绑定到某个端口 #listen_port=2121 #数据传输端口 #ftp_data_port=2020 #pasv连接模式时可以使用port范围的上界,0表示任意.默认值为0。 #pasv_max_port=0 #pasv连接模式时可以使用port范围的下界,0表示任意,默认值为0。 #pasv_min_port=0 #######################################数据传输选项####################################### #匿名用户的传输比率(b/s) #anon_max_rate=51200 #本地用户的传输比率(b/s) #local_max_rate=5120000 |
3.创建虚拟用户
|-------------------------------------------------------------------------------------|
| [root@poc ~]# useradd -d /ftpdata -s /sbin/nologin virtual [root@poc ~]# ll / |
| drwx------ 2 virtual virtual 62 Jul 1 00:01 ftpdata |
4.配置虚拟用户数据
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [root@poc ~]# vim /etc/vsftpd/login.txt |
| admin admin zby zby #奇数行为用户名,偶数行为奇数行用户的密码 |
| [root@poc ~]# db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/vsftpd_login.db [root@poc ~]# 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.db |
5.配置认证文件
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [root@poc ~]# ll /etc/pam.d/ | grep vsftpd |
| -rw-r--r-- 1 root root 335 Apr 22 13:04 vsftpd |
| [root@poc ~]# vim /etc/pam.d/vsftpd |
| #%PAM-1.0 #session optional pam_keyinit.so force revoke #auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed #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_login account required pam_userdb.so db=/etc/vsftpd/vsftpd_login |
6.配置虚拟用户权限
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [root@poc ~]# mkdir -p /etc/vsftpd/vsftpd_user_conf && cd /etc/vsftpd/vsftpd_user_conf/ [root@poc vsftpd_user_conf]# vim admin |
| anon_world_readable_only=NO #下载 anon_upload_enable=YES #上传 write_enable=YES #写文件 anon_mkdir_write_enable=YES #写目录 anon_other_write_enable=YES #删除文件 local_root=/ftpdata #家目录 #配置文件每行尾不能有注释和空格 |
| [root@poc vsftpd_user_conf]# vim zby |
| anon_world_readable_only=NO anon_upload_enable=YES write_enable=YES local_root=/ftpdata |
7.验证vsftp服务
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [root@poc vsftpd_user_conf]# systemctl enable --now vsftpd [root@poc vsftpd_user_conf]# systemctl restart vsftpd [root@poc vsftpd_user_conf]# systemctl status vsftpd.service |
| ● vsftpd.service - Vsftpd ftp daemon Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2021-07-01 00:28:34 CST; 5s ago Process: 7346 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS) Main PID: 7347 (vsftpd) Tasks: 1 (limit: 23671) Memory: 568.0K CGroup: /system.slice/vsftpd.service └─7347 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf Jul 01 00:28:34 poc systemd[1]: Starting Vsftpd ftp daemon... Jul 01 00:28:34 poc systemd[1]: Started Vsftpd ftp daemon. |
使用admin管理员用户登录测试
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [root@poc ~]# dnf -y install ftp |
| Installed: ftp-0.17-78.el8.x86_64 Complete! |
| [root@poc ~]# ftp 10.9.254.216 |
| Connected to 10.9.254.216 (10.9.254.216). 220 欢迎使用视博电子FTP站点 Name (10.9.254.216:root): admin 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 227 Entering Passive Mode (10,9,254,216,43,189). 150 Here comes the directory listing. 226 Directory send OK. ftp> |

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| FTP服务端在防火墙后,并且使用被动模式时的注意点 服务端除了需要指定被动模式端口范围,还需要指定pasv_address=168.46.41.126(防火墙的地址),原因: 由ftp工作原理知道,ftp客户端连上来之后,需要传输数据时,ftp服务端会把服务端的ip和新开的数据端口发送给客户端, ftp服务端默认发送的ip地址是服务器的ip地址(因为ftp服务端只知道服务器的ip地址),客户端收到后会向此ip发送请求,因而肯定是连不上的,因为中间经过了防火墙 因而需要在服务端设置pasv_address为防火墙的地址,告知ftp服务端在被动模式下工作时把这个ip发送给客户端, 客户端收到后,会去访问防火墙的地址和端口,如果防火墙正确做了端口映射,防火墙就会把这个端口的数据转发到ftp服务器上,这样就连接成功了 被动模式下,查看客户端连接到服务端的ip和端口: [root@localhost]# ftp 168.46.41.126 4621 Connected to 168.46.41.126 (168.46.41.126). 220 (vsFTPd 3.0.2) Name (168.46.41.126:root): xyftp 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 227 Entering Passive Mode (168,46,12,126,18,40). ftp: connect: Network is unreachable ftp> # 说明: # 日志 227 Entering Passive Mode (168,46,41,126,18,40). 中 # 前4个字段是ip,即:168.46.41.126 # 后两个字段是端口号,端口号计算方法: 18*256+40=4,648 |