澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

澳门新萄京官方网站:上传下载文件,网络文件

2019-06-16 作者:澳门新萄京官方网站   |   浏览(84)

 

- 主要学习内容

  • FTP服务 
  • NFS服务
  • SAMBA服务

网络文件共享

ftp

ftp  文件传输协议 跨平台 上传下载文件

介绍:文件传输协议FTP

一.文件传输协议(ftp)

  • File Transfer Protocol 早期的三个应用级协议之一
  • 基于C/S结构
  • 双通道协议:数据和命令连接
  • 数据传输格式:二进制(默认)

(1) FTP的连接模式
客户端和服务器端之间由双套接字通道进行连接,其中第一条链接通道是命令连接通道用来传输指令,并且服务器端口是固定的,端口号21,客户端端口是随机的
第二条通道是数据连接通道,用来实现数据的传输,数据端口是随机的
数据的端口是通过命令连接通道与客户端进行协商,确定出来的端口号

端口计算如图:

澳门新萄京官方网站 1

image.png

澳门新萄京官方网站 2

image.png

(2)FTP的两种模式

被动模式: 客户端主动连接服务器
客户端向服务器端建立命令连接通道,此时客户端打开一个随机端口,服务器端打开21tcp端口
数据端:客户端向数据端建立数据连接通道,数据端通过命令连接通道和客户端协商,为数据端口生成一个随机端口
主动模式:
命令连接方式不变
数据端主动向客户端发送连接请求,建立一个数据通道,并且端口为固定端口20
主动模式与被动模式的切换方式

澳门新萄京官方网站 3

image.png

澳门新萄京官方网站 4

image.png

澳门新萄京官方网站 5

image.png

本章内容

FTP服务
NFS服务
SAMBA服务

安装包:vsftpd-2.2.2-11.el6.x86_64.rpm 服务端

vsftpd 工具:非常安全的文件传输协议;默认的命令端口21号,数据端口20(默认在主动模式下),vsftpd后台进程,ftp用户来管理。

两种模式:服务器角度

主动(PORT style):服务器主动连接

命令(控制):客户端:随机port --- 服务器:tcp21

数据:客户端:随机port ---服务器:tcp20

被动(PASV style):客户端主动连接

命令(控制):客户端:随机port --- 服务器:tcp21

数据:客户端:随机port ---服务器:随机port

二.ftp软件介绍

  • FTP服务器: Wu-ftpd,Proftpd,Pureftpd,ServU,IIS vsftpd:Very Secure FTP Daemon,CentOS默认FTP服务器 高速,稳定,下载速度是WU-FTP的两倍 ftp,redhat.com数据:单机最多可支持15000个并发 
  • 客户端软件: ftp,lftp,lftpget,wget,curl
    ftp -A ftpserver port -A主动模式 –p 被动模式
    lftp –u username ftpserver
    lftp username@ftpserver
    lftpget ftp://ftpserver/pub/file
    gftp: GUI centos5 最新版2.0.19 (11/30/2008)
    filezilla,CuteFtp,FlashFXP,LeapFtp
    IE ftp://username:password@ftpserver
  • 状态码:
    1XX:信息
    125:数据连接打开
    2XX:成功类状态 200:命令OK 230:登录成功
    3XX:补充类 331:用户名OK
    4XX:客户端错误 425:不能打开数据连接
    5XX:服务器错误 530:不能登录 
    用户认证:
    匿名用户:ftp,anonymous,对应Linux用户ftp
    系统用户:Linux用户,用户/etc/passwd,密码/etc/shadow
    虚拟用户:特定服务的专用用户,独立的用户/密码文件 nsswitch:network service switch名称解析框架
    pam:pluggable authentication module 用户认证
    /lib64/security /etc/pam.d/ /etc/pam.conf

DAS、NAS、SAN(文件)

DAS:开放系统的直连式存储(Direct-Attached Storage)
磁盘连接到本机的电脑上,应用程序访问磁盘空间的数据时,直接通过本机的文件系统去访问
直连式存储与服务器主机之间的连接通道通常采用SCSI连接,随着服务器CPU的处理能力越来越强,存储硬盘空间越来越大,阵列的硬盘数量越来越多,SCSI通道将会成为IO瓶颈;服务器主机SCSI ID资源有限,能够建立的SCSI通道连接有限。

NAS:(Network Attached Storage:网络附属存储)按字面简单说就是连接在网络上,具备资料存储功能的装置,因此也称为“网络存储器”(数据由远端数据存储服务器的文件系统进行管理,本地的服务器主机只具有访问数据的权限)。它是一种专用数据存储服务器。它以数据为中心,将存储设备与服务器彻底分离,集中管理数据,从而释放带宽、提高性能、降低总拥有成本、保护投资。其成本远远低于使用服务器存储,而效率却远远高于后者。

SAN:存储区域网络(Storage Area Network)采用网状通道(Fibre Channel ,简称FC,区别与Fiber Channel光纤通道)技术,通过FC交换机连接存储阵列和服务器主机(存储区域网络只提供存储空间,本地的服务器主机把网络网络存储作为块设备映射到自己的主机上,利用本机的文件系统管理数据。),建立专用于数据存储的区域网络。SAN经过十多年历史的发展,已经相当成熟,成为业界的事实标准(但各个厂商的光纤交换技术不完全相同,其服务器和SAN存储有兼容性的要求)。
澳门新萄京官方网站 6

lftp-4.0.9-1.el6.x86_64.rpm 客户端

# rpm -qi vsftpd-2.0.5-16.el5

FTP软件

vsftpd服务

(1)由vsftpd包提供 
不再由xinetd管理 
用户认证配置文件:/etc/pam.d/vsftpd
服务脚本: /usr/lib/systemd/system/vsftpd.service /etc/rc.d/init.d/vsftpd 
配置文件:/etc/vsftpd/vsftpd.conf man 5 vsftpd.conf
格式:option=value
注意:=前后不要有空格 
匿名用户(映射为系统用户ftp )共享文件位置:/var/ftp 
系统用户共享文件位置:用户家目录 
虚拟用户共享文件位置:为其映射的系统用户的家目录
(2)相关服务配置

  • 命令端口
    listen_port=21——该端口为默认设置,也可以手动添加到配置文件中
  • 主动模式端口
    connect_from_port_20=YES
    ftp_data_port=2020——修改新的主动模式端口
    vim /etc/vsftp/vsftp.conf

    澳门新萄京官方网站 7

    image.png

    重启服务systemctl restart vsftpd

    澳门新萄京官方网站 8

    image.png

    澳门新萄京官方网站 9

    image.png

  • 被动模式端口范围
    在linux客户端默认使用被动模式
    windows客户端使用主动模式
    pasv_min_port=6000
    pasv_max_port=6010
    手动加入配置文件中

  • 使用当地时间
    use_localtime=YES 使用当地时间(默认时间为NO,使用GMT时间)
    如果是本地时间,不要改变,或改为NO
    如果是别的时区,要改为YES
  • 有关匿名用户的设置

    澳门新萄京官方网站 10

    image.png

    no_anon_password=YES

    澳门新萄京官方网站 11

    image.png

  • anon_upload_enable=YES——去掉注释生效
    注意:匿名账号不能有写权限,如果有写权限,则无法登录
    mkdir /var/ftp/upload——创建一个子目录
    setfacl -m u:ftp:rwx /var/ftp/upload

    澳门新萄京官方网站 12

    image.png

    去掉注释后此时可以进行上传

  • anon_mkdir_write_enable=YES——去掉注释可以创建子目录或是文件

    澳门新萄京官方网站 13

    image.png

  • anon_world_readable_only ——默认是yes,不需要写入,代表只有所有人都有读权限才可以下载
    如果在/var/ftp/upload中,并不是所有人都有读权限的话,无法进行下载

  • anon_other_write_enable=YES 可删除和修改上传的文件
    将上述内容写入配置文件中,不写默认是无法删除和修改上传的文件

    澳门新萄京官方网站 14

    image.png

    写入配置文件后,重启服务即可生效

    澳门新萄京官方网站 15

    image.png

    澳门新萄京官方网站 16

    image.png

  • anon_umask=077 指定匿名上传umask
    将umask值改为022就可以实现匿名上传和下载功能——文件权限为644

  • 指定上传文件的默认的所有者和权限
    chown_uploads=YES(默认NO)
    chown_username=who ——修改所有者
    chown_upload_mode=0644——写入配置文件中

    澳门新萄京官方网站 17

    澳门新萄京官方网站 18

    image.png

    澳门新萄京官方网站 19

    image.png

(3)linux系统用户设置
在默认情况下是可以以系统用户的身份进行进行登录
即使将系统用户的shell类型改变依然可以进行登录

  • guest_enable=YES——所有系统用户都映射到guest中,并且和guest_username=who配合使用,一起生效
    这样所有系统用户都被映射成who的身份
    注意权限问题,要去掉who的家目录的写权限 chmod 555 /home/who,这样做可以使其他用户的权限受到限制,使系统更安全

    澳门新萄京官方网站 20

    image.png

    设置映射后效果

    澳门新萄京官方网站 21

    image.png

    澳门新萄京官方网站 22

    image.png

    澳门新萄京官方网站 23

    image.png

  • local_enable=YES——改为no后linux系统用户无法登录

  • wirte_enable=YES——改为no后也无法上传文件
  • local_root=/app—指定非匿名用户登录时所在的家目录

    澳门新萄京官方网站 24

    image.png

  • chroot_local_user=YES——禁锢所有系统用户在家目录中

    澳门新萄京官方网站 25

    image.png

    chmod u-w /home/zhangnan

    澳门新萄京官方网站 26

    image.png

    澳门新萄京官方网站 27

    image.png

  • chroot_list_enable=YES

  • chroot_list_file=/etc/vsftpd/chroot_list
    以上两个命令实现对特定用户的禁锢
    mkdir /etc/vsftpd/chroot_list——在该文件中加入要禁锢的系统用户
    chroot_list_enable=YES——如果yes改为no,则加入列表的用户会被禁锢,如果是yes,则加入的用户为白名单不会被禁锢

(4)有关ftp的日志设置

  • wu-ftp日志:默认启用
    xferlog_enable=YES (默认)启用记录上传下载日志
    xferlog_std_format=YES (默认)使用wu-ftp日志格式
    xferlog_file=/var/log/xferlog (默认)可自动生成 
    vsftpd日志:默认不启用
    dual_log_enable=YES 使用vsftpd日志格式,默认不启用
    vsftpd_log_file=/var/log/vsftpd.log(默认)可自动生成

(5)登录提示信息

ftpd_banner=“welcome to upload server"

澳门新萄京官方网站 28

image.png

banner_file=/etc/vsftpd/ftpbanner.txt 优先上面项生效 ——将登录信息写入该文件中
cp /etc/issue /etc/vsftpd/ftp.txt

澳门新萄京官方网站 29

image.png


目录访问提示信息 dirmessage_enable=YES (默认)
cd /var/ftp/pub

mkdir .message
echo 'profile ok ' > .message——为了效果明显可以加入颜色来显示
vim .message
ctrl v[[35m 'profile ok'ctrl v[[0m——进入vim编辑模式后,执行ctrl v[的命令
message_file=.message(默认)
信息存放在指定目录下.messag

澳门新萄京官方网站 30

image.png

(6)使用pam完成用户认证

使用pam(Pluggable Authentication Modules)完成用户认证
pam_service_name=vsftpd
pam配置文件:/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers 默认文件中用户拒绝登录

澳门新萄京官方网站 31

image.png

如果在/etc/pam.d/vsftpd将deny改为allow,那么在名单中的用户为可登陆的,不在名单中的为不可登陆的

澳门新萄京官方网站 32

image.png


是否启用控制用户登录的列表文件
userlist_enable=YES 默认有此设置
userlist_deny=YES(默认值)黑名单,不提示口令,NO为白名单
userlist_file=/etc/vsftpd/users_list 此为默认值

澳门新萄京官方网站 33

image.png

(7) 配置FTP服务以非独立服务方运行
listen=NO,默认为独立方式

 cat  /etc/xinetd.d/vsftpd 
service ftp 
{ 
flags           = REUSE 
socket_type     = stream 
wait            = no 
user            = root 
server          = /usr/sbin/vsftpd
log_on_failure   = USERID 
disable         = no 

重启vsftpd服务后 service xinetd start 实现非独立控制

文件传输协议(FTP)

File Transfer Protocol 早期的三个应用级协议之一
http协议,ftp协议,邮件协议(smtp,pop)最早的三个应用级协议

基于C/S结构

FTP服务与客户端连接采用双通道连接协议,一个通道负责传输指令连接以及协商数据传输的随机端口,一个通道负责传输数据连接
数据传输格式:二进制(默认)和文本 (asicc),以文本格式传输数据时linux的文本格式与windows文本格式存在差异,数据传输时系统会做自动转换造成数据破坏。建议使用二进制(binary)形式传输文件。

两种模式:主动与被动都是在服务器数据传输的角度来定义的,FTP服务的数据传输可以有两种模式,主动与被动模式。
主动模式是指服务器固定的数据传输tcp20端口主动去连接客户端,客户端的数据连接端口为随机端口,服务器与客户端会事先在命令传输通道协商好该随机端口的端口号。主动连接模式下往往会因为客户端有防火墙而连接失败。

一般情况下,FTP服务的数据传输通道都采用被动连接模式。被动模式是指在数据传输通道中客户端向FTP服务器发起连接请求,而FTP服务端一般会设置企业级的防火墙,该防火墙具有数据的跟踪功能,FTP服务器的防火墙会记录客户端的与服务端在命令传输通道协商出的数据传输通道端口,从而设置防火墙策略开放该端口的连接。

主动(PORT style):对于数据端口来说服务器主动连接客户端,通过命令端口协商出来客户端的随机数据端口,服务器使用固定的tcp20数据端口去连接客户端的随机数据端口。
命令(控制):客户端:随机port --->服务器:tcp21
数据:客户端:随机port 1 <---服务器:tcp20

被动(PASV style):客户端连接服务器的固定tcp21命令传输端口,协商出服务器数据端口的随机端口号,并使用客户端的随机端口去连接服务器的协商出来的数据随机端口。
命令(控制):客户端:随机port ---> 服务器:tcp21
数据:客户端:随机port 1 --->服务器:随机port

服务器被动模式数据端口示例:
227 Entering Passive Mode (192,168,175,138,224,59)
服务器数据端口为:224*256 59

一般情况下FTP服务器会兼容两种数据传输通道的连接模式,数据传输时究竟使用被动模式还是使用主动模式,往往取决与客户端。客户端在访问FTP服务器时,可以根据自身的情况选择使用被动模式还是主动模式去连接FTP服务器。在一般的FTP命令行客户端工具中都会由passive命令去控制主动被动模式连接开关。

FTP服务的实现使用主动模式还是被动模式,一般有客户端设置。

配置文件:/etc/vsftpd/vsftpd.conf

Summary    : vsftpd - Very Secure Ftp Daemon

FTP服务器:

Wu-ftpd,Proftpd,Pureftpd,ServU,IIS

vsftpd:Very Secure FTP Daemon,CentOS默认FTP服务器

高速,稳定,下载速度是WU-FTP的两倍

ftp.redhat.com数据:单机最多可支持15000个并发

三.实现基于文件验证的vsftpd虚拟用户

虚拟用户: 所有虚拟用户会统一映射为一个指定的系统帐号:
访问共享位 置,即为此系统帐号的家目录
各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控 制参数进行指定 
虚拟用户帐号的存储方式:
文件:编辑文本文件,此文件需要被编码为hash格式
奇数行为用户名,偶数行为密码
db_load -T -t hash -f vusers.txt vusers.db
关系型数据库中的表中:
实时查询数据库完成用户认证
mysql库:pam要依赖于pam-mysql /lib64/security/pam_mysql.so
/usr/share/doc/pam_mysql-0.7/README
实验步骤

1 还原配置文件 cp /etc/vsftpd/vsftp.conf.bak vsftpd.conf
2 创建用户数据库文件 
vim /etc/vsftpd/ftpvusers
ftp1
centos
ftp2
magedu
3 cd /etc/vsftpd
db_load -T -t hash -f ftpvusers  ftpvusers.db
chmod 600 ftpvusers.db
4创建用户和访问FTP目录 
useradd -d /var/ftpsite -s /sbin/nologin ftpvuser
chmod 555 /var/ftpsite
mkdir /var/ftpsite/upload
chown ftpvuser /var/ftpsite/upload

5创建pam配置文件
vim /etc/pam.d/vsftpd.vuser 
auth required pam_userdb.so db=/etc/vsftpd/ftpvusers
account required pam_userdb.so db=/etc/vsftpd/ftpvusers

6指定pam配置文件
vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd.vuser
guest_enable=YES
guest_username=ftpvuser
user_config_dir=/etc/vsftpd/ftpvusers.conf.d/

7
建立虚拟用户各自的配置文件
mkdir /etc/vsftpd/ftpvusers.conf.d/
cd /etc/vsftpd/ftpvusers.conf.d/

vim /etc/vsftpd/ftpvusers.conf.d/ftp1
anon_upload_enable=YES
anon_mkdir_write_enable=YES

vim  /etc/vsftpd/ftpvusers.conf.d/ftp2
local_root=/app/ftp2
anon_upload_enable=YES
anon_mkdir_write_enable=YES

8
 准备ftp2的目录
mkdir -p /app/ftp2/upload
chown ftpvuser /app/ftp2/upload

9
 测试

FTP软件介绍

FTP服务器:
Wu-ftpd,Proftpd,Pureftpd,ServU,IIS
vsftpd:Very Secure FTP Daemon,CentOS默认FTP服务器 高速,稳定,下载速度是WU-FTP的两倍 ftp,redhat.com数据:单机最多可支持15000个并发

客户端软件: ftp,lftp,lftpget,wget,curl
ftp -A ftpserver port -A主动模式 –p 被动模式
lftp –u username ftpserver
lftp username@ftpserver
lftpget ftp://ftpserver/pub/file
gftp: GUI centos5 最新版2.0.19 (11/30/2008)
filezilla(开源免费的linuxftp客户端软件,支持ssh协议),CuteFtp,FlashFXP,LeapFtp
IE ftp://username:password@ftpserver

端口:20 21

Description :

客户端软件:

ftp,lftp,lftpget,wget,curl

ftp -A ftpserver port -A主动模式 –p 被动模式

lftp –u username ftpserver

lftp username@ftpserver

lftpget ftp://ftpserver/pub/file

gftp: GUI centos5 最新版2.0.19 (11/30/2008)

filezilla,CuteFtp,FlashFXP,LeapFtp

IE ftp://username:password@ftpserver

四.实现基于MYSQL验证的VSFTP虚拟用户

1 首先准备配置环境,两台centos主机,一个作为ftp服务器,一个作为mysql服务器

2 在ftp服务器上。yum install mariadb-server vsftpd mariadb-devel pam-devel openssl-devel mariadb

3 (主机是centos7)编译安装pam_mysql 在ftp服务器上
tar xvf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1/
./configure --with-mysql=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security
ls /lib64/security/pam_mysql.so
make && make install

4 在mysql 服务器,准备用户和数据表
澳门新萄京官方网站:上传下载文件,网络文件共享服务。yum install mariadb-server
systemctl start mariadb
mysql

create database ftpdb;
create table ftpvusers (id int unsigned auto_increment primary key,username char(30),password char(48));
insert ftpvusers (username,password) values ('ftpuser1',password('centos')),('ftpuser2',password('centos'));
insert ftpvusers (username,password) values ('ftpuser2',password('centos')),('ftpuser2',password('centos'));
grant all on ftpdb.* to ftpuser@'192.168.25.107' identified by 'centos';
flush privileges;

5 在ftp服务器,创建PAM配置文件
vim /etc/pam.d/ftp.mysql
auth required pam_mysql.so user=ftpuser passwd=centos host=192.168.25.108 db=ftpdb table=ftpvusers usercolumn=username passwdcolumn=password crypt=2
account required pam_mysql.so user=ftpuser passwd=centos host=192.168.25.108 db=ftpdb table=ftpvusers usercolumn=username passwdcolumn=password crypt=2

6 修改vsftpd配置文件
vim /etc/vsftpd/vsftpd.conf
pam_service_name=ftp.mysql
guest_enable=YES
guest_username=ftpvuser
user_config_dir=/etc/vsftpd/vusers.conf.d/

7创建dir目录
mkdir /etc/vsftpd/vusers.conf.d/
vim /etc/vsftpd/vusers.conf.d/ftpuser1
anon_upload_enable=YES

vim /etc/vsftpd/vusers.conf.d/ftpuser2
local_root=/app/ftpsite2/
anon_upload_enable=YES

mkdir -pv /app/ftpsite2/upload
chown ftpvuser /app/ftpsite2/upload

FTP服务介绍

服务数据目录:/var/ftp

vsftpd is a Very Secure FTP daemon. It was written completely from

FTP状态码

状态码:

1XX:信息 125:数据连接打开
2XX:成功类状态 200:命令OK 230:登录成功
3XX:补充类 331:用户名OK
4XX:客户端错误 425:不能打开数据连接
5XX:服务器错误 530:不能登录

启动服务:service vsftpd restart

scratch.

状态码:

1XX:信息 125:数据连接打开

2XX:成功类状态 200:命令OK 230:登录成功

3XX:补充类 331:用户名OK

4XX:客户端错误 425:不能打开数据连接

5XX:服务器错误 530:不能登录

用户认证:

http服务访问服务时一般不用进行身份验证以匿名用户身份进行访问,但是ftp服务一般需要用户验证,当使用图形界面的浏览器去访问ftp服务时系统会自动进行用户认证,以ftp用户或者anonymous用户进行访问,与匿名用户概念相似。
匿名用户:ftp,anonymous,对应Linux用户ftp
系统用户:Linux用户,用户/etc/passwd,密码/etc/shadow
虚拟用户:特定服务的专用用户,独立的用户/密码文件
nsswitch:network service switch名称解析框架
pam:pluggable authentication module 用户认证
/lib64/security /etc/pam.d/ /etc/pam.conf

客户端:

主动模式:默认情况下,ftp服务是开放了21端口,用来接受控制命令,服务器用20端口去发送数据(连接客户端大于1024的随机端口)

用户认证

匿名用户:ftp,anonymous,对应Linux用户ftp

系统用户:Linux用户,用户/etc/passwd,密码/etc/shadow

虚拟用户:特定服务的专用用户,独立的用户/密码文件

nsswitch:network service switch名称解析框架

pam:pluggable authentication module 用户认证

/lib64/security /etc/pam.d/ /etc/pam.conf

vsftpd服务

[root@robin ~]# lftp 172.16.110.1 ls查看重新链接,可能是防火墙的原因

被动模式:ftp服务也是开放21端口,用来接受命令控制,进行数据传输时,客户端会告知服务端打开一个大于1024的端口,然后客户端去主动连接服务端随机打开的端口(默认是被动模式)

vsftpd服务:

用户认证配置文件:/etc/pam.d/vsftpd

服务脚本: /usr/lib/systemd/system/vsftpd.service

/etc/rc.d/init.d/vsftpd

配置文件:/etc/vsftpd/vsftpd.conf

vsftp相关文件

由vsftpd包提供

[root@CentOS7 ~]#rpm -qf `which vsftpd`
vsftpd-3.0.2-22.el7.x86_64

不再由xinetd管理
用户认证配置文件:/etc/pam.d/vsftpd

服务脚本:
/usr/lib/systemd/system/vsftpd.service
/etc/rc.d/init.d/vsftpd #服务名vsftpd

配置文件:/etc/vsftpd/vsftpd.conf
man 5 vsftpd.conf
格式:option=value(键值对形式)
注意:=前后不要有空格

匿名用户(映射为系统用户ftp )共享文件位置:/var/ftp
系统用户共享文件位置:用户家目录
虚拟用户共享文件位置:为其映射的系统用户的家目录

对于http服务来说系统会以apache用户身份运行服务,但是vsftpd服务运行的身份是root

lftp 172.16.110.1:~> get biji.txt

主动好还是被动好?

vsftpd服务配置

vsftpd服务配置

指定目录下载:

个人防火墙的默认一般只会拒绝进来的包,而不会拒绝你出去的包和你出去再回来的包。

命令端口

listen_port=21

端口配置

命令端口 listen_port=21

主动模式端口
connect_from_port_20=YES 主动模式端口为20
ftp_data_port=20 指定主动模式的端口

被动模式端口范围
定义被动模式端口范围在于当企业的防火墙不支持追踪模式的情况下, 通过定义有限的ftp服务的被动模式端口范围,便于防火墙设置访问限制策略。
linux客户端默认使用被动模式
windows 客户端默认使用主动模式
pasv_min_port=6000 0为随机分配
pasv_max_port=6010

lftp 172.16.110.1:~> lcd /tmp/

所以上面的主动模式是有可能被拒绝掉的,一般的使用方法是:使用被动模式,并固定服务端的随机端口范围,在服务端写防火墙来控制

主动模式端口

connect_from_port_20=YES 主动模式端口为20

ftp_data_port=20 (默认) 指定主动模式的端口

时间设置

使用当地时间
use_localtime=YES 使用当地时间(默认为NO,使用GMT)

lftp 172.16.110.1:/> get biji.txt

主动ftp对ftp服务器的管理有利,但对客户端的管理不利。因为是服务端主动与客户端去建立连接,可能会被客户端的防火墙把源来自服务器的包给阻塞掉

被动模式端口范围

linux 客户端默认使用被动模式

windows 客户端默认使用主动模式

pasv_min_port=6000 0为随机分配

pasv_max_port=6010

匿名用户

anonymous_enable=YES 支持匿名用户
no_anon_password=YES(默认NO) 匿名用户略过口令检查
anon_world_readable_only (默认YES)只能下载全部读的文件
anon_upload_enable=YES 匿名上传,注意:文件系统权限
anon_mkdir_write_enable=YES anon_other_write_enable=YES 可删除和修改上传的文件
anon_umask=077 指定匿名上传umask
指定上传文件的默认的所有者和权限
chown_uploads=YES(默认NO)
chown_username=wang
chown_upload_mode=0644

或者

被动ftp对ftp客户端的管理有利,但对服务端的管理不利。因为客户端主动与服务端去连,可能会被服务端的防火墙给阻塞掉

使用当地时间

use_localtime=YES 使用当地时间(默认为NO,使用GMT)

linux系统用户

guest_enable=YES 所有系统用户都映射成guest用户
guest_username=ftp 配合上面选项才生效,指定guest用户
local_enable=YES 是否允许linux用户登录
write_enable-YES 允许linux用户上传文件
local_umask=022 指定系统用户上传文件的默认权限
local_root=/ftproot 非匿名用户登录所在目录

lftp 172.16.110.1:/> get biji.txt -o /home/

折衷的方法就是使用被动模式,并指定一个连接过来的端口范围,可以针对这个范围的端口进行一个防火墙的设置。(到iptables课程会介绍)

匿名用户:配置

anonymous_enable=YES 支持匿名用户(默认)

no_anon_password=YES(默认NO) 匿名用户略过口令检查

anon_world_readable_only (默认YES)只能下载全部读的文件

anon_upload_enable=YES 匿名上传,注意:文件系统权限

anon_mkdir_write_enable=YES 匿名建目录

anon_umask=077 指定匿名上传文件的umask

anon_other_write_enable=YES 可删除和修改上传的文件

禁锢所有系统用户在家目录中

chroot_local_user=YES(默认NO,不禁锢)禁锢系统用户

或者

验证被动模式和主动模式:

指定上传文件的默认的所有者和权限

chown_uploads=YES(默认NO)

chown_username=wang

chown_upload_mode=0644

禁锢或不禁锢特定的系统用户在家目录中

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
当chroot_local_user=YES时,则chroot_list中用户不禁锢
当chroot_local_user=NO时,则chroot_list中用户禁锢

[root@robin ~]# wget ftp://172.16.110.1/biji.txt

默认被动模式:

Linux系统用户:配置(备注:用户根有写权限是不行的)

guest_enable=YES 所有系统用户都映射成guest用户

guest_username=ftp 配合上面选项才生效,指定guest用户

local_enable=YES 是否允许linux用户登录

write_enable=YES 允许linux用户上传文件

local_umask=022 指定系统用户上传文件的默认权限

local_root=/ftproot guest用户登录所在目录

wu-ftp日志:

默认启用
xferlog_enable=YES (默认)启用记录上传下载日志
xferlog_std_format=YES (默认)使用wu-ftp日志格式
xferlog_file=/var/log/xferlog (默认)可自动生成

下载目录

# ftp 192.168.1.128

禁锢所有系统用户在家目录中

chroot_local_user=YES(默认NO,不禁锢)禁锢系统用户

vsftpd日志:

默认不启用
dual_log_enable=YES 使用vsftpd日志格式,默认不启用
vsftpd_log_file=/var/log/vsftpd.log(默认)可自动生成

lftp 172.16.110.1:/> mirror software/

Connected to 192.168.1.128 (192.168.1.128).

禁锢或不禁锢特定的系统用户在家目录中,与上面设置功能相反

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

当chroot_local_user=YES时,则chroot_list中用户不禁锢

当chroot_local_user=NO时,则chroot_list中用户禁锢

登录提示信息

ftpd_banner=“welcome to ftp server"
banner_file=/etc/vsftpd/ftpbanner.txt 独立文件优先生效
文件加颜色:同时按ctrl、v、[ 键再加配色

[root@CentOS7 ~]#vim color
^[[32mThis is Green ^[[0m

上传文件

220 (vsFTPd 2.2.2)

wu-ftp日志:默认启用

xferlog_enable=YES (默认) 启用记录上传下载日志

xferlog_std_format=YES (默认) 使用wu-ftp日志格式

xferlog_file=/var/log/xferlog (默认)可自动生成

目录访问提示信息

dirmessage_enable=YES (默认)
message_file=.message(默认)信息存放在指定目录下.message

lftp 172.16.110.1:/> put /root/install.log

Name (192.168.1.128:root): ftp

vsftpd日志:默认不启用

dual_log_enable=YES 使用vsftpd日志格式,默认不启用

vsftpd_log_file=/var/log/vsftpd.log(默认)可自动生成

使用pam实现用户认证

主配置文件中定义了vsftpd服务调用了pam模块:
pam_service_name=vsftpd
pam配置文件:/etc/pam.d/vsftpd #设置pam策略

[root@CentOS7 ~]#vim /etc/pam.d/vsftpd 
#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth       required     pam_shells.so
auth       include      password-auth
account    include      password-auth
session    required     pam_loginuid.so
session    include      password-auth
#定义了基于用户身份的验证,在/etc/vsftpd/ftpuser文件中的用户拒绝访问

/etc/vsftpd/ftpusers 默认文件中用户拒绝登录

上传目录

331 Please specify the password.

登录提示信息

ftpd_banner=“welcome to mage ftp server"

banner_file=/etc/vsftpd/ftpbanner.txt 优先上面项生效

是否启用控制用户登录的列表文件

userlist_enable=YES 默认有此设置
userlist_deny=YES(默认值)黑名单,不提示口令,NO为白名单
userlist_file=/etc/vsftpd/users_list 此为默认值

lftp 172.16.110.1:/pub> mirror -R /boot/

Password:

目录访问提示信息

dirmessage_enable=YES (默认)

message_file=.message(默认) 信息存放在指定目录下.message

连接限制

max_clients=0 最大并发连接数
max_per_ip=0 每个IP同时发起的最大连接数

匿名模式

230 Login successful.

vsftpd指定用户身份运行

nopriv_user=nobody

上传文件 (还要对文件有写权限,777)

Remote system type is UNIX.

传输速率:字节/秒

anon_max_rate=0 匿名用户的最大传输速率
local_max_rate=0 本地用户的最大传输速率

anonymous_enable=yes

Using bi

连接时间:秒为单位

connect_timeout=60 主动模式数据连接超时时长
accept_timeout=60 被动模式数据连接超时时长
data_connection_timeout=300 数据连接无数据输超时时长
idle_session_timeout=60 无命令操作超时时长

          anon_upload_enable=yes 27 

          anon_mkdir_write_enable=yes 31 

          anon_umask=022 

优先以文本方式传输

ascii_upload_enable=YES
ascii_download_enable=YES

上传文件下载


非独立方式运行

更改主配置文件中监听方式:
listen=NO,FTP服务默认为独立方式
然后编辑xinetd服务脚本,可以参考其他非独立服务的脚本比如telnet服务复制一份稍加修改即可。

cat  /etc/xinetd.d/vsftpd 
service ftp 
{ 
    flags           = REUSE 
    socket_type     = stream 
    wait            = no 
    user            = root 
    server          = /usr/sbin/vsftpd #程序路径
    log_on_failure   = USERID 
    disable         = no 
}

anon_umask=022 (在添加此权限之前上传的文件都不刻意再下载,只有开启次权限后再上传的文件可以再下载)

nary mode to transfer files.

实现基于SSL的FTPS

查看是否支持SSL
ldd which vsftpd 查看到libssl.so

创建自签名证书
cd /etc/pki/tls/certs/
make vsftpd.pem openssl x509 -in vsftpd.pem -noout –text

配置vsftpd服务支持SSL:/etc/vsftpd/vsftpd.conf
ssl_enable=YES 启用SSL
allow_anon_ssl=NO 匿名不支持SSL
force_local_logins_ssl=YES 本地用户登录加密
force_local_data_ssl=YES 本地用户数据传输加密
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem #证书路径

用filezilla等工具测试,命令行界面下的ftp客户端工具比如lftp不支持加密模式访问vsftpd服务。

限速

另一个终端验证:

vsftpd虚拟用户概念

虚拟用户:
所有虚拟用户会统一映射为一个指定的系统帐号:访问共享位置,即为此系统帐号的家目录
各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定

虚拟用户帐号的存储方式:
1、文件:编辑文本文件,此文件需要被编码为hash
格式奇数行为用户名,偶数行为密码
db_load -T -t hash -f vusers.txt vusers.db #使用该工具将文本转化为hash格式

2、关系型数据库中的表中:
实时查询数据库完成用户认证
mysql库:pam要依赖于pam-mysql
/lib64/security/pam_mysql.so
/usr/share/doc/pam_mysql-0.7/README

anon_max_rate=20000

# netstat -nt|grep 21

实现基于文件验证的vsftpd虚拟用户

一、创建用户数据库文件
• vim /etc/vsftpd/vusers.txt
wang
wangpass
mage
magepass
• cd /etc/vsftpd/
• db_load -T -t hash -f vusers.txt vusers.db
• chmod 600 vusers.db
二、创建用户和访问FTP目录
• useradd -d /var/ftproot -s /sbin/nologin vuser
• chmod rx /var/ftproot/
#虚拟用户不能访问磁盘数据,所以需要创建一个系统用户去代替虚拟用户去访问磁盘数据

• centos7 还需要执行以下操作:
• chmod -w /var/ftproot/
• mkdir /var/ftproot/upload
• setfacl -m u:vuser:rwx /var/ftproot/upload
三、创建pam配置文件
• vim /etc/pam.d/vsftpd.db
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
四、指定pam配置文件
• vim /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd.db
五、SELinux设置:
禁用SELinux 或者 setsebool -P ftpd_full_access 1
六、虚拟用户建立独立的配置文件
mdkir /etc/vsftpd/vusers.d/ 创建配置文件存放的路径
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers.d/
cd /etc/vsftpd/vusers.d/ 进入此目录
允许wang用户可读写,其它用户只读
vim wang 创建各用户自已的配置文件
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
vim mage 创建各用户自已的配置文件
local_root=/ftproot 登录目录改变至指定的目录

修改匿名帐号登录位置

tcp        0      0 192.168.1.128:40095        192.168.1.128:21            ESTABLISHED  客户端连接server端21号端口

实现基于MYSQL验证的vsftpd虚拟用户

说明:本实验在两台CentOS主机上实现,一台做为FTP服务 器,一台做数据库服务器

一、安装所需要包和包组:
在数据库服务器上安装包:
• Centos7:在数据库服务器上安装
yum –y install mariadb-server mariadb
systemctl start mariadb.service
systemctl enable mariadb
• Centos6:在数据库服务器上安装
yum –y install mysql-server

在FTP服务器上安装vsftpd和pam_mysql包
centos6:pam_mysql由epel6的源中提供
yum install vsftpd pam_mysql

centos7:无对应rpm包,需手动编译安装
yum -y groupinstall "Development Tools"
yum -y install mariadb-devel pam-devel vsftpd
下载pam_mysql-0.7RC1.tar.gz ftp://172.16.0.1/pub/Sources/sources/pam/
tar xvf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1/
./configure --with-mysql=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security
make
make install

二、在数据库服务器上创建虚拟用户账号
1.建立存储虚拟用户数据库和连接的数据库用户
mysql> CREATE DATABASE vsftpd;
mysql> SHOW DATABASES;

ftp服务和mysql不在同一主机:
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'172.16.%.%' IDENTIFIED BY '0315';

ftp服务和mysql在同一主机:
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@localhost IDENTIFIED BY '0315';
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'127.0.0.1' IDENTIFIED BY '0315';
mysql> FLUSH PRIVILEGES;

2.准备相关表
mysql> USE vsftpd;
Mysql> SHOW TABLES;
mysql> CREATE TABLE users ( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, name CHAR(50) BINARY NOT NULL, password CHAR(48) BINARY NOT NULL );
mysql>DESC users;
测试连接 mysql -uvsftpd -h 172.16.200.200 -pmagedu
mysql> SHOW DATABASES;

3.添加虚拟用户
根据需要添加所需要的用户,为了安全应该使用PASSWORD 函数加密其密码后存储
mysql>DESC users;
mysql> INSERT INTO users(name,password) values(‘wang',password('0315'));
mysql> INSERT INTO users(name,password) values(‘mage',password('0315'));
mysql> SELECT * FROM users;

三、在FTP服务器上配置vsftpd服务
1.在FTP服务器上建立pam认证所需文件
vi /etc/pam.d/vsftpd.mysql 添加如下两行
auth required pam_mysql.so user=vsftpd passwd=magedu host=mysqlserver db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=magedu host=mysqlserver db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
注意:参考README文档,选择正确的加密方式
crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示 使用mysql password()函数加密,3表示md5加密,4表示 sha1加密
配置字段说明:
• auth 表示认证
• account 验证账号密码正常使用
• required 表示认证要通过
• pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路 径而言,也可以写绝对路径;后面为给此模块传递的参数
• user=vsftpd为登录mysql的用户
• passwd=magedu 登录mysql的的密码
• host=mysqlserver mysql服务器的主机名或ip地址
• db=vsftpd 指定连接msyql的数据库名称
• table=users 指定连接数据库中的表名
• usercolumn=name 当做用户名的字段
• passwdcolumn=password 当做用户名字段的密码
• crypt=2 密码的加密方式为mysql password()函数加密

2.建立相应用户和修改vsftpd配置文件,使其适应mysql认证
建立虚拟用户映射的系统用户及对应的目录
useradd -s /sbin/nologin -d /var/ftproot vuser
chmod 555 /var/ftproot centos7 需除去ftp根目录的写权限
mkdir /var/ftproot/{upload,pub}
setfacl –m u:vuser:rwx /var/ftproot/upload
确保/etc/vsftpd.conf中已经启用了以下选项
anonymous_enable=YES
添加下面两项
guest_enable=YES #所有系统用户都映射成guest用户
guest_username=vuser #指定gust用户为vuser
修改下面一项,原系统用户无法登录
pam_service_name=vsftpd.mysql

四、启动vsftpd服务
service vsftpd start;systemctl start vsftpd
chkconfig vsftpd on;systemctl enable vsftpd
查看端口开启情况 netstat -tnlp |grep :21

五、Selinux相关设置:在FTP服务器上执行
• restorecon -R /lib64/security
• setsebool -P ftpd_connect_db 1
• setsebool -P ftp_home_dir 1
• chcon -R -t public_content_rw_t /var/ftproot/

六、测试:利用FTP客户端工具,以虚拟用户登录验证结果
• tail /var/log/secure

七、在FTP服务器上配置虚拟用户具有不同的访问权限
vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在 vsftpd.conf指定其路径及名称即可
1、配置vsftpd为虚拟用户使用配置文件目录
vim /etc/vsftpd/vsftpd.conf
添加如下选项
user_config_dir=/etc/vsftpd/vusers_config

2、创建所需要目录,并为虚拟用户提供配置文件
mkdir /etc/vsftpd/vusers_config/
cd /etc/vsftpd/vusers_config/
touch wang mage

3、配置虚拟用户的访问权限
虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。如果需要让用户wang具有上传文件的权限,可以修改/etc/vsftpd/vusers_config/wang文件,在里面添加如下 选项并设置为YES即可,只读则设为NO
注意:需确保对应的映射用户对于文件系统有写权限 anon_upload_enable={YES|NO} anon_mkdir_write_enable={YES|NO} anon_other_write_enable={YES|NO}

方法:1.修改ftp用户家目录(家目录权限必须是755)

tcp        0      0 192.168.1.128:21            192.168.1.128:40095        ESTABLISHED  客户端连接server端打开的随机端口40095准备传输数据

FTP工具

Axel:网络客户端工具
下载安装axel
ftp://172.16.0.1/pub/Sources/6.x86_64/axel/axel2.4-1.el6.rf.x86_64.rpm

axel -n 3 -o /root
ftp://172.16.0.1/pub/ISOs/CentOS-7-x86_64Everything-1511.iso

ftp:x:14:50:FTP User:/tmp/ftp:/sbin/nologin

# netstat -nt|grep 20 什么都没有

方法2:

-l  监听状态 LISTENING(listening)|ESTABLISHED(established)

[root@robin ftp]# vim /etc/vsftpd/vsftpd.conf

说明:

anon_root=/tmp/ftp

LISTENING:时表示处于侦听状态,就是说该端口是开放的,等待连接,但还没有被连接。就像你房子的门已经敞开的,但还没有人进来。

工作原理

ESTABLISHED:意思是已建立连接。表示两台机器正在通信。

主动模式

TIME_WAIT:意思是结束了这次连接。说明21端口曾经有过访问,但访问结束了

C S

主动模式:

1024 n---------->21

ftp> help passive

1024 m- -------->21

passive  enter passive transfer mode

1024 m<------- --20

ftp> passive  关闭被动模式

主动方式的FTP是这样的:客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口,也就是21端口。然后客户端开始监听端口N 1,并发送FTP命令"port N 1"到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N 1)。

Passive mode off.

针对FTP服务器前面的防火墙来说,必须允许以下通讯才能支持主动方式FTP:

ftp> ls

  1. 任何端口到FTP服务器的21端口 (客户端初始化的连接 S<-C)

  2. FTP服务器的21端口到大于1024的端口(服务器响应客户端的控制端口 S->C)

200 PORT command successful. Consider using PASV.

3. FTP服务器的20端口到大于1024的端口(服务器端初始化数据连接到客户端的数据端口 S->C)

150 Here comes the directory listing.

  1. 大于1024端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口 S<-C)

drwxr-xr-x    3 0        0            4096 Aug 07  2015 pub

总结:

226 Directory send OK.

命令连接:客户端>1024端口-> 服务器21端口

另一个终端验证:

数据连接:客户端>1024端口<- 服务器20端口

# netstat -nt|grep 20    server端的20号端口主动连接客户端的38054端口

端口模式

tcp        0      0 192.168.1.128:20            192.168.1.128:38054        TIME_WAIT

C S

FTP客户端工具:

1024 n--------->21

linux下:lftp(默认匿名用户)|ftp|sftp

<-----------------1024 m

windows:firefox(浏览器)|Filezila

1024 x--------->1024 m

思路:

为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。

1、防火墙selinux关闭

在被动方式FTP中,命令连接和数据连接都由客户端,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口(N > 1024和N 1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交 PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N 1到服务器的端口P的连接用来传送数据。

2、yum配置ok

对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:

3、查询需要安装的包|安装|查看软件列表

  1. 从任何端口到服务器的21端口 (客户端初始化的连接 S<-C)

  2. 服务器的21端口到任何大于1024的端口 (服务器响应到客户端的控制端口的连接 S->C)

  3. 从任何端口到服务器的大于1024端口 (入;客户端初始化数据连接到服务器指定的任意端口 S<-C)

4、了解配置文件

4. 服务器的大于1024端口到远程的大于1024的端口(出;服务器发送ACK响应和数据到客户端的数据端口 S->C)

5、根据需求通过修改配置文件来完成ftp服务的搭建

总结:

6、启动服务,开机自启动

命令连接:客户端>1024端口-> 服务器21端口

7、测试

数据连接:客户端>1024端口-> 服务器>1024端口

# rpm -qc vsftpd

客户端传输模式(客户端开启被动模式)

rpm -ql vsftpd

[root@robin tmp]# vim /etc/lftp.conf

/etc/logrotate.d/vsftpd        --日志轮循

set ftp:passive-mode off

/etc/pam.d/vsftpd       --认证模块

服务器关闭被动模式

/etc/rc.d/init.d/vsftpd       --启动脚本

[root@data1 ftp]# vim /etc/vsftpd/vsftpd.conf

/etc/vsftpd

pasv_enable=no

/etc/vsftpd/ftpusers          --用户列表<拒绝用户登录ftp>

用户验证登录(基于系统用户)

/etc/vsftpd/user_list          --用户列表<拒绝与允许>

[root@robin tmp]# useradd robin 此用户是在服务端

/etc/vsftpd/vsftpd.conf        --主配置文件

[root@robin tmp]# passwd robin

/etc/vsftpd/vsftpd_conf_migrate.sh

[root@robin tmp]# lftp -u robin,123 172.16.110.1 默认进入用户的家目录

/usr/sbin/vsftpd              --二进制命令

ftp用户将shell设置为:/sbin/nologin

/usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_HOSTS              --虚拟主机

当然你要保证自己能读写自己的目录,就要在配置文件vsftpd.conf里设置一下就可以读写了.

/usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_HOSTS/README

local_enable=yes

/usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_USERS              --虚拟用户

write_enable=yes

/usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_USERS/README

local_umask=022

/usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_USERS/README.configuration

限制本地用户切换目录

/usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_USERS/logins.txt

不限制此功能可以随意切换目录 ls,并在有权限的目录下上传文件(tmp)

/usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_USERS/vsftpd.conf

方法1:

/usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_USERS/vsftpd.pam

[root@robin tmp]# vim /etc/vsftpd/vsftpd.conf

/usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_USERS_2

chroot_local_user=YES 限制所有用户切换目录

/usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_USERS_2/README

设置本地用户登录目录(不要求目录权限,如果上传就需要写权限)

/usr/share/man/man5/vsftpd.conf.5.gz

local_root=/tmp/manager

/usr/share/man/man8/vsftpd.8.gz

限制本地用户速度

/var/ftp          ftp匿名用户的家目录  ftp://192.168.0.1/notes  == file:///var/ftp/noes

local_max_rate=200000

/var/ftp/pub      ftp扩展目录

限制用户使用ftp

1040  cp vsftpd.conf vsftpd.conf.bak

方法1:

1041  grep -v ^# vsftpd.conf

将不允许登录的用户写入该文件:/etc/vsftpd/ftpusers (执行命令时,显示连接)

1042  grep -v ^# vsftpd.conf |grep -v ^$

方法2:黑白名单

1043  grep -v ^# vsftpd.conf |grep -v ^$|tee vsftpd.conf

userlist_enable=YES

默认情况,配置文件不做修改

userlist_deny=YES

anon——代表匿名用户选项

名单文件:/etc/vsftpd/user_list 黑名单

local——代表本地用户 /etc/passwd文件里所存在的用户

userlist_enable=YES

# cat /etc/vsftpd/vsftpd.conf |grep -v '#'

userlist_deny=NO

anonymous_enable=YES  匿名用户可以访问

名单文件:/etc/vsftpd/user_list 白名单(名单以外的用户不可操作)

local_enable=YES  本地用户可以访问

虚拟用户

write_enable=YES  可写总开关

1.建立用户数据库

local_umask=022    默认权限

cat /etc/vsftpd/ftpuser.txt

test111 # 账户

pass111 # 密码

test222

pass222

2.转换文本文件为数据库文件

[root@robin ~]# rpm -qf $(which db_load)

db4-utils-4.7.25-17.el6.x86_64

[root@robin ~]# db_load -T -t hash -f /etc/vsftpd/ftpuser.txt /etc/vsftpd/vsftpd_login.db

[root@robin ~]# chmod 600 /etc/vsftpd/vsftpd_login.db

3.更改验证方式

[root@robin ~]# mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak

[root@robin ~]# vim /etc/pam.d/vsftpd 新建一个虚拟用户的pam文件

auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

4.建立系统帐号做为虚拟帐号的映射帐号

[root@robin ~]# useradd -d /home/vsftp virtual

[root@robin ~]# chmod 755 /home/vsftp

5.修改配置文件启用虚拟用户

[root@robin ~]# vim /etc/vsftpd/vsftpd.conf

guest_enable=YES # 开启虚拟用户功能

guest_username=virtual # 指定虚拟用户使用的系统用户

权限:

virtual_use_local_privs=YES 该选项为YES虚拟帐号权限和本地用户相同

virtual_use_local_privs=NO 该选项为NO虚拟帐号权限和匿名用户相同

给每个用户设置权限

[root@robin ~]# vim /etc/vsftpd/vsftpd.conf

virtual_use_local_privs=YES

user_config_dir=/etc/vsftpd/vsftp_user_conf

[root@robin ~]# mkdir /etc/vsftpd/vsftp_user_conf

[root@robin ~]# touch /etc/vsftpd/vsftp_user_conf/test111

[root@robin ~]# cat /etc/vsftpd/vsftp_user_conf/test111

write_enable=NO

local_max_rate=20000000

[root@robin ~]# touch /etc/vsftpd/vsftp_user_conf/test222

[root@robin ~]# cat /etc/vsftpd/vsftp_user_conf/test222

write_enable=YES

local_max_rate=1000000

登录后目录都是 /home/vsftp

可以在/etc/vsftpd/vsftp_user_conf/test111 中添加

local_root=/home/vsftp/test111

添加vsftp 用户的步骤

1.在/etc/vsftpd/ftpuser.txt中添加用户和密码

2.运行db_load命令将用户和密码加入数据库

3.在/home/vsftp 中新建文件夹与用户同名

4.在vsftpd_user_conf 中新建和用户同名的文件并加入local_root=/home/vsftp/name

=========================

  1. 实现虚拟路径

         将某个目录挂载到FTP服务器下供用户使用,这就叫做虚拟路径. 
    
         比如将gxl用户的目录挂载到FTP服务器中,供FTP服务器的用户使用,使用如下命令即可: 
    
     [[root@localhost](mailto:root@localhost) opt]#     mount --bind /home/gxl /var/ftp/pub #使用挂载命令 
    
     [[root@localhost](mailto:root@localhost) opt]#     ls /var/ftp/pub 
    
                 LumaQQ Screenshot.png 桌面 
    
  2. 打开vsFTPd的日志功能

         添加下面一行到vsftpd.conf文件中,一般情况下该文件中有这一行,只要把前面的注释符号#去掉即可,没有的话就添加,或者修改: 
    
             xferlog_file=/var/log/vsftpd.log 
    
  3. 限制链接数,以及每个IP最大的链接数

         修改配置文件中,例如vsftp最大支持链接数100个,每个IP能支持5个链接: 
    
             max_client=100 
    
             max_per=5 
    
  4. 限制传输速度

        修改配置文件中,例如让匿名用户和vsftd上的用户(即虚拟用户)都以80KB=1024*80=81920的速度下载 
    
            anon_max_rate=81920 
    
            local_max_rate=81920 
    
  5. 将用户(一般指虚拟用户)限制在自家目录

        修改配置文件中,这样用户就只能访问自己家的目录了: 
    
            chroot_local_user=yes 
    
        如果只想某些用户仅能访问自己的目录,其它用户不做这个限制,那么就需要在chroot_list文件(此文件一般是在/etc/vsftpd/中)中添加此用户. 
    
        编辑此文件,比如将test用户添加到此文件中,那么将其写入即可.一般的话,一个用户占一行. 
    

[root@localhost vsftpd]# cat chroot_list

                    test 
  1. 绑定某个IP到vsFTPd

        有时候要限制某些IP访问服务器,只允许某些IP访问,例如只允许192.168.0.33访问这个FTP,同样修改配置文件: 
    
            listen_address=192.168.0.33 
    

配置 vsftpd.conf

anonymous_enable=NO #禁止匿名

local_enable=YES #允许本地登录

write_enable=YES #允许写,如需上传,则必须

local_umask=027 #将上传文件的权限设置为:777-local_umask

anon_upload_enable=YES #允许虚拟用户和匿名用户上传

anon_other_write_enable=YES #允许虚拟用户和匿名用户修改文件名和删除文件

dirmessage_enable=YES

xferlog_enable=YES #打开日志记录

connect_from_port_20=YES

xferlog_file=/var/log/vsftpd.log #日志存放位置

xferlog_std_format=YES #标准日志格式

idle_session_timeout=600 #空闲连接超时

data_connection_timeout=120

ftpd_banner=Welcome to ChinaRise FTP service #欢迎信息

guest_enable=yes #允许虚拟用户

guest_username=vsftpdguest #虚拟用户使用的系统账号

virtual_use_local_privs=YES #虚拟用户拥有本地系统权限

chroot_local_user=NO

chroot_list_enable=YES

        #以上两行将虚拟用户限制在其目录下,不能访问其他目录,或者直接用 

chroot_local_user=YES

listen=yes #监听/被动模式

listen_port=21 #监听端口

chroot_list_file=/etc/vsftpd/vsftpd.chroot_list #虚拟用户名单保存在文件/etc/vsftpd/vsftpd.chroot_list 中

user_config_dir=/etc/vsftpd/vsftpd_user_conf #每个虚拟用户名的更加详细的培植保存在/etc/vsftpd/vsftpd_user_conf 中

                                                                                        虚拟用户其他设置 

在/etc/vsftpd/vsftpd.chroot_list 文件中写入允许登陆的虚拟用户名称,每行一个

在/etc/vsftpd/vsftpd_user_conf 文件夹中创建一个以虚拟用户用户名命名的文件,

写入:local_root = /var/FTP/子目录名

然后在/var/FTP下创建一个对应的目录即可

dirmessage_enable=YES  启用用户家目录里的.messages

xferlog_enable=YES    启用日志

connect_from_port_20=YES  支持主动模式(默认是被动模式)

xferlog_std_format=YES  日志格式

listen=YES  独立服务

pam_service_name=vsftpd  认证模块

userlist_enable=YES    启用用户列表

tcp_wrappers=YES      支持tcp_wrappers访问控制,类似防火墙

demo1:配置文件不做任何修改,启动服务

service vsftpd start

1、匿名用户可以下载文件

2、本地用户可以上传下载,并且可以删除

demo2:允许匿名用户上传文件,并且可以删除文件

anon_mkdir_write_enable=YES 创建文件

anon_upload_enable=YES  上传文件

anon_other_write_enable=YES 删除、重命名等功能

client:

lftp 10.1.1.1:/> put file1

put: Access failed: 553 Could not create file. (file1)

lftp 10.1.1.1:/> mkdir abc

mkdir: Access failed: 550 Create directory operation failed. (abc)

原因:server端目录的权限不够

解决:chmod o w /var/ftp

# lftp 10.1.1.1

lftp 10.1.1.1:~> ls

ls: Login failed: 500 OOPS: vsftpd: refusing to run with writable anonymous root

原因:匿名用户的默认数据根目录(/var/ftp)权限太大

解决:chmod o-w /var/ftp

终极解决:

chmod o w /var/ftp/pub

demo3:下载其他匿名用户的文件

anon_umask=022

file:644

dir:755

只要文件具有r的权限就可以下载

demo4:开启本地用户和匿名用户消息功能

anon:/var/ftp

local:/home/username

# echo "welcome to user1 home" >/home/user1/.message

# echo "welcome to anon home" > /var/ftp/.message

启用消息:banner_file

banner_file=/etc/vsftpd/banner

demo5:指定匿名用户上传文件的所有人

自己完成

demo6:禁锢本地用户的家,只能在自己的家中活动,不能cd

禁锢大部分,允许小部分:

chroot_local_user=YES  禁锢所有人不能跳转

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list  该文件没有,自己创建;允许小部分人可以跳转

echo user1 >> /etc/vsftpd/chroot_list

允许大部分,禁锢小部分:

# chroot_local_user=YES 关闭

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list  禁锢小部分人

echo user1 >> /etc/vsftpd/chroot_list

demo7:ftp自身的访问控制

/etc/vsftpd/ftpusers  拒绝列表

echo user1 >> ftpusers

Name (10.1.1.1:root): user1

331 Please specify the password.

Password:

530 Login incorrect.

Login failed.

/etc/vsftpd/user_list

1、如果userlist_deny=NO;只允许该文件里的用户登录访问

2、如果userlist_deny=YES;不允许该文件里的用户登录

# cat user_list

# vsftpd userlist

# If userlist_deny=NO, only allow users in this file

# If userlist_deny=YES (default), never allow users in this file, and

# do not even prompt for a password.

# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers

Name (10.1.1.1:root): user1

530 Permission denied.

Login failed.

ftp> user stu1

530 Permission denied.

Login failed.

如果ftpusers和user_list文件冲突,ftpusers优先

demo8:指定匿名用户和本地用户上传文件的目录

/var/ftp

/home/username

anon_root=/data/anon

local_root=/data/local

lftp和ftp工具区别:

lftp可以批量并且下载目录

mirror remote local  下载整个目录到本地

mirror -R local remote  rename 上传整个目录到远程同时可以重命名

其他访问控制:

max_clients:访问的最大链接数 默认是2000

max_per_ip:单个客户端最大连接数  默认50

local_max_rate:限制本地用户下载速率,默认没有限制

local_max_rate=1000 单位是字节 1k

tcp_wrappers:是一款访问控制工具,类似iptables,但是功能没有iptables强大,并且配置比较简单。

/etc/hosts.allow

/etc/hosts.deny

访问控制机制先去匹配/etc/hosts.allow,再去匹配/etc/hosts.deny;如果两个都没有,全都允许;如果两个都有,以hosts.allow优先

不是所有服务都支持。

1).configure --enable-libwrap  表示支持tcp_wrappers访问控制

2)rpm安装

判断服务是否支持?

# ldd /usr/sbin/sshd |grep libwrap

libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fc141877000)

vim /etc/hosts.deny

vsftpd:all ——全部拒绝

vsftpd:all  EXCEPT 192.168.0.2  拒绝所有除了192.168.0.2

等于

vim /etc/hosts.allow

vsftpd:all

vsftpd:192.168.0.2:deny

vsftpd:192.168.0.254  ——拒绝单个ip地址 等于在hosts.allow文件里增加vsftpd:192.168.0.254:deny

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这种写法

sshd,vsftpd:all

被动连接模式,控制服务器数据传输端口的范围

vim /etc/vsftpd/vsftpd.conf

在最后加上

pasv_enable=YES --这一句默认不加也可以

pasv_min_port=3000

pasv_max_port=3005 --最小端口范围和最大端口范围可以自定义

--然后使用ftp 登录后,输入ls使之有数据传输,netstat -nt去验证查看会发现端口一定会在3000到3005范围内

课堂练习:

搭建一个自己的ftp服务器,要求:

1、匿名用户可以上传下载文件,同时也可以下载其他人所上传的文件,并且所有匿名用户上传的文件都放在/anon/data目录下。

anon_upload_enable=YES

anon_umask=022

anon_root=/anon

mkdir /anon/data -p

2、创建一个本地用户zhangsan(自己名字),可以访问你的ftp服务器,但是不能登录ftp服务器的操作系统,并且只能在自己的家目录中活动。

useradd -s /sbin/nologin zhangsan

/home/zhangsan

#chroot_local_user=YES

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

或者

chroot_local_user=YES

echo zhangsan >> chroot_list

3、zhangsan(自己名字)用户可以上传下载文件,并且所有本地用户上传的文件都存放在/local/data.

local_root=/local/data

mkdir /local/data -p

4、在你的本地主机的/tmp/zhangsan(自己名字)下面创建5个文件,叫file{1..5},通过客户端工具以匿名用户身份将整个以你名字命名的目录上传到服务器172.16.13.74上

1017  mkdir /tmp/zhangsan

1018  touch /tmp/zhangsan/file{1..5}

1019  lftp 172.16.13.74

lftp 172.16.13.74:~> user zhangsan

Password:

lftp zhangsan@172.16.13.74:~> mirror -R /tmp/zhangsan/ ./lisi

5、使用客户端工具(除了浏览器)用本地用户stu1用户(密码123)下载172.16.13.74上的“2017-08-01”文件到你本地/tmp/zhangsan(自己名字)

lftp stu1@172.16.13.74:~> mirror 2017-08-01/ /tmp/zhangsan/

Total: 1 directory, 3 files, 0 symlinks

New: 3 files, 0 symlinks

6、不允许172.16.13.250访问你的ftp服务,但是只允许172.16.13.74访问。

/etc/hosts.deny

vsftpd:all  EXCEPT 172.16.13.74

作业:搭建一个ftp服务,要求如下:

1、只能在工作时间访问ftp服务 9:30到12:00 下午2:00到5:30

2、ftp服务的最大并发量为10,每个ip地址最大只能连接2次

3、登录失败2次直接断开连接

4、将ftp的日志保存到/var/log/ftp.log文件里,并按照以下方式轮转:

1>、保留5天的日志文件

2>、每天轮询一次

3>、以时间命名

4>、创建与原日志同名的新文件

service ftp

{

disable = no

socket_type        = stream

wait                = yes

user                = root

server              = /usr/sbin/vsftpd

instances          = 10

per_source = 2

log_on_success      = DURATION HOST USERID

access_times        = 9:30-12:00 14:00-17:30

log_type = FILE /var/log/ftp.log

}

问题:

# ftp 172.16.13.74

Connected to 172.16.13.74 (172.16.13.74).

421 Service not available, remote server has closed connection

原因:

wait = yes 表示该服务以单线成方式运行

This attribute determines if the  service  is  single-threaded  or

multi-threaded and whether or not xinetd accepts the connection or

the server program accepts the connection. If its  value  is  yes,

the  service is single-threaded; this means that xinetd will start

the server and then it will stop handling requests for the service

until the server dies and that the server software will accept the

connection. If the attribute value is no, the  service  is  multi-

threaded  and  xinetd  will keep handling new service requests and

xinetd will  accept  the  connection.  It  should  be  noted  that

udp/dgram  services  normally expect the value to be yes since udp

is not connection  oriented,  while  tcp/stream  servers  normally

expect the value to be no.

# lftp 172.16.13.74

lftp 172.16.13.74:~> ls

虚拟主机:

基于IP地址的虚拟主机

基于端口的虚拟主机

基于IP的虚拟主机

需求:

访问10.1.1.1 提供匿名用户下载功能,限速500kbps,匿名用户的家目录是/amy/ftp

访问172.16.13.74 提供用户[vip/123]上传下载文件,并且可以删除、修改、创建、只能在自己的家里活动功能,不限速

思路:

1、根据不同的去创建不同的配置文件

2、根据不同的ip地址去读取相应的配置文件

步骤:

1、配置两个IP地址

2、安装软件

3、根据需求搭建基于IP的虚拟主机

<1>生成虚拟主机各自的配置文件

1)提供匿名用户下载功能,限速500kbps,匿名用户的家目录是/amy/ftp

# cat vsftpd1.conf

anonymous_enable=YES

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_std_format=YES

listen=YES

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES

anon_root=/amy/ftp

anon_max_rate=500000

listen_address=10.1.1.1

/etc/vsftpd/vsftpd1.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=YES

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES

anon_max_rate=512000  限速字节

anon_root=/amy/ftp  指定默认家目录

listen_address=192.168.1.10  监听地址

2)提供用户[vip/123]上传下载文件,并且可以删除、修改、创建、只能在自己的家里活动功能

vsftpd2.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=YES

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

listen_address=192.168.1.11

<2> 创建相应的目录及用户

mkdir /amy/ftp/pub -p

useradd amy

echo 123|passwd --stdin amy

<3>启动服务

# netstat -tnlp|grep vsftpd

tcp        0      0 192.168.1.10:21            0.0.0.0:*                  LISTEN      3693/vsftpd

tcp        0      0 192.168.1.11:21            0.0.0.0:*                  LISTEN      3688/vsftpd

# ps -ef|grep vsftpd

root      3688    1  0 20:31 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd2.conf

root      3693    1  0 20:31 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

<4>测试验证

[root@node2 Desktop]# lftp 10.1.1.1

lftp 10.1.1.1:~> ls

lftp 10.1.1.1:/> ls

-rw-r--r--    1 0        0              4 Aug 01 09:11 test

lftp 10.1.1.1:/> get test

4 bytes transferred

lftp 10.1.1.1:/> exit

[root@node2 Desktop]# 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): user1

530 This FTP server is anonymous only.

Login failed.

# ftp 172.16.13.74

Connected to 172.16.13.74 (172.16.13.74).

220 (vsFTPd 2.2.2)

Name (172.16.13.74:root): ftp

331 Please specify the password.

Password:

530 Login incorrect.

Login failed.

ftp>

ftp>

ftp> user user1

331 Please specify the password.

Password:

230-welcome to user1 home

230 Login successful.

ftp>

ftp>

ftp> ls

227 Entering Passive Mode (172,16,13,74,94,115).

150 Here comes the directory listing.

drwxr-xr-x    2 516      516          4096 Aug 01 02:50 NEWB

drwxr-xr-x    2 516      516          4096 Aug 01 02:49 abc

226 Directory send OK.

ftp> pwd

257 "/"

# route add -net 10.1.1.0/24 dev eth0

基于端口的虚拟主机

需求:

访问172.16.13.74的21端口 提供匿名用户上传下载功能,并且最大连接数20,每个ip最大连接数为2

访问172.16.13.74的2121端口 提供用户 上传下载功能,默认数据目录为/amy/data,并且最大登录失败次数为2

步骤:

1、清空环境  ifconfig eth0:0 down

2、修改各自的配置文件

1)访问192.168.0.1的21端口 提供匿名用户上传下载功能,并且最大连接数20,每个ip最大连接数为2

# cat 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=YES

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES

anon_max_rate=512000

anon_root=/amy/ftp

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

max_clients=20

max_per_ip=2

listen_port=21

2)访问192.168.0.1的2121端口 提供用户 上传下载功能,默认数据目录为/amy/data,并且最大登录失败次数为2,

# cat vsftpd2.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=YES

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES

chroot_local_user=YES

listen_port=2121

max_login_fails=2

local_root=/amy/data

3)重启服务

4)测试验证

# netstat -nltp|grep vsftpd

tcp        0      0 0.0.0.0:21                  0.0.0.0:*                  LISTEN      9668/vsftpd

tcp        0      0 0.0.0.0:2121                0.0.0.0:*                  LISTEN      9673/vsftpd

虚拟用户:

yum -y remoce vsftpd

yum -y install vsftpd

less /usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_USERS/README.configuration

Step 1) Create the virtual users database.

1) 定义txt文档 奇数行定义用户名 偶数行为密码

# vim /etc/vsftpd/logins.txt

stu1

123

stu2

123

stu3

123

2) 将txt文件转换成db文件

# db_load -T -t hash -f /etc/vsftpd/logins.txt /etc/vsftpd/login.db

3) 修改权限

# chmod 600 /etc/vsftpd/login.db

Step 2) Create a PAM file which uses your new database.

1) 查找pam的认证用户的db文件

# find / -name pam_userdb.so

/lib64/security/pam_userdb.so

2) 新建pam文件来验证db文件 /etc/vsftpd/login.db

# vim /etc/pam.d/vsftpd

auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/login

account required /lib64/security/pam_userdb.so db=/etc/vsftpd/login

Step 3) Set up the location of the files for the virtual users.

[root@mor vsftpd]# useradd -d /home/ftpsite virtual

[root@mor vsftpd]# ll -d /home/ftpsite/

drwx------ 4 virtual virtual 4096 Jun  8 10:07 /home/ftpsite/

定义测试文件提供下载

cp /etc/hosts /home/ftpsite

chown virtual.virtual /home/ftpsite/hosts

Step 4) Create your vsftpd.conf config file.

vim /etc/vsftpd/vsftpd.conf

anonymous_enable=NO  禁止匿名用户访问

local_enable=YES  非匿名用户

write_enable=NO  写总开关

anon_upload_enable=NO  上传

anon_mkdir_write_enable=NO

anon_other_write_enable=NO

chroot_local_user=YES  禁锢自己的家里

guest_enable=YES  激活虚拟用户

guest_username=virtual  定义匿名用户

listen=YES

listen_port=10021 端口

anon_world_readable_only=NO  --可以查看到下载的文件<开启读写功能>

Step 5) Start up vsftpd.

service vsftpd start

Step 6) Test.

ftp 192.168.0.1

Connected to 192.168.0.1 (192.168.0.1).

220 (vsFTPd 2.2.2)

Name (192.168.0.1:root): a

331 Please specify the password.

Password: --123

230 Login successful.

本地用户和虚拟用户同在:

# cat /etc/pam.d/vsftpd

#%PAM-1.0

auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/login

account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/login

session    optional    pam_keyinit.so    force revoke

auth      required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed

auth      required pam_shells.so

auth      include password-auth

account    include password-auth

session    required    pam_loginuid.so

session    include password-auth

问题:本地用户和虚拟用户的数据根目录为不同的目录,如何实现?

需求:

1、用户u1 提供下载 限速200KBps  /home/ftpsite/u1

2、用户u2 提供上传 限速 500KBps  /home/ftpsite/u2

3、用户u3 超级vip 不限速 可以上传与下载  /home/ftpsite

思路:

针对不同的用户定义不同的子配置文件

步骤:

1.主配置文件中定义用户的配置文件<子配置文件>存放在那个位置

vim /etc/vsftpd/vsftpd.conf

user_config_dir=/etc/vsftpd/conf

mkdir /etc/vsftpd/conf

2.按照用户的需求生成用户的配置文件

用户u1 提供下载 限速200KBps  /home/ftpsite/u1

vim  /etc/vsftpd/conf/u1

local_root=/home/ftpsite/u1

anon_max_rate=200000

anon_world_readable_only=NO

用户u2 提供上传 限速 50KBps  /home/ftpsite/u2

vim  /etc/vsftpd/conf/u2

local_root=/home/ftpsite/u2

anon_world_readable_only=YES

write_enable=YES

anon_upload_enable=YES

anon_max_rate=50000

用户u3 超级vip 不限速 可以上传与下载  /home/ftpsite

vim /etc/vsftpd/conf/u3

local_root=/home/ftpsite

anon_world_readable_only=NO

anon_max_rate=0

anon_upload_enable=YES

write_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

3.新建用户家目录

mkdir /home/ftpsite/u1

mkdir /home/ftpsite/u2

chown virtual.virtual -R /home/ftpsite/

4 重启服务

service vsftpd restart

5测试

本文由澳门新萄京官方网站发布于澳门新萄京官方网站,转载请注明出处:澳门新萄京官方网站:上传下载文件,网络文件

关键词: