目录

1)vsftpd简介
2)安装vsftpd
3)firewalld防火墙和selinux设置
4)运行,登录
5)局域网登录
6)认识vsftpd软件配置文件
7)设置虚拟账号登录
8)认识vsftpd传输模式
9)500 OOPS:priv_sock_get_cmd错误

一、vsftpd简介

FTP,File transfer protocol的缩写,中文叫文本传输协议,是用于在网络上进行文件传输的一套标准协议,属于网络传输协议的应用层。注意,它是协议,不是软件,今天搭建的vsftpd是基于FTP开发的一套程序,也是一款在Linux发行版中最受推崇的FTP服务器程序,特点是小巧轻快,安全易用。
二、安装vsftpd

yum install vsftpd
三、firewall防火墙和selinux设置

firewall-cmd --list-services //查看防火墙允许的服务。

firewall-cmd --add-service=ftp --permanent //永久开放ftp服务

firewall-cmd --add-port=20/tcp --permanent

firewall-cmd --add-port=21/tcp --permanent //允许外网访问

firewall-cmd --reload //重新载入配置

setsebool ftpd_full_access 1 //selinux设置

setsebool tftp_home_dir 1
四、运行,登录

useradd test

passwd test

ftp localhost

输入账号密码,成功登录。

五、局域网测试

Centos下的网卡设置是在/etc/sysconfig/network-s/这个文件夹下,进入该文件夹,前缀为ifcfg-后面跟的就是网卡的名称。

默认的话是开启dhcp的,首先把BOOTPROTO="dhcp"改成BOOTPROTO="static"表示静态获取。之后在写进以下配置:

IPADDR=192.168.1.6

NETMASK=255.255.255.0

GATEWAY=192.168.1.1

DNS1=192.168.1.1

BROADCAST设置的是局域网广播地址,IPADDR就是静态IP,NETMASK是子网掩码, GATEWAY就是网关或者路由地址,DNS就是域名系统地址, 这里用的就是本地网关,也可以设置其它,比如谷歌、360DNS地址。

systemctl restart network //重启网络服务

ip addr或者ifconfig //查看ip地址

接下来在windows平台用FileZilla Client软件登陆。

这里有些朋友会使用虚拟机测试,但是按照上面配置后发现连接不了,那是因为虚拟机的网络连接模式的影响。这里有一个简单的方法,就是直接获取虚拟机里面系统的ip地址,然后在FileZilla客户端填入。


系统账号默认登陆是在账号的家目录,可以切换到其它目录。

到这里,基本的vsftpd搭建成功。
六、认识vsftpd配置文件vsftpd.conf

主程序:/usr/sbin/vsftpd

主配置文件:/etc/vsftpd/vsftpd.conf

数据根目录:/var/ftp

就算是经验丰富的老手也会做好备份工作

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

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权限问题

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.virtual //指定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 //虚拟账号的家目录

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客户端从任意端口5150(端口号>1023)发起一个FTP请求,并携带自己监听的端口号5151(发送的端口号+1=监听端口号);随后服务器返回确认,然后从服务器本地的20端口主动发起连接请求到客户端的监听端口5151,最后客户端返回确认。

被动模式

在被动模式中,命令连接和数据连接都由客户端来发起,如上图所示,客户端用随机命令端口5150向服务器的21命令端口发送一个PASV请求,然后服务器返回数据端口3267,告诉客户端我在哪个端口监听数据连接。然后客户端向服务器的监听端口3268发起数据连接,最后服务器回复确认。

vsftpd默认是被动模式。所以客户端要设置被动模式连接,如果到现在还没连接成功的看客户端有没有设置被动传输模式。
九、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/,我遇到的问题就这么的解决了。

如果哪里有写错的,请指出来,谢谢。

最后修改:2020 年 02 月 15 日
如果觉得我的文章对你有用,请随意赞赏