vsftpd安装及虚拟用户配置

时间:2022-01-17 05:59:52

FTP服务是最常用的跨平台文件共享服务之一

============= 完美的分割线 ===============

0.FTP两种模式的区分

1)PORTFTP和PASVFTP,PORTFTP是一般形式的FTP。
2)这两种FTP在建立控制连接时操作是一样的,都是由客户端首先和FTP服务器的控制端口(默认值为21)建立控制链接,并通过此链接进行传输操作指令。它们的区别在于使用数据传输端口(ftp-data)的方式。
3)PORTFTP由FTP服务器指定数据传输所使用的端口,默认值为20。
4)PASVFTP由FTP客户端决定数据传输的端口。PASVFTP这种做法,主要是考虑到存在防火墙的环境下,由客户端与服务器进行沟通(客户端向服务器发出数据传输请求中包含了数据传输端口),决定两者之间的数据传输端口更为方便一些。

1.安装FTP服务端

1.1.环境准备

# 检查系统环境,如果系统版本较低,建议升级内核等

# 在CentOS6.x和7.x版本安装方法基本相同

uname -a
cat /etc/redhat-release 
# yum update -y       # 如果是新服务器或者是ftp独占可以升级,其他看情况

1.2.安装vsftpd

# 包括服务端和客户端

yum install vsftpd ftp -y

1.3.启动vsftpd服务并配置开机自启动

/etc/init.d/vsftpd start
netstat -anptl|grep vsftpd
chkconfig vsftpd on
chkconfig --list vsftpd

1.4.配置查看ftp相关日志

# 从xferlog可以查看到用户上传下载等的操作记录,删除不会显示

vim /etc/logrotate.d/vsftpd 
/var/log/vsftpd.log {
    # ftpd doesn't handle SIGHUP properly
    nocompress
    missingok
}
/var/log/xferlog {
    # ftpd doesn't handle SIGHUP properly
    nocompress
    missingok
}
tail -f /var/log/xferlog

2.配置匿名方式访问FTP服务端

2.1.安装好vsftpd服务,默认为匿名访问

1)可以直接输入IP端口,可以打开ftp服务器
2)允许匿名用户登录,宿主目录为/var/ftp,不能离开,下载目录为/var/ftp/pub,且只能下载,不能上传
3)允许本地用户登录,且可离开主目录,本地用户允许上传/下载
4)写在文件/etc/vsftpd/ftpusers中的本地用户禁止登录
5)服务器使用独占方式启动,且无限制连接数

3.配置虚拟用户认证的FTP服务端

3.1.修改vsftpd.conf 文件

cd /etc/vsftpd/
vim vsftpd.conf 

# 修改配置文件,确认以下选项

anonymous_enable=NO     # 修改,禁止匿名用户登录
local_enable=YES        # 默认启用,允许本地用户登录,虚拟用户需要映射到本地用户才可以使用
write_enable=YES        # 默认启用,本地用户开放写权限
#local_umask=022        # 注释掉,本地用户创建的文件的权限反码022,创建的文件为644
userlist_enable=YES        # 默认启用,默认为允许user_list中的用户进行访问
# userlist_deny=yes        # 也可以用这个,默认拒绝user_list中的用户访问FTP服务器,保留一种即可
userlist_file=/etc/vsftpd/user_list
chroot_local_user=YES      # 默认启用,将本地用户锁定在自家目录中

# made for virtual user
guest_enable=YES              # 增加,启用虚拟用户模式
guest_username=ftpvuser        # 增加,配置虚拟用户映射到的本地用户名
pam_service_name=/etc/pam.d/ftpvuser.pam    # 修改,配置虚拟用户的认证方式
user_config_dir=/etc/vsftpd/vuser.d    # 增加,虚拟用户的配置文件目录
anon_umask=022            # 增加,匿名用户新增文件的umask数值。默认值为077,需要修改为022,否则上传后的文件为600

# 其他配置选项,根据实际需求修改

dirmessage_enable=YES          # 设置切换到目录时显示message 隐含文件的内容
xferlog_enable= YES             # 激活上传和下载日志
connect_from_port_20= YES          # 启用FTP数据端口连接
pam_service_name=vsftpd            # 设置PAM认证服务的配置文件名称,  该文件存放在/etc/pam.d目录下
userlist_enable= YES            # 允许vsftpd.user_list文件中的用户访问服务器
userlist_deny= YES             # 拒绝vsftpd.user_list文件中的用户访问服务器
listen= YES                    # 是否使用独占启动方式
tcp_wrappers= YES              # 使用防火墙
#file_open_mode=0755

# vsftpd配置文件

/etc/vsftpd/vsftpd.conf         # 主配置文件
/etc/vsftpd/ftpusers             # FTP限制访问的用户,里面是一些系统用户,默认不允许访问,防止被入侵
/etc/vsftpd/user_list            # 授权用户列表,可以控制哪些用户可以访问或者禁止访问

# 注意:
1)vsftpd.conf 文件中每个选项设置为一行,格式为“option=value”,“=”号两边不能留空白符
2)除了主配置文件外,还可以给特定用户设定个人配置文件
3)虚拟用户默认可以读写,访问时映射为本地用户,所以需要启用对本地用户的控制
4)实际的访问权限可由用户独立的配置文件进行单独控制

3.2.创建虚拟用户相关文件

1)创建授权认证文件

cd /etc/pam.d/
mv vsftpd vsftpd.ori        # 备份原有的ftp的pam认证文件
vim ftpvuser.pam          # 创建新的ftp虚拟用户认证文件

写入以下内容:

#%PAM-1.0
auth       required     pam_userdb.so db=/etc/vsftpd/vuser.d/vuser        # 不可以加.db的扩展名,否则认证不成功
account    required     pam_userdb.so db=/etc/vsftpd/vuser.d/vuser

2)创建虚拟用户的秘钥文件

mkdir -p /etc/vsftpd/vuser.d
cd /etc/vsftpd/vuser.d
touch vuser.list

3)加密虚拟用户的秘钥文件

# 使用db_load工具生成加密

yum install db4-utils -y
db_load -T -t hash -f vuser.list vuser.db
file vuser.list 
file vuser.db 

# 为了安全,修改虚拟用户文件的访问权限

chmod 600 /etc/vsftpd/vuser.*
ll /etc/vsftpd/vuser.*

3.3.配置一个虚拟用户访问权限的实例

1)创建或修改虚拟用户秘钥信息

cd /etc/vsftpd/vuser.d
vim  vuser.list
--------------------
admin
123456
--------------------

2)设置可以访问ftp的虚拟用户列表user_list

# 注释掉其他本地用户认证的内容,因为启用了guest_enable后,本地用户将失效,所有非匿名用户变成虚拟用户
# 因为需要授权访问的用户比较少,所以user_list设置为可以访问ftp服务的用户

vim /etc/vsftpd/user_list 
---------------------
admin
----------------------

3)每个用户单独创建授权文件

cd /etc/vsftpd/vuser.d
vim admin
---------------------------
# 指定宿主目录,配置访问权限
write_enable=YES
local_root=/data/ftpdata/admin     # 宿主目录
anon_upload_enable=YES               # 上传
anon_mkdir_write_enable=YES          # 创建目录写权限
anon_other_write_enable=YES          # 其他写入权限
---------------------------

4)创建ftp虚拟用户的宿主目录

# 创建的ftp本地用户及其根目录,用于映射虚拟用户,注意修改目录权限

mkdir -p /data/ftpdata/admin            # 虚拟用户的宿主目录需要预先创建
useradd -d /data/ftpdata/ -s /sbin/nologin ftpvuser
chmod 755 /data/ftpdata/
ll /data/ftpdata/ -d

5)配置完成刷新配置信息,进行测试

service vsftpd reload

4.常见报错处理

错误现象1:文件显示上传成功,刷新就是不显示。

报错分析:

1)检查发现上传的文件权限为600,是上传文件权限设置问题

解决方法:修改虚拟用户权限配置

local_umask=022 改为 anon_umask=022

2)另外,在创建虚拟用户映射的ftp本地用户的时候,使用useradd创建的宿主目录权限默认为700

这样,虽然上传文件的权限为644可读,文件夹755可读,但由于ftp的上层目录不可读,子目录也会受限

解决方法:修改宿主目录的权限为755即可

chmod 755 /data/ftpdata/

5.附:防火墙配置

如果ftp被动模式用到防火墙,可以参考以下配置

iptables -I INPUT -p tcp --dport 21 -j ACCEPT          #FTP连接端口
iptables -I INPUT -p tcp --dport 33000:34000 -j ACCEPT      #pasv模式下的随机端口
iptables-save >/etc/sysconfig/iptables              #保存防火墙配置

systemctl restart iptables.service
systemctl restart vsftpd.service

======== 完毕,呵呵呵呵 ========