安装vsftpd

vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用。

在线安装

yum install -y vsftpd

卸载vsftpd

1.先查出来vsftpd安装包

rpm -aq vsftpd

2.再根据安装包名进行卸载

rpm -e vsftpd-3.0.2-27.el7.x86_64

开放端口

firewall 防火墙操作,其他防火墙请自行百度开放端口命令

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

firewall-cmd --permanent --zone=public --add-port=21/tcp

firewall-cmd --permanent --zone=public --add-port=22/tcp

firewall-cmd --permanent --zone=public --add-service=ftp

firewall-cmd --reload

selinux 操作,查询出状态是关闭的话无需下面两步操作

getsebool -a | grep ftp

setsebool -P tftp_home_dir 1

setsebool -P ftpd_full_access 1

创建FTP宿主用户

注:/var/ftp_root 可以换成其他目录,后面涉及到的地方记得修改

创建ftp根目录

mkdir /var/ftp_root

新建一个ftp的宿主用户(即存在Linux系统的用户,不是虚拟用户)

useradd -g root -M -d /var/ftp_root -s /sbin/nologin ftpuser

添加宿主用户的密码

passwd ftpuser

把 /var/ftp_root 的所有权给ftpuser.root

chown -R ftpuser.root /var/ftp_root

pam方式认证

虚拟用户的用户认证是通过pam方式去认证的。

vim /etc/pam.d/vsftpd

pam文件里面指定了认证的db文件,db文件又是通过明文用户名和密码文件生成而来。那么首先我们要指定pam文件,这个在 /etc/vsftpd/vsftpd.conf 配置文件是通过 pam_service_name=vsftpd 配置指定的,其位置是 /etc/pam.d/vsftpd,编辑该文件,把文件内容全部注释掉,加上以下两行。

64位系统:

auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd

account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd

32位系统:

auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd

account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd

db=/etc/vsftpd/vuser_passwd 指定了db文件的位置

注:文件奇行为虚拟用户名,偶行为虚拟用户密码

vim /etc/vsftpd/vuser_passwd.txt

生成db文件

如果要添加新的虚拟用户,在编辑 vuser_passwd.txt 后要再次生成一下db文件

cd /etc/vsftpd

db_load -T -t hash -f vuser_passwd.txt vuser_passwd.db

虚拟用户配置

现在每个用户的具体配置,如指向目录、可读写权限等又是在哪配置的呢,原来它是通过一个用户对应一个配置文件来实现的,且这个文件必须用FTP用户名去做文件名,建一个目录专门存放这些文件。

注:vuser1 为 vuser_passwd.txt 里的虚拟用户名

mkdir vuser_conf

vim vuser_conf/vuser1

具体配置内容

#设置虚拟用户的目录

local_root=/var/ftp_root

#设置虚拟用户是否可以写入

write_enable=YES

anon_umask=022

anon_world_readable_only=NO

#允许虚拟用户的上传功能

anon_upload_enable=YES

#设置虚拟用户是否可以创建文件夹

anon_mkdir_write_enable=YES

#设置虚拟用户是否可以执行其他的写入操作,比如删除、重命名、覆盖操作。

anon_other_write_enable=YES

#最多允许同一账号在10个不同的IP登录

max_per_ip=10

#最大下载速度(字节/秒)

local_max_rate=2500000

#session超时时间

#idle_session_timeout=300

#连接超时时间

#data_connection_timeout=90

#最多连接数

#max_clients=10

配置vsftpd.conf 若下面某些字段没有在配置中找到,自行添加就好

cd /etc/vsftpd

vim vsftpd.conf

#修改一下几处

#不允许匿名访问

anonymous_enable=NO

#本地用户可以访问。注意:主要是为虚拟宿主用户,如果该项目设定为NO那么所有虚拟用户将无法访问

local_enable=YES

#可以进行写操作

write_enable=YES

#禁止匿名用户上传

anon_upload_enable=NO

#禁止匿名用户建立目录

anon_mkdir_write_enable=NO

#支持ASCII模式的上传和下载功能

ascii_upload_enable=YES

ascii_download_enable=YES

#限制用户只能在FTP主目录

#若没有chroot_list文件,自行创建,每一行为一个用户名

chroot_local_user=YES

chroot_list_enable=YES

# (default follows)

chroot_list_file=/etc/vsftpd/chroot_list

#开启ip4监听

listen=YES

#关闭ip6监听

listen_ipv6=NO

#PAM服务下Vsftpd的验证配置文件名

pam_service_name=vsftpd

#指定vsftpd服务的运行帐户,不指定时使用ftp

#这里的ftpuser就是刚才useradd时创建的Linux系统用户

nopriv_user=ftpuser

# 设定启用虚拟用户功能

guest_enable=YES

# 指定虚拟用户的宿主用户,CentOS中已经有内置的ftp用户了

guest_username=ftpuser

# 虚拟用户配置文件存放的路径

user_config_dir=/etc/vsftpd/vuser_conf

# 如果启用了限定用户在其主目录下需要添加这个配置

allow_writeable_chroot=YES

# NO时,虚拟用户和匿名用户有相同的权限,默认是NO

virtual_use_local_privs=YES

注意:没有这个文件的话需要手动创建,否则后面会报错

touch /etc/vsftpd/chroot_list

连接ftp时可能会出现读取目录超时的情况,解决方法如下

在 /etc/vsftpd/vsftpd.conf末尾添加上以下内容

开启pasv被动模式

pasv_enable=YES

pasv_addr_resolve=YES

pasv_address=127.0.0.1

pasv_min_port=4000

pasv_max_port=5000

pasv_promiscuous=YES

firewall防火墙打开4000-5000端口

firewall-cmd --permanent --zone=public --add-port=4000-5000/tcp

firewall-cmd --reload

开启vsftpd服务

systemctl start vsftpd

#开机启动

systemctl enable vsftpd

总结:

注:出现创建文件或文件夹失败

需要加下权限

chmod -R 775 /var/ftp_root

1.ftp的根目录在创建ftp宿主用户时就指定好,在/etc/vsftpd/vuser_conf里面的虚拟用户配置中的local_root项要在根目录里面;

2.改变ftp的根目录

usermod -d /xxx/xxx来切换

同时/etc/vsftpd/vuser_conf里面的虚拟用户配置也要跟着换

重启vsftpd