某创业公司刚刚起步,随着业务量的增多,咨询和投诉的用户也越来越多,公司的客服部门由原来的2个增加到5个。客服部门平时需要处理大量的用户反馈,不管是邮件,还是QQ,还是电话,客服人员都会针对每一次的用户反馈做详细的记录 ,但是由于客观原因,客服人员没有成熟稳定的客户服务系统,所以希望运维部门能够提供一个可以通过浏览器查看并下载的方式来管理这些文档,并且随时跟踪客户的反馈情况。
FTP(File Transfer Protocol)是一种应用非常广泛并且古老的一个互联网文件传输协议。
lftp localhost:~> mirror remote local 下载整个目录到本地
lftp localhost:~> mirror -R local remote rename 上传整个目录到远程同时可以重命名
主动模式
被动模式
思考1:
FTP的主动模式好还是被动模式好?
了解配置文件: man 5 vsftpd.conf
[root@ftp-server ~]# grep -v ^# /etc/vsftpd/vsftpd.conf
anonymous_enable=YES 支持匿名用户访问
local_enable=YES 非匿名用户
write_enable=YES 写总开关
local_umask=022 反掩码 file:644 rw- r-- r-- dir:755
dirmessage_enable=YES 启用消息功能
xferlog_enable=YES 开启或启用xferlog日志
connect_from_port_20=YES 支持主动模式(默认被动模式)
xferlog_std_format=YES xferlog日志格式
listen=YES ftp服务独立模式下的监听
pam_service_name=vsftpd 指定认证文件
userlist_enable=YES 启用用户列表
tcp_wrappers=YES 支持tcp_wrappers功能
###任务解决方案
分析:
1. 搭建FTP服务
2. 通过修改配置文件完成服务搭建
步骤:
环境准备:
ftp-server:10.1.1.1 搭建ftp服务
client:10.1.1.2 测试验证
1.搭建FTP服务
[root@ftp-server ~]# rpm -ql vsftpd
/etc/rc.d/init.d/vsftpd 启动脚本
/etc/vsftpd ftp服务的配置文件主目录
/etc/vsftpd/ftpusers 用户列表文件【黑名单】
/etc/vsftpd/user_list 用户列表文件【白+黑】,默认黑名单
/etc/vsftpd/vsftpd.conf 主配置文件
/usr/sbin/vsftpd 程序本身,二进制的命令
/usr/share/man/man5/vsftpd.conf.5.gz man文档
/usr/share/man/man8/vsftpd.8.gz
/var/ftp 匿名用户的数据根目录
/var/ftp/pub 匿名用户的数据扩展目录
启动服务:
[root@ftp-server ~]# service vsftpd start
Starting vsftpd for vsftpd: [ OK ]
[root@ftp-server ~]# netstat -nltp|grep vsftpd
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 1442/vsftpd
2.通过修改配置文件完成服务的搭建
1)了解配置文件
man 5 vsftpd.conf
2)根据需求修改配置文件
测试匿名用户是否可以登录:
[root@client ~]# ftp 10.1.1.1
-bash: ftp: command not found
[root@client ~]# yum -y install ftp
[root@client ~]# ftp 10.1.1.1
Connected to 10.1.1.1 (10.1.1.1).
220 (vsFTPd 2.2.2)
Name (10.1.1.1:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (10,1,1,1,130,60).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Dec 28 09:44 file1
-rw-r--r-- 1 0 0 0 Dec 28 09:44 file2
-rw-r--r-- 1 0 0 0 Dec 28 09:44 file3
-rw-r--r-- 1 0 0 0 Dec 28 09:44 file4
-rw-r--r-- 1 0 0 0 Dec 28 09:44 file5
drwxr-xr-x 2 0 0 4096 Mar 01 2013 pub
226 Directory send OK.
ftp>
结论:默认匿名用户可以访问
需求1:禁止匿名用户登录
1)修改配置文件:
anonymous_enable=NO
2)重启服务:
[root@ftp-server ~]# service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
3)测试验证:
[root@client ~]# ftp 10.1.1.1
Connected to 10.1.1.1 (10.1.1.1).
220 (vsFTPd 2.2.2)
Name (10.1.1.1:root): ftp
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
需求2:kefu人员固定家目录
1.在ftp服务器上创建一个kefu普通用户
[root@ftp-server ~]# useradd kefu
[root@ftp-server ~]# echo 123|passwd --stdin kefu
Changing password for user kefu.
passwd: all authentication tokens updated successfully.
2.创建一个目录/data/kefu用来存放数据文件
[root@ftp-server ~]# mkdir /data/kefu -p
3.修改配置文件来指定本地用户的默认数据根目录
local_root=/data/kefu
4.重启服务
[root@ftp-server ~]# service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
5.客户端测试验证
Linux客户端:
[root@client ~]# ftp 10.1.1.1
Connected to 10.1.1.1 (10.1.1.1).
220 (vsFTPd 2.2.2)
Name (10.1.1.1:root): kefu
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/data/kefu"
ftp>
Windows客户端:
测试结果,可以下载文件,但是不能上传文件
分析:
1.确定ftp服务本身是否允许本地用户上传,查看配置文件local_enable=YES
2.确定本地用户数据根目录/data/kefu是否有权限让kefu用户去写
结论:
ftp服务本身允许写,但是数据目录权限不允许kefu用户写
解决:
[root@ftp-server ~]# setfacl -m u:kefu:rwx /data/kefu/
说明:如果客服部门人员很多,可以将所有人加入到一个组里,然后让组成员对/data/kefu目录可写
需求3:禁锢本地用户的默认数据根目录(在自己的家里面活动)
修改配置文件
chroot_local_user=YES
补充:关于禁锢用户的家目录选项
1. 禁锢所有人的家
chroot_local_user=YES
2. 禁锢大部分人,允许小部分人
chroot_local_user=YES
chroot_list_enable=YES 开启用户列表文件
chroot_list_file=/etc/vsftpd/chroot_list 指定用户列表文件
echo stu1 >> /etc/vsftpd/chroot_list
3. 允许大部分人,禁锢小部分人
chroot_local_user=NO
chroot_list_enable=YES 开启用户列表文件
chroot_list_file=/etc/vsftpd/chroot_list 指定用户列表文件
echo kefu >> /etc/vsftpd/chroot_list
FTP文件共享服务的搭建
lcd
get mget
put mput
!shell-commands
###补充扩展
ftpusers 黑名单
user_list 默认是黑名单(可以成为白名单)
[root@client ~]# ftp 10.1.1.1
Connected to 10.1.1.1 (10.1.1.1).
220 (vsFTPd 2.2.2)
Name (10.1.1.1:root): root
530 Permission denied.
Login failed.
ftp> exit
原因:root用户在黑名单里.ftpusers
[root@client ~]# ftp 10.1.1.1
Connected to 10.1.1.1 (10.1.1.1).
220 (vsFTPd 2.2.2)
Name (10.1.1.1:root): stu1
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
ftp>
原因:stu1用户在黑名单里。ftpuses
为什么两个用户的提示信息不一样?
原因:默认情况下user_list文件也是黑名单,如果在该文件里直接拒绝,不给输入密码的机会。
user_list要成为白名单,需要再配置文件里增加:
userlist_deny=NO
注意:如果user_list是白名单,那么必须在该文件里的用户才可以访问ftp服务。
总结:
支持tcp_wrappers
/etc/hosts.allow 允许
/etc/hosts.deny 拒绝
/etc/hosts.deny
vsftpd:all 全部拒绝
vsftpd:all EXCEPT 192.168.0.2 拒绝所有除了192.168.0.2
vsftpd:192.168.0.254 拒绝单个ip地址=hosts.allow文件里增加vsftpd:192.168.0.254:allow 允许192.168.0.254访问
vsftpd:192.168.0.0/255.255.255.0 拒绝某个网段
vsftpd:192.168.0.0/255.255.255.0 EXCEPT 192.168.0.254 拒绝某个网段,但是除了某个ip地址
注意:子网掩码不支持192.168.0.0/24这种写法
思考2: 如何判断一个服务是否支持tcp_wrappers?
1)./configure --enable-libwrap 表示支持tcp_wrappers访问控制
2)rpm安装
[root@ftp-server vsftpd]# ldd /usr/sbin/vsftpd |grep libwrap*
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f2956480000)
[root@ftp-server vsftpd]# ldd /usr/sbin/sshd |grep libwrap*
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f015ff29000)
示例:拒绝10.1.1.0/24和192.168.91.0/24网段的所有人访问,除了10.1.1.3服务器
vim /etc/hosts.deny
vsftpd:10.1.1.0/255.255.255.0,192.168.91.0/255.255.255.0 EXCEPT 10.1.1.3
准备环境:
主机1(server):FTP服务器 10.1.1.1
主机2(client):FTP客户端 10.1.1.2
1. 更改匿名用户的默认数据根目录
[root@ftp-server ~]# mkdir /anon/data -p
anon_root=/anon/data
2. 开启匿名用户上传的功能
anon_upload_enable=YES
anon_mkdir_write_enable=YES
3. 匿名用户创建上传文件的默认权限指定 anon_umask=022
测试验证:
[root@client tmp]# lftp 10.1.1.1
lftp 10.1.1.1:~> ls
ls: Login failed: 500 OOPS: vsftpd: refusing to run with writable anonymous root
原因:匿名用户的默认数据根目录权限给太大
解决方案:
1.取掉默认目录权限,再创建一个目录并且给o+w
2.修改配置文件将匿名用户的家往上写一层 anon_root=/anon
1.在服务端创建用户zhangsan
useradd -s /sbin/nologin zhangsan
echo 123|passwd --stdin zhangsan
2.禁锢张三的家目录
chroot_local_user=YES 禁锢所有人包含zhangsan
或者
chroot_local_user=NO 允许所有人跳转
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
echo zhangsan >> /etc/vsftpd/chroot_list 只禁锢张三
mkdir /local/data -p
local_root=/local/data
在客户端/tmp/zhangsan(自己名字)下面创建5个文件,叫file{1..5},通过客户端工具以匿名用户身份将/tmp/zhangsan整个以你名字命名的目录上传到FTP服务器的pub目录中;
lftp 10.1.1.1:/> mirror -R /tmp/zhangsan/ ./pub/
Total: 1 directory, 5 files, 0 symlinks
New: 5 files, 0 symlinks
lftp 10.1.1.1:/>
lftp localhost:~> mirror remote local 下载整个目录到本地
lftp localhost:~> mirror -R local remote rename 上传整个目录到远程同时可以重命名
lftp redhat@10.1.1.1:~> mirror 2018-12-30/ /tmp/zhangsan/aaa
Total: 1 directory, 1 file, 0 symlinks
New: 1 file, 0 symlinks
6 bytes transferred
将远程目录下载到本地并且重命名
vim /etc/hosts.allow
vsftpd:192.168.0.254:deny
或者
vim /etc/hoasts.deny
vsftpd:192.168.0.254
pasv_min_port=2000
pasv_max_port=2050
测试验证:
netstat -na|grep vsftpd
anon_max_rate=500000
max_clients=10
原文:https://blog.51cto.com/14625831/2548855