vsftp+ssl服务搭建
文章目录
- centos7
- 安装
- 文件结构
- /etc/vsftpd/vsftpd.conf
- /etc/vsftpd/chroot_list
- /etc/vsftpd/ftpusers
- /etc/vsftpd/user_list
- 配置(本地用户模式配置)
- 开启ssl
- error
- 开启虚拟用户模式
centos7
安装
yum install vsftpd
文件结构
/etc/vsftpd/vsftpd.conf
ftp的主配置文件
/etc/vsftpd/chroot_list
该文件为自己新建,里面放允许登录ftp的用户,一行放一个用户名
/etc/vsftpd/ftpusers
里面放不允许登录ftp的用户
/etc/vsftpd/user_list
这个文件在有了chroot_lsit后就有点鸡肋,默认情况userlist_deny=YES ,这时,该文件内的用户就不可以登录,当userlist_deny=NO,该文件内的用户就可以登录。
配置(本地用户模式配置)
打开配置文件:
vim /etc/vsftpd/vsftpd.conf
修改以下内容(注意,监听IPV6会同时开启IPV6和IPV4,因此只设置listen_ipv6=YES也是可以的,不过会慢一点,因为使用这个的话你会发现会先匹配ipv6,而ipv6无法使用从而还是使用ipv4):
# 拒绝匿名登录
anonymous_enable=NO
# 允许本地用户登录
local_enable=YES
# 允许上传和修改内容
write_enable=YES
# 将用户限制在自己的主目录里
chroot_local_user=YES
# 开启可登录用户列表
chroot_list_enable=YES
# 指定用户列表文件目录
chroot_list_file=/etc/vsftpd/chroot_list
# 开启ipv4监听
listen=YES
# 注释掉,listen和listen_ipv6无法同时开启,
# listen_ipv6=YES
创建一个用户专门用于管理ftp,并设置其家目录,该目录专门用于上传和下载:
useradd ftpuser -d /var/ftp/ftpuser
passwd ftpuser
在用户列表中添加该用户,首先创建chroot_list文件:
touch /etc/vsftpd/chroot_list
并输入以下内容:
ftpuser
在vsftpd.conf文件中添加如下内容:
# 指定ftpuser使用的目录
local_root=/var/ftp/ftpuser
allow_writeable_chroot=YES
# 密码登录
pasv_enable=YES
pasv_address= 你的ip地址
# 设置数据传输可用的端口范围
pasv_min_port=40000
pasv_max_port=45000
重启vsftpd并开启自启:
systemctl restart vsftpd
systemctl enable vsftpd
开启ssl
普通的ftp是不安全的,因此需要开启SSL,实际上是TLS,这里手动创建ssl。
创建.ssl目录:
mkdir /etc/vsftpd/.ssl
创建SSL证书:
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/vsftpd/.ssl/vsftpd.key -out /etc/vsftpd/.ssl/vsftpd.pem
在vsftpd.conf文件末尾添加如下内容:
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH
rsa_cert_file=/etc/vsftpd/.ssl/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/.ssl/vsftpd.key
重启:
systemctl restart vsftpd
最后,不要忘记在iptables中添加相关记录。
error
如果直接拷贝代码,有时会出现一些问题,比如code=exited status=2,一般是某个变量设置值错误的问题,这是因为在在copy的代码中,变量后往往会有一些看不见的符号,这导致变量值设置错误,这个时候清理一下就好。
如果想要看更为详细的信息,不是去systemctl status vsftpd,而是输入以下命令:
vsftpd /etc/vsftpd/vsftpd.conf
开启虚拟用户模式
虚拟用户模式是匿名模式、本地用户模式和虚拟用户模式三种模式中最安全的一种认证模式。前面开启的是本地用户模式。虚拟用户模式旨在使用虚拟出来的用户来登录ftp,这个虚拟用户只能访问指定的目录,不像本地用户模式可以访问其他目录。
参考:第11章 使用Vsftpd服务传输文件。 | 《Linux就该这么学》 (linuxprobe.com)
(1)开启虚拟用户模式,注意,以下只显示了·部分配置,没显示的配置都是本地用户模式配置了的
。
打开ftp配置文件
vim /etc/vsftpd/vsftpd.conf
输入以下内容,同时记得关闭本地用户模式:
# 虚拟用户模式关键参数
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=YES
# 本地用户模式关键参数
#chroot_local_user=YES
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list
(2)创建virtual用户和虚拟用户配置目录,其中/var/ftp/virtual是虚拟用户的访问根目录(也是virtual用户的家目录):
useradd -d /var/ftp/virtual -s /sbin/nologin virtual
mkdir /etc/vsftpd/virtual
(3)创建虚拟用户数配置目录,配置目录是虚拟用户配置文件所在目录,其下的配置文件内容为vsftpd.conf配置匿名用户时所需的部分内容:
mkdir /etc/vsftpd/virtual
创建相应的配置文件:
vim /etc/vsftpd/virtual/user1
输入以下内容,local_root指定了用户访问的目录,无该目录可自行创建,该目录及父目录应赋予相应的权限,都赋予755就行,umask是和virtual对user1目录的权限再作掩码得到在该目录下新建文件和文件夹的默认权限,这里是755:
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_umask=000
local_root=/var/ftp/virtual/user1
新建user2的配置文件,可和上面类似。
(4)开启pam,在vsftpd.conf文件中添加以下行:
pam_service_name=vsftpd.vu
(5)新建一个用于虚拟用户认证的PAM文件vsftpd.vu:
vim /etc/pam.d/vsftpd.vu
输入以下内容,其中PAM文件内的“db=”参数为使用db_load命令生成的账户密码数据库文件的路径,但不用写数据库文件的后缀:
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
(6)新建虚拟用户列表文件,并生成相应的数据库文件:
vim /etc/vsftpd/vuser.list
输入以下内容:
user1
password1
user2
password2
生成数据库文件并赋予其可读可写的权限:
db_load -T -t hash -f /etc/vsftpd/vuser.list /etc/vsftpd/vuser.db
chmod 600 vuser.db
(7)重启vsftpd然后远程用虚拟用户和密码访问即可(注意,我的系统是关了SELInux的
)