vsftpd

就是一个文件传输服务

安装vsftpd服务

[root@chengle ~]# rpm -qa | grep vsftpd #查看本地是否有包
vsftpd-3.0.3-33.el8.x86_64  #若存在
rpm -iv xxx #安装vsftpd包
#不存在
yum -y install vsftpd #网络安装
systemctl enable --now vsftpd #启动并设置开机自启动vsftpd服务

ftp配置文件列表

以下均为默认文件及路径

/etc/vsftpd/vsftpd.conf #主配置文件
/usr/sbin/vsftpd        #主程序
/etc/rc.d/init.d/vsftpd #ftp启动程序
/etc/pam.d/vsftpd       #PAM认证文件
/var/ftp                #匿名用户主目录;本地用户主目录为:/home/用户主目录,即登录后进入自己家目录
/var/ftp/pub            #匿名用户的下载目录,此目录需赋权根chmod 1777 pub(1为特殊权限,使上载后无法删除)

主配置文件详解

三种用户模式

匿名用户配置

anonymous_enable=YES   #是否启用匿名用户
no_anon_password=YES   #匿名用户login时不询问口令
anon_upload_enable=(yes/no); #控制匿名用户对文件(非目录)上传权限
anon_world_readable_only=(yes/no); #控制匿名用户对文件的下载权限
anon_mkdir_write_enable=(yes/no); #控制匿名用户对文件夹的创建权限
anon_other_write_enable=(yes/no); #控制匿名用户对文件和文件夹的删除和重命名
write_enable=YES #全局设置,是否容许写入(无论是匿名用户还是本地用户,若要启用上传权限的话,就要开启它)
anon_root=(none) #匿名用户主目录
anon_max_rate=(0) #匿名用户速度限制
anon_umask=(077) #匿名用户上传文件时有掩码(若想让匿名用户上传的文件能直接被匿名下载,就这设置这里为073)
chown_uploads=YES #所有匿名上传的文件的所属用户将会被更改成chown_username
chown_username=whoever #匿名上传文件所属用户名

本地用户配置

write_enable=YES #可以上传(全局控制) 删除,重命名
local_umask=022 #本地用户上传文件的umask
userlist_enable=YES #限制了/etc/vsftpd/user_list文件里的用户不能访问
local_root #设置一个本地用户登录后进入到的目录
user_config_dir #设置用户的单独配置文件所在目录,用哪个帐户登陆就用哪个账号名称在目录下新建文件,实现不同用户不同权限
download_enable #限制用户的下载权限
chroot_local_user=YES/NO #是否禁止用户离开设置的根目录
chroot_list_enable=YES #如果启动这项功能,则所有列在chroot_list_file之中的使用者不能更改根目录
chroot_list_file=/etc/vsftpd/chroot_list #指出被锁定/允许 在自家目录中的用户的列表文件

虚拟用户配置

pam_service_name=vsftpd #设置PAM使用的名称,默认值为/etc/pam.d/vsftpd。
check_shell=YES #(注意:仅在没有pam验证版本时有用,是否检查用户有一个有效的shell来登录 )
guest_enable= YES/NO #启用虚拟用户。默认值为NO。
guest_username=ftp #这里设置虚拟用户的宿主用户。默认值为ftp。
virtual_use_local_privs=YES/NO #当该参数激活(YES)时,虚拟用户与其宿主用户有相同的权限。 当此参数关闭(NO)时,虚拟用户与匿名用户有相同的权限。默认情况下此参数是关闭的(NO

其他配置

#超时设置#
idle_session_timeout=600 #空闲连接超时
data_connection_timeout=120 #数据传输超时
ACCEPT_TIMEOUT=60 #PASV请求超时
connect_timeout=60 #PROT模式连接超时
服务器功能选项:
xferlog_enable=YES   #开启日记功能
xferlog_std_format=YES   #使用标准格式
log_ftp_protocol=NO   #当xferlog_std_format关闭且本选项开启时,记录所有ftp请求和回复,当调试比较有用.
pasv_enable=YES   #允许使用pasv模式
pasv_promiscuous=NO   #关闭安全检查,小心呀.
port_enable=YES   #允许使用port模式
tcp_wrappers=YES   #开启tcp_wrappers支持
pam_service_name=vsftpd   #定义PAM 所使用的名称,预设为vsftpd。
nopriv_user=nobody   #当服务器运行于最底层时使用的用户名
pasv_addr_resolve=YES    # 与下面配置组合使用
pasv_address=(none)   #使vsftpd在pasv命令回复时跳转到指定的IP地址.
服务器性能选项:
ls_recurse_enable=YES #是否能使用ls -R命令以防止浪费大量的服务器资源
one_process_model #是否使用单进程模式
listen=YES #绑定到listen_port指定的端口,既然都绑定了也就是每时都开着的,就是那个什么standalone模式
text_userdb_names=NO #当使用者登入后使用ls -al 之类的指令查询该档案的管理权时,预设会出现拥有者的UID,而不是该档案拥有者的名称。若是希望出现拥有者的名称,则将此功能开启。
use_localtime=NO   #显示目录清单时是用本地时间还是GMT时间,可以通过mdtm命令来达到一样的效果
use_sendfile=YES   #测试平台优化
待完善~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

以部署业务vsftpd为例(关闭selinux和防火墙的内网,服务器系统为rhel 7.4)

使用本地用户模式

useradd xxxx -s /sbin/nologin  -d /xxx/xxx
#创建本地用户并指定家目录
passwd xxxx
#给新用户设定密码
chmod 777 /xxx/xxx #修改家目录(或文件存储目录权限)
#因为文件需要过网闸摆渡,所以可能是777 或 chown root + chmod 777
#开启被动模式,使用用户配置文件子目录,监听21端口的vsftpd.conf
#########################################################
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
#connect_from_port_20=YES
allow_writeable_chroot=YES
#chroot_list_file=/etc/vsftpd/chroot_list
chroot_list_enable=NO
chroot_local_user=YES
pasv_enable=YES
pasv_min_port=6000
pasv_max_port=6200
listen=YES
listen_port=21
virtual_use_local_privs=NO
anon_umask=022
userlist_enable=NO
guest_enable=YES
guest_username=root
pam_service_name=vsftpd
user_config_dir=/etc/vsftpd/vconf
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
###########################################################
[root@4in1web vsftpd]# cat vconf/sphy
local_root=/usr/sphy/idCheck
write_enable=YES
anon_world_readable_only=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
#用户配置文件子目录,设置文件名建议与用户名一致
systemctl restart vsftpd #重启服务应用新的配置
使用工具或客户端,验证vsftpd功能是实现。

Q.E.D.