- 1.安装 vsftpd是Very Secure FTP daemon,最主要是安全性特点。 查看是否安装了FTP
rpm -qa|grep vsftpd
安装:
yum -y install pam pam-devel db4 db4-tcl
yum -y install vsftpd
安装好后,有/etc/vsftpd/vsftpd.conf 文件,是 vsftp 的配置文件。 启动vsftpd:
systemctl restart vsftpd.service
配置文件主要有三个,位于/etc/vsftpd/目录下,分别是: ftpusers:该文件用来指定那些用户不能访问ftp服务器,如一些系统用户root、bin、sync、adm、nobody等。 user_list:该文件用来指示的默认账户在默认情况下也不能访问ftp。 vsftpd.conf:vsftpd的主配置文件。 vsftpd几种用户: 本地用户:在FTP服务器拥有账号,且该账号为本地用户的账号。 虚拟用户:在FTP服务器拥有账号,该账号只能用于文件传输服务,登录目录为一特定目录。 匿名用户:FTP服务器上无账户,登录目录为/var/ftp
- 2.FTP传输服务 2.1 FTP连接端口号
21: 端口传输控制、身份验证授权访问
20: 端口数据传输
2.2 FTP连接模式 主动模式:服务器端通过20端口号给客户端传输数据。默认连接模式是POST主动模式。 被动模式:服务器端开放指定范围内的端口号,等待客户端建立数据连接,PASV为被动模式。 PORT主动 FTP模式:
命令连接:客户端>1024端口 -> 服务器21端口
数据连接:客户端>1024端口 <- 服务器20端口
PASV被动 FTP模式:
命令连接:客户端>1024端口 -> 服务器21端口
数据连接:客户端>1024端口 <- 服务器>1024端口
2.3 FTP传输模式 文本模式:支持文本文件 二进制模式:常规支持的传输文本文件流媒体数据。
- 3.配置 vsftpd 虚拟用户配置说明。 文件说明: /etc/vsftpd/ftpusers:指定哪些用户账号不能访问FTP服务器,如root等。 /etc/vsftpd/user_list:该文件里用户账号默认情况下不能访问FTP服务器,仅当vsftpd.conf配置文件里启用userlist_enabled=NO选项时才允许访问。 主配置文件 /etc/vsftpd/vsftpd.conf,查看
cd /etc/vsftpd
egrep -v "^#|^$" /vsftpd.conf
#不允许匿名登录
anonymous_enable=NO
#允许/禁止本地用户登陆。主要是为虚拟宿主用户,如果该项目设定为NO,那么所有虚拟用户将无法访问。
local_enable=YES
#可写操作
write_enable=YES
#设定上传后文件的权限掩码,文件644,文件夹755
local_umask=022
#设定开启目录标语功能
dirmessage_enable=YES
#设定开启日志记录
xferlog_enable=YES
#设定端口20进行数据连接
connect_from_port_20=YES
#设定日志使用标准的记录格式
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
#限制所有用户在主目录
chroot_local_user=YES
#开启独立进程vsftpd,不使用超级进程xinetd。设定该Vsftpd服务工作在StandAlone模式下。
listen=YES
#关闭ipv6
listen_ipv6=NO
#设定,启用pam认证,并指定认证文件名/etc/pam.d/vsftpd
pam_service_name=vsftpd
#设定userlist_file中的用户将不得使用FTP
userlist_enable=YES
#支持TCP wrappers
tcp_wrappers=YES
#Vsftpd虚拟用户配置,guest_enable=YES为启用虚拟用户功能
guest_enable=YES
#指定ftp虚拟用户的宿主用户
guest_username=ftpuser
#设定虚拟用户的权限符合他们的宿主用户
virtual_use_local_privs=YES
#设定虚拟用户个人Vsftp的配置文件存放路径
user_config_dir=/etc/vsftpd/vconf
#ftp从2.3.5后,vsftpd增强了安全检查。用户被限定在了其主目录下,则该用户的主目录不能再具有写权限。如果检查发现还有写权限,就会报错误500 OOPS: vsftpd: refusing to run with writable root inside chroot()。规避该报错,加上该配置。
allow_writeable_chroot=YES
- 4.添加FTP账号用户,创建宿主用户
useradd ftpuser -d /home/vsftpd -s /sbin/nologin
chown ftpuser:ftpuser /data/vsftpd -R
建虚拟用户文件:
cat /etc/vsftpd/vftpuser
test
test@123
生成虚拟用户数据文件:
db_load -T -t hash -f /etc/vsftpd/vftpuser /etc/vsftpd/vftpuser.db
chmod 600 /etc/vsftpd/vftpuser.db
配置pam认证文件:
cat /etc/pam.d/vsftpd
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vftpuser
account required pam_userdb.so db=/etc/vsftpd/vftpuser
创建用户配置:
ll /data/vsftpd/
drwxrwxrwx 3 ftpuser ftpuser 4096 2月 1 17:26 test
编辑每个虚拟用户配置文件: cat /etc/vsftpd/vuser_conf/test
#指定虚拟用户的具体路径
local_root=/data/vsftpd/test
#不允许匿名用户访问
anonymous_enable=NO
#允许写操作
write_enable=yes
#设定上传文件权限掩码
local_umask=022
#设定不允许匿名用户上传
anon_upload_enable=yes
#设定不允许匿名用户建立目录
anon_mkdir_write_enable=yes
#设置最大传输速率,单位b/s
local_max_rate=3500000
#设置空闲连接的超时时间
idle_session_timeout=600
#设置单次连接传输最大时间
data_connection_timeout=120
#设定单个客户端的最大线程数
max_per_ip=10
#设置并发客户端访问个数
max_clients=20
创建用户目录
mkdir -p /data/vsftpd/test
重启vsftpd
systemctl start vsftpd.service
- 5.测试 本地ftp测试:
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 3.0.2)
Name (127.0.0.1:root): test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ftp> ls
227 Entering Passive Mode (127,0,0,1,155,228).
150 Here comes the directory listing.
-rw-r--r-- 1 1003 1003 0 Dec 16 02:30 a.sh
226 Directory send OK.
上面出现“227 Entering Passive Mode”是由于测试在本地内网操作,只映射20、21端口,无法使用PASV模式。解决此问题方式就是关闭本地client端的PASV模式,强制client端使用PORT模式连接访问ftp服务器。使用 passive 命令关闭PASV模式,再次输入passive 命令开启PASV模式。如下:
ftp> passive
Passive mode off.
ftp>
ftp> passive
Passive mode on.