https://blog.csdn.net/qq_36938617/article/details/89077845
https://blog.51cto.com/meiling/2071122
https://blog.csdn.net/ice_bird/article/details/91872804
yum安装vsftpd
yum install -y vsftpd
启动服务
systemctl start vsftpd.service&&systemctl enable vsftpd.service
修改配置文件
vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO #12行 不允许匿名访问
local_enable=YES #16行 设定本地用户可以访问。注意:主要是为虚拟宿主用户,如果该项目设定为NO那么所有虚拟用户将无法访问。write_enable=YES #19行 设定可以进行写操作。
local_umask=022 #23行 设定上传后文件的权限掩码,文件644,文件夹755
anon_upload_enable=NO #29行 禁止匿名用户上传文件。
anon_mkdir_write_enable=NO #33行 禁止匿名用户建立目录。
dirmessage_enable=NO #37行 设定开启目录标语功能 看自己需求。
xferlog_enable=YES #40行 设定开启日志记录功能。
chown_uploads=NO #48行 设定禁止上传文件更改宿主。
xferlog_file=/var/log/vsftpd.log #53行 设定Vsftpd的服务日志保存路径。注意,该文件默认不存在。必须要手动touch出来,并且由于这里更改了Vsftpd的服务宿主用户为手动建立的Vsftpd。必须注意给与该用户对日志的写入权限,否则服务将启动失败。xferlog_std_format=YES #57行 设定日志使用标准的记录格式。
idle_session_timeout=600 #60行 设定空闲连接超时时间,这里使用默认。将具体数值留给每个具体用户具体指定,当然如果不指定的话,还是使用这里的默认值600,单位秒。
nopriv_user=vsftpd #67行 设定支撑Vsftpd服务的宿主用户为手动建立的Vsftpd用户。注意,一旦做出更改宿主用户后,必须注意一起与该服务相关的读写文件的读写赋权问题。比如日志文件就必须给与该用户写入权限等。
async_abor_enable=YES #72行 设定支持异步传输功能。
ascii_upload_enable=YES #83行 设定支持ASCII模式的上传功能。
ascii_download_enable=YES #84行 设定支持ASCII模式的下载功能。
#cmds_allowed=ABOR,RETR,ACCT,ALLO,APPE,CDUP,CWD,EPRT,EPSV,FEAT,HELP,LIST,MDTM,MKD,MODE,NLST,NOOP,OPTS,PASS,PASV,PORT,PWD,QUIT,REIN,REST,SITE,SIZE,SMNT,STAT,STOU,STRU,SYST,TYPE,USER,XCUP,XCWD,XMKD,XPWD,XRMD,BYE,STOR
#cmds_allowed需自己添加可以对vsftpd权限控制更加细化中间并不能有空格和回车
chroot_local_user=YES #101行 将所有用户限制在主目录
chroot_list_enable=NO #102行 所有用户都被限制在其主目录下。如果配置为YES,chroot_list_file指定的用户列表,将不受限制。pam_service_name=vsftpd #126行 设定,启用pam认证,并指定认证文件名/etc/pam.d/vsftpd。
userlist_enable=YES #127行 设定userlist_file中的用户将不得使用FTP。
tcp_wrappers=YES #128行 设定支持TCP Wrappers。
#connect_from_port_21=YES #43行 默认21端口 注释掉。
pasv_enable=YES #需添加 开启被动模式
listen_port=20021 #需添加 添加监听端口
pasv_min_port=20022 #需添加 设置被动模式的端口范围,最小端口号~最大端口号
pasv_max_port=20025 #需添加 端口范围自己调整
#local_root=/var/ftp/ #需添加 用户登录路径,local_root 针对系统用户
#anon_root=/var/ftp/ #需添加 anon_root 针对匿名用户
allow_writeable_chroot=YES #需添加(重要) 新版析vsfptd加入了安全需求,切根不允许写,要加这个选项
user_config_dir=/etc/vsftpd/userconfig #需添加 用户配置目录
防火墙开放端口
firewall-cmd --zone=public --add-port=20021-20025/tcp --permanent
firewall-cmd --reload
关闭selinux
vi /etc/sysconfig/selinux
SELINUX=enforcing 改为 SELINUX=disabled
重启服务reboot
groupadd vsftpd
useradd -g vsftpd -d /var/ftp -s /sbin/nologin vsftpd
之后配置pam认证
创建用户列表(一行用户名,一行密码)
vi /etc/vsftpd/userconfig/user_list
例:
testuser
testpasswd
用户文件建立后生成数据库文件
db_load -T -t hash -f /etc/vsftpd/userconfig/user_list /etc/vsftpd/userconfig/user_list.db
vi /etc/pam.d/vsftpd
auth required pam_userdb.so db=/etc/vsftpd/userconfig/user_list
account required pam_userdb.so db=/etc/vsftpd/userconfig/user_list
最后在/etc/vsftpd/userconfig目录下建立与用户名相同的文件并配置相应的权
例:
vi /etc/vsftpd/userconfig/testuser
local_root=/var/ftp/testuser
write_enable=YES #允许虚拟用户有写得权限
anon_world_readable_only=YES #允许匿名用户可以下载和读取的权限
anon_upload_enable=YES #允许匿名用户有上传文件权限,在write_enable=YES时有效
anon_mkdir_write_enable=YES #允许匿名用户有创建目录权限write_enable=YES时有效
anon_other_write_enable=YES #允许匿名用户有其他权限(删除,重命名),在write_enable=YES时有效
原文链接:https://blog.csdn.net/ice_bird/article/details/91872804
17)pam_service_name=vsftpd(虚拟用户使用PAM认证方式,这里是设置PAM使用的名称,默认即可,与/etc/pam.d/vsftpd对应) userlist_enable=YES(是否启用vsftpd.user_list文件,黑名单,白名单都可以
17)pam_service_name=vsftpd(虚拟用户使用PAM认证方式,这里是设置PAM使用的名称,默认即可,与/etc/pam.d/vsftpd对应) userlist_enable=YES(是否启用vsftpd.user_list文件,黑名单,白名单都可以
18)pasv_min_port=61001(被动模式使用端口范围最小值)
19)pasv_max_port=62000(被动模式使用端口范围最大值)
20)pasv_enable=YES(pasv_enable=YES/NO(YES)
若设置为YES,则使用PASV工作模式;若设置为NO,则使用PORT模式。默认值为YES,即使用PASV工作模式。
FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。
一、PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。
当需要传送数据时,客户端在命令链路上用 PORT命令告诉服务器:“我打开了****端口,你过来连接我”。于是服务器从20端口向客户端的****端口发送连接请求,建立一条数据链路来传送数据。
二、PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。
当需要传送数据时,服务器在命令链路上用 PASV命令告诉客户端:“我打开了****端口,你过来连接我”。于是客户端向服务器的****端口发送连接请求,建立一条数据链路来传送数据。
从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同。而FTP的复杂性就在于此。
原文链接:https://blog.csdn.net/qq_36938617/article/details/89077845
cat /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/accounts
account required pam_userdb.so db=/etc/vsftpd/accounts
虚拟用户登录
https://blog.51cto.com/meiling/2071122
pam_service_name=vsftpd
#虚拟用户使用PAM认证方式。
guest_enable= YES/NO(NO)
#设置PAM使用的名称,默认值为/etc/pam.d/vsftpd。
guest_username=ftp
#启用虚拟用户。默认值为NO。
virtual_use_local_privs=YES/NO(NO)
#这里用来映射虚拟用户。默认值为ftp。
#当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限。默认情况下此参数
是关闭的(NO)。