图片 32

2017 10-13 网络文件共享服务

 

– 主要学习内容

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

介绍:文件传输协议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

两种模式:服务器角度

主动(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

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

    图片 6

    image.png

    重启服务systemctl restart vsftpd

    图片 7

    image.png

    图片 8

    image.png

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

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

    图片 9

    image.png

    no_anon_password=YES

    图片 10

    image.png

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

    图片 11

    image.png

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

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

    图片 12

    image.png

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

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

    图片 13

    image.png

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

    图片 14

    image.png

    图片 15

    image.png

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

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

    图片 16

    图片 17

    image.png

    图片 18

    image.png

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

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

    图片 19

    image.png

    设置映射后效果

    图片 20

    image.png

    图片 21

    image.png

    图片 22

    image.png

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

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

    图片 23

    image.png

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

    图片 24

    image.png

    chmod u-w /home/zhangnan

    图片 25

    image.png

    图片 26

    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”

图片 27

image.png

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

图片 28

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

图片 29

image.png

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

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

图片 30

image.png

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

图片 31

image.png

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

图片 32

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服务器:

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,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状态码

状态码:

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

vsftpd服务:

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

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

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

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

vsftpd服务配置

命令端口

listen_port=21

主动模式端口

connect_from_port_20=YES
主动模式端口为20

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

被动模式端口范围

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

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

pasv_min_port=6000 0为随机分配

pasv_max_port=6010

使用当地时间

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

匿名用户:配置

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
可删除和修改上传的文件

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

chown_uploads=YES(默认NO)

chown_username=wang

chown_upload_mode=0644

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

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

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

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

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

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

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

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

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

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

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

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

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

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(默认)可自动生成

登录提示信息

ftpd_banner=“welcome to mage ftp
server”

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

目录访问提示信息

dirmessage_enable=YES (默认)

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