centos7 搭建VSFTP+SSL

参考:
https://www.linuxprobe.com/chapter-11.html?tdsourcetag=s_pctim_aiomsg
https://blog.csdn.net/Mayday920723/article/details/53173263?locationNum=4&fps=1
https://www.cnblogs.com/ajianbeyourself/p/7655464.html
https://blog.csdn.net/weixin_45719852/article/details/109188314
https://blog.csdn.net/qq_38626043/article/details/103698187
在192.168.1.115中配置

# yum install vsftpd -y
# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
# grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf
# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

虚拟用户模式

第1步:创建用于进行FTP认证的用户数据库文件,其中奇数行为账户名

# cd /etc/vsftpd/
# vim vuser.list
mingtai
156fe8db903ac8
但是,明文信息既不安全,也不符合让vsftpd服务程序直接加载的格式,因此需要使用db_load命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件,并且降低数据库文件的权限(避免其他人看到数据库文件的内容),然后再把原始的明文信息文件删除。
# db_load -T -t hash -f vuser.list vuser.db
# file vuser.db
# chmod 600 vuser.db
# rm -f vuser.list

第2步:创建vsftpd服务程序用于存储文件的根目录以及虚拟用户映射的系统本地用户。FTP服务用于存储文件的根目录指的是,当虚拟用户登录后所访问的默认位置。

      由于Linux系统中的每一个文件都有所有者、所属组属性,例如使用虚拟账户“张三”新建了一个文件,但是系统中找不到账户“张三”,就会导致这个文件的权限出现错误。为此,需要再创建一个可以映射到虚拟用户的系统本地用户。简单来说,就是让虚拟用户默认登录到与之有映射关系的这个系统本地用户的家目录中,虚拟用户创建的文件的属性也都归属于这个系统本地用户,从而避免Linux系统无法处理虚拟用户所创建文件的属性权限。
  # useradd -d /usr/local/nginx/html/mall.9cubic.cn -s /sbin/nologin virtual
  # ls -ld /usr/local/nginx/html/mall.9cubic.cn
  # chmod -Rf 755 /usr/local/nginx/html/mall.9cubic.cn

第3步:建立用于支持虚拟用户的PAM文件。

     PAM(可插拔认证模块)是一种认证机制,通过一些动态链接库和统一的API把系统提供的服务与认证方式分开,使得系统管理员可以根据需求灵活调整服务程序的不同认证方式。要想把PAM功能和作用完全讲透,至少要一个章节的篇幅才可以(对该主题感兴趣的读者敬请关注本书的进阶篇,里面会详细讲解PAM)。

     新建一个用于虚拟用户认证的PAM文件vsftpd.vu,其中PAM文件内的“db=”参数为使用db_load命令生成的账户密码数据库文件的路径,但不用写数据库文件的后缀:
 # vim /etc/pam.d/vsftpd.vu
 auth       required     pam_userdb.so db=/etc/vsftpd/vuser
 account    required     pam_userdb.so db=/etc/vsftpd/vuser

第4步:在vsftpd服务程序的主配置文件中通过pam_service_name参数将PAM认证文件的名称修改为vsftpd.vu,PAM作为应用程序层与鉴别模块层的连接纽带,可以让应用程序根据需求灵活地在自身插入所需的鉴别功能模块。当应用程序需要PAM认证时,则需要在应用程序中定义负责认证的PAM配置文件,实现所需的认证功能。

第5步:为虚拟用户设置不同的权限。虽然账户zhangsan和lisi都是用于vsftpd服务程序认证的虚拟账户,但是我们依然想对这两人进行区别对待。比如,允许张三上传、创建、修改、查看、删除文件,只允许李四查看文件。这可以通过vsftpd服务程序来实现

# mkdir /etc/vsftpd/vusers_dir/
# cd /etc/vsftpd/vusers_dir/
# cat mingtai
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_umask=000

然后再次修改vsftpd主配置文件,通过添加user_config_dir参数来定义这两个虚拟用户不同权限的配置文件所存放的路径。为了让修改后的参数立即生效,需要重启vsftpd服务程序并将该服务添加到开机启动项中:

# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd.vu
userlist_enable=YES
tcp_wrappers=YES
user_config_dir=/etc/vsftpd/vusers_dir
   # systemctl restart vsftpd
   # systemctl enable vsftpd

补充:如果需要另创新FTP虚拟用户管理新的文件夹,操作如下

删除原本的vuser.db,再创建新的vuser.db

# cd /etc/vsftpd/
# rm -rf vuser.db 
# vim vuser.list
mingtai
156fe8db903ac8
zhangsan
redhat
lisi
redhat
# db_load -T -t hash -f vuser.list vuser.db
# file vuser.db
# chmod 600 vuser.db
# mv vuser.list /backup/

创建可以映射到虚拟用户的系统本地用户

# useradd -d /backup/ -s /sbin/nologin virtual2
# useradd -d /test/ -s /sbin/nologin virtual5
# useradd -d /var/ftproot/ -s /sbin/nologin virtual3
# ls -ld /test/
# chmod -Rf 755 /test/
# ls -ld /backup/
# chmod -Rf 755 /backup/
# ls -ld /var/ftproot/
# chmod -Rf 755 /var/ftproot/

###########################################################################################
如果创建的系统本地用户的家目录一存在,可以改变该文件夹的属组合属主,例如:

# chown -R virtual5:virtual5 /test/
# ls -ld /test/
# chmod -Rf 755 /test/

############################################################################################

建立用于支持虚拟用户的PAM文件。

# vim /etc/pam.d/vsftpd.vu
auth       required     pam_userdb.so db=/etc/vsftpd/vuser
account    required     pam_userdb.so db=/etc/vsftpd/vuser

为虚拟用户设置不同的权限

# cd /etc/vsftpd/vusers_dir/
# cat lisi 
local_root=/var/ftproot/
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_umask=000
# cat mingtai 
local_root=/backup/
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
# cat zhangsan 
local_root=/test/
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_umask=000
# systemctl restart vsftpd

##############################################################################################################################################
使用SSL加密数据传输
创建SSL证书

# openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/vsftpd/vsftpd.key -out /etc/vsftpd/vsftpd.pem

req 是x509证书签名的请求
x509 表示使用x509证书管理数据
newkey 指定证书密钥处理
rsa RSA密钥加密 我这里采用的是2024位私有密钥
keyout 指定密钥存储位置
out 指定证书存储位置
days 证书有效天数

在vsftpd.conf中添加SSL安全配置

将以下内容添加到 /etc/vsftpd/vsftpd.conf文件末尾

ssl_enable=YES
force_anon_data_ssl=YES
force_anon_logins_ssl=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_sslv2=YES
ssl_sslv3=YES
ssl_tlsv1=YES
ssl_tlsv1_1=YES
ssl_tlsv1_2=YES

配置证书文件

rsa_cert_file=/etc/vsftpd/vsftpd.pem

配置私钥文件

rsa_private_key_file=/etc/vsftpd/vsftpd.key
# systemctl restart vsftpd

####################################################################################################################################

验证:在装ssl前,使用tcpdump 可以抓包密码

# tcpdump -i ens33 -A >>a.txt
# cat a.txt | grep PASS

使用ssl后,密码加密了,可以看到使用了TLS

# cat a.txt | grep AUTH
  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

lqh_linux

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值