vsftpd.conf anonymous_enable=NO //设定不允许匿名访问
local_enable=YES //设定本地用户可以访问
write_enable=YES //设定可以进行写操作
local_umask=022 //设定上传后文件的许可权掩码
anon_upload_enable=NO //禁止匿名用户上传
anon_mkdir_write_enable=NO //禁止匿名用户建立目录
dirmessage_enable=YES //设定开启目录标语功能
xferlog_enable=YES //设定开启日志记录功能
connect_from_port_20=YES //设定埠20进行数据连接(主动模式)
chown_uploads=NO //设定禁止上传文件更改宿主
#chown_username=whoever
xferlog_file=/var/log/xferlog //设定Vsftpd的服务日志保存路径。
xferlog_std_format=YES //设定日志使用标准的记录格式。
#idle_session_timeout=600 //设定空闲连接超时时间,单位为秒,这里默认
#data_connection_timeout=120 //设定空闲连接超时时间,单位为秒,这里默认。
#nopriv_user=ftptest
async_abor_enable=YES //设定支持非同步传输功能。
ascii_upload_enable=YES
ascii_download_enable=YES //设定支持ASCII模式的上传和下载功能。
ftpd_banner=Welcome to blah FTP service. //设定Vsftpd的登陆标语。
#deny_email_enable=YES // (default follows)
#banned_email_file=/etc/vsftpd/banned_emails
chroot_local_user=YES
chroot_list_enable=YES //禁止用户登出自己的FTP主目录。
chroot_list_file=/etc/vsftpd/chroot_list //这个文件里的用户不受限制,不限制在本目录。
ls_recurse_enable=NO //禁止用户登陆FTP后使用"ls -R"的命令。
该命令会对伺服器性能造成巨大开销。
#listen=NO
#listen_ipv6=YES
userlist_enable=YES //设定userlist_file中的用户将不得使用FTP。
tcp_wrappers=YES //设定支持TCP Wrappers
allow_writeable_chroot=YES //这个可以解决chroot许可权问题
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40080
pasv_promiscuous=YES
systemctl restart vsftpd //重启vsftpd服务
注意,「/」在这里就是用户账号的家目录,并不是系统的根目录。
七、vsftpd虚拟用户的使用
vsftpd提供了三种认证方式,分别是:匿名用户认证、本地用户认证和虚拟用户认证。上面test用户就是本地用户。从安全的角度来说,虚拟用户最安全,接下来,我们开始配置虚拟用户。
虚拟用户配置步骤:
1) 建立虚拟FTP用户资料库文件。
2) 创建FTP根目录及虚拟用户映射的系统用户。
3) 建立支持虚拟用户的PAM认证文件。
4) 在vsftpd.conf中添加支持配置。
5) 为虚拟用户设置许可权。
6) 虚拟账号登录。
1.建立虚拟FTP用户资料库文件
建立一个虚拟用户名单文件,这个文件就是来记录vsftpd虚拟用户的用户名和口令的数据文件,我这里给它命名为vuser.list,保存在/etc/vsftpd/目录下。
vim vuser.list
一行账号,一行密码
vuser
123456
安装Berkeley DB
yum install db4*
安装后
db_load -T -t hash -f vuser.list vuser.db//生成用户加密文件
chmod 600 vuser.db //敏感文件限制只允许属主读写
2.创建虚拟用户及虚拟用户的家目录
useradd -d /var/vusers -s /sbin/nologin vftp //创建系统用户vftp,并制定其家目录为/var/vusers
chmod -Rf 755 /var/vusers/ //修改目录的许可权使得其他用户也可以访问。
3.建立支持虚拟用户的PAM认证文件
vsftpd的pam文件在/etc/pam.d/目录下,先做备份工作。
cp vsftpd vsftpd.bakvim vsftpd
先注释掉所有的内容后添加以下内容:
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser //此句用于检查用户密码,资料库文件不要写后缀.db
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser //此句用于检查用户是否在有效期内,资料库支持虚拟用户的PAM认证文件。
4.在vsftpd.conf中添加支持配置
guest_enable=YES //开启虚拟用户模式
guest_username=vftp //指定虚拟用户账号
pam_service_name=vsftpd //指定pam文件
user_config_dir=/etc/vsftpd/vusers_profile //指定虚拟用户的许可权配置目录。
virtual_use_local_privs=NO //虚拟用户和匿名用户有相同的许可权
5.为虚拟用户设置不同的许可权。
mkdir /etc/vsftpd/vusers_profile //新建虚拟用户目录
vim /etc/vsftpd/vusers_profile/vuser//新建虚拟用户配置文件,文件名要和上面的虚拟用户名单里的账号名字对等。
local_root=/var/vusers/vuser //虚拟账号的家目录
write_enable=YES
anonymous_enable=NO
local_umask=022
anon_upload_enable=YES //上传许可权
anon_mkdir_write_enable //创建文件和目录的许可权
anon_other_write_enable //删除文件和目录的许可权
anon_world_readable_only=YES //当文件的「其他人」有读许可权的时候可以下载
download_enable=YES //下载许可权
保存配置,重启服务。
systemctl restart vsftpd
虚拟用户登录
连接成功
八、认识vsftpd传输模式
主动模式
FTP主动模式 在主动模式下,FTP客户端从任意埠5150(埠号>1023)发起一个FTP请求,并携带自己监听的埠号5151(发送的埠号+1=监听埠号);随后伺服器返回确认,然后从伺服器本地的20埠主动发起连接请求到客户端的监听埠5151,最后客户端返回确认。
被动模式
FTP被动模式 在被动模式中,命令连接和数据连接都由客户端来发起,如上图所示,客户端用随机命令埠5150向伺服器的21命令埠发送一个PASV请求,然后伺服器返回数据埠3267,告诉客户端我在哪个埠监听数据连接。然后客户端向伺服器的监听埠3268发起数据连接,最后伺服器回复确认。
vsftpd默认是被动模式。 所以客户端要设置被动模式连接,如果到现在还没连接成功的看客户端有没有设置被动传输模式。
再次提醒一遍 ,云伺服器,例如阿里云平台,你需要在安全策略那里开放埠。通常你在本地配置可以使用,但在云伺服器上发现不行,可以从日志文件、防火墙、selinux这几块入手。
九、500 OOPS:priv_sock_get_cmd错误
网上很多说是selinux设置问题,我按照他们的都改了,但是还是不行。最后我发现问题是出在pam文件里。
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
如果你是64位,你需要添加的/lib64/ ,我遇到的问题就这么的解决了。
如果哪里有写错的,请指出来,谢谢。
喜欢的话可以关注我~
推荐阅读: