linux-vsftpd

实验目的:设置特定用户才能使用ftp服务,理解vsftpd白名单黑名单配置,防火墙对应配置,用户切换目录权限控制。简单搭建ftp服务器并且搭建自定义仓库。linux 默认有ftp ,vsftp非常安全传输协议ftp
介绍下ftp 简单开源的ftp服务器,默认开放21号端口
其他数据共享服务:APACHE SCP NFS(Linux与Windows之间共享) SAMBA(Linux中的网上邻居) FTP RSYNC(远程备份服务)

实验结构

服务器:192.168.5.140/24 主机名:emporer
客户机:192.168.5.141/24 主机名:client

安装ftp

确保有yum 源,或者挂载光盘,直接rpm 安装,我的主机是vmware nat 模式,直接yum 安装。

yum list vsftpd  &&  yum install -y vsftpd 

image
开启服务:服务默认未开启并且没有随机启动

systemctl start vsftpd 
systemctl enable vsftpd

默认开启21号端口
image-1656512581479

netstat -ntpal

配置实例

默认配置

配置文件/etc/vsftpd/vsftpd.conf
默认数据存放目录:/var/ftp/pub下面。

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

默认配置:image
默认配置使用匿名用户登录,也可以添加虚拟用户,或者使用系统用户登录。使用系统用户时,ftp默认访问路径在当前用户的家目录,可添加配置"anon_root=数据路径。匿名用户时默认访问路径为/var/ftp/pub。pxe批量安装系统时就会使用这个路径并且把系统镜像放在此目录。
默认监听在ipv6下 。
客户端测试:匿名用户下默认用户名和密码都是anonymous
image-1657721199138

黑名单配置:

Local_enable = yes //允许本地账号登录 前提是anonymous=no匿名关闭状态下 告诉userlist_file 是否起作用。
Userlist_file=/etc/vsftpd/user_list //定义用户,里面全部都是用户名
Userlist_deny =no: //表示里面的用户都被允许, yes 表示里面的用户都被拒绝,(定义userlist_file里面的用户)

cat vsftpd.conf |grep -v  "^#" |grep -v "^$"
anonymous_enable=NO
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=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list //定义用户列表
userlist_deny=YES//表示拒绝
tcp_wrappers=YES

新建测试用户ftp_user1不加入到user_list下
useradd -s /sbin/nologin ftp_user1 //通过指定shell为/sbin/nologin来限定不可登录系统
echo “123456” |passwd --stdin ftp_user1 添加密码
如果添加的用户只针对于ftp用指定用户shell环境时 必须加入到/etc/shells这个文件中
浏览器测试
image-1657897753779
image-1657897793244
可以登录默认访问路径为用户的家目录

白名单配置

anonymous_enable=NO
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=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
tcp_wrappers=YES

ftp_user1浏览器测试即不可以登录。
image-1657897971545
添加一个ftp_user2到/etc/vsftpd/user_list下
useradd ftp_user2
echo “123456” |passwd --stdin ftp_user2
echo “ftp_user2” >> /etc/vsftpd/user_list
image-1657898097621
image-1657898155731
user_list这个文件还会受限制与ftpusers这个文件。即这个文件即便添加了root用户可以登录,但是还是要看ftpusers这个文件中是否有root用户。
命令行访问ftp服务
image-1657898465626
看上面的图有一个弊端。就是不管什么用户登录都可以切换目录并且还可以切换到根。可想而知,极为不安全。

安全目录切换

配置文件加入chroot_local_user=yes //目录不可切换 ,no //允许切换 默认no 允许切换 ,
allow_writeable_chroot=yes //配合 chroo_local-user使用

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
**allow_writeable_chroot=YES**
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
tcp_wrappers=YES

image-1657899459258
测试下在用户家目录创建emporer.txt

[root@emporer ~]# cd /home/ftp_user2
[root@emporer ftp_user2]# touch emporer.txt
[root@emporer ftp_user2]# 

image-1657900591877
无法切换目录并且只能在当前用户的家目录。
命令行可以使用帮助:

ftp> help
Commands may be abbreviated.  Commands are:

!               debug           mdir            sendport        site
$               dir             mget            put              size
account         disconnect      mkdir           pwd             status
append          exit            mls             quit            struct
ascii           form            mode            quote           system
bell            get             modtime         recv            sunique
binary          glob            mput            reget           tenex
bye             hash            newer           rstatus         tick
case            help            nmap            rhelp           trace
cd              idle            nlist           rename          type
cdup            image           ntrans          reset           user
chmod           lcd             open            restart         umask
close           ls              prompt          rmdir           verbose
cr              macdef          passive         runique         ?
delete          mdelete         proxy           send

也可以定义白名单,黑名单切换目录。
定义那些用户不可切换目录,结合 chroot_local_user=yes , chroot_lsit_file=/etc/vsftpd/chroot_list文件中的用户是可以目录切换的,如果chroot_local_user=no , /etc/vsftpd/chroot_file文件中的人是被锁定的。如果为yes则反之。 前提Chroot_list_enable=yes ,/etc/vsftpd/chroot_list才有作用
写一个实例:
重点:黑白名单针对于/etc/vsftpd/chroot_file这个文件而言

白名单

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
allow_writeable_chroot=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
tcp_wrappers=YES

黑名单

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
allow_writeable_chroot=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
tcp_wrappers=YES

虚拟用户

https://www.cnblogs.com/relax1949/p/9210910.html

日志定义:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES //日志开启
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log //日志存放
xferlog_std_format=NO
allow_writeable_chroot=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
tcp_wrappers=YES

测试:client 下载一个文件日志输出。
image-1658070642721
image-1658070618195

实验:利用ftp服务器搭建自定义仓库

emporer服务端:
1,挂载光盘

[root@emporer vsftpd]# mount /dev/sr0  /var/ftp/pub/
mount: /dev/sr0 写保护,将以只读方式挂载

2,ftp允许匿名用户,ftp配置文件如下

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

client客户端
1,备份yum配置
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2,编辑自定义repo

[root@client yum.repos.d]# vim Base.repo
[base]
name=empore-ftp
baseurl=ftp://192.168.5.140/pub
gpgcheck=0
enable=1

测试:yum源是否可用
image-1658073994662

[root@client yum.repos.d]# yum repolist 
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
源标识                                                                                                           源名称                                                                                                               状态
base                                                                                                             empore-ftp                                                                                                           3,971
repolist: 3,971
[root@client yum.repos.d]# yum install vsftpd
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
正在解决依赖关系
--> 正在检查事务
---> 软件包 vsftpd.x86_64.0.3.0.2-22.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

===========================================================================================================================================================================================================================================
 Package                                                 架构                                                    版本                                                          源                                                     大小
===========================================================================================================================================================================================================================================
正在安装:
 vsftpd                                                  x86_64                                                  3.0.2-22.el7                                                  base                                                  169 k

事务概要
===========================================================================================================================================================================================================================================
安装  1 软件包

总下载量:169 k
安装大小:348 k
Is this ok [y/d/N]: y

完毕!

总结:

1,黑白名单配置,最好采用白名单策略,即userlist_enable=yes ,userlist_deny=no,便于管理,允许谁登录,就添加到/etc/vsftpd/user_lsit,这个文件中去。
2,其实不用创建用户,可以使用虚拟用户也可添加至用户列表。便于用户管理。但是上述我没写。链接放上。
3,用户权限设置,较为安全,可以定义用户只能在当前家目录中访问和读取。
4,可以配合自动上传和下载脚本,可以结合crontab,定时下载。
5,自定义仓库,挂载目录,即为默认匿名用户访问目录,挂载后面斜杠 /即为重要,因为这样就会导致repo文件中是否还需写下一级目录。
6,ftp也可以使用ssl加密更为安全,但是需要自定义证书,我觉得相对于现在不怎么用ftp了,如果有需要我在添加上去吧。
7,还有一个主被动模式,被动模式在防火墙开放规则时,如果采用被动模式。客户端向服务器的21端口发送命令连接,服务器端才会开放一个大于1024的端口给客户端数据链接,不好放行端口规则。主动模式相对于更好释放端口和开放防火墙规则,客户端向服务器的21端口发送命令连接,传输时,客户端会主动开放一个大于1024端口让服务器的20端口创建数据链接。即服务器端只需要开放20,21端口即可。相对服务器而言。写的有点绕。 pasv_enable=yes默认被动。 no主动

文章作者: emporer
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Emporer-Linux
linux ftp
喜欢就支持一下吧