linux-ftp
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
开启服务:服务默认未开启并且没有随机启动
systemctl start vsftpd
systemctl enable vsftpd
默认开启21号端口
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
默认配置:
默认配置使用匿名用户登录,也可以添加虚拟用户,或者使用系统用户登录。使用系统用户时,ftp默认访问路径在当前用户的家目录,可添加配置"anon_root=数据路径。匿名用户时默认访问路径为/var/ftp/pub。pxe批量安装系统时就会使用这个路径并且把系统镜像放在此目录。
默认监听在ipv6下 。
客户端测试:匿名用户下默认用户名和密码都是anonymous
黑名单配置:
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这个文件中
浏览器测试
可以登录默认访问路径为用户的家目录
白名单配置
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浏览器测试即不可以登录。
添加一个ftp_user2到/etc/vsftpd/user_list下
useradd ftp_user2
echo “123456” |passwd --stdin ftp_user2
echo “ftp_user2” >> /etc/vsftpd/user_list
user_list这个文件还会受限制与ftpusers这个文件。即这个文件即便添加了root用户可以登录,但是还是要看ftpusers这个文件中是否有root用户。
命令行访问ftp服务
看上面的图有一个弊端。就是不管什么用户登录都可以切换目录并且还可以切换到根。可想而知,极为不安全。
安全目录切换
配置文件加入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
测试下在用户家目录创建emporer.txt
[root@emporer ~]# cd /home/ftp_user2
[root@emporer ftp_user2]# touch emporer.txt
[root@emporer ftp_user2]#
无法切换目录并且只能在当前用户的家目录。
命令行可以使用帮助:
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 下载一个文件日志输出。
实验:利用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源是否可用
[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主动