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

  • 主要学习内容

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

一.文件传输协议(ftp)

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

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

端口计算如图:
《2017 10-13 网络文件共享服务》 image.png

《2017 10-13 网络文件共享服务》 image.png

(2)FTP的两种模式

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

《2017 10-13 网络文件共享服务》 image.png

《2017 10-13 网络文件共享服务》 image.png

《2017 10-13 网络文件共享服务》 image.png

二.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

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

    《2017 10-13 网络文件共享服务》 image.png

    重启服务systemctl restart vsftpd

    《2017 10-13 网络文件共享服务》 image.png
    《2017 10-13 网络文件共享服务》 image.png

  • 被动模式端口范围
    在linux客户端默认使用被动模式
    windows客户端使用主动模式
    pasv_min_port=6000
    pasv_max_port=6010
    手动加入配置文件中
  • 使用当地时间
    use_localtime=YES 使用当地时间(默认时间为NO,使用GMT时间)
    如果是本地时间,不要改变,或改为NO
    如果是别的时区,要改为YES
  • 有关匿名用户的设置

    《2017 10-13 网络文件共享服务》 image.png

    no_anon_password=YES

    《2017 10-13 网络文件共享服务》 image.png

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

    《2017 10-13 网络文件共享服务》 image.png

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

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

    《2017 10-13 网络文件共享服务》 image.png

  • anon_world_readable_only ——默认是yes,不需要写入,代表只有所有人都有读权限才可以下载
    如果在/var/ftp/upload中,并不是所有人都有读权限的话,无法进行下载
  • anon_other_write_enable=YES 可删除和修改上传的文件
    将上述内容写入配置文件中,不写默认是无法删除和修改上传的文件

    《2017 10-13 网络文件共享服务》 image.png

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

    《2017 10-13 网络文件共享服务》 image.png
    《2017 10-13 网络文件共享服务》 image.png

  • anon_umask=077 指定匿名上传umask
    将umask值改为022就可以实现匿名上传和下载功能——文件权限为644
  • 指定上传文件的默认的所有者和权限
    chown_uploads=YES(默认NO)
    chown_username=who ——修改所有者
    chown_upload_mode=0644——写入配置文件中

    《2017 10-13 网络文件共享服务》
    《2017 10-13 网络文件共享服务》 image.png
    《2017 10-13 网络文件共享服务》 image.png

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

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

    《2017 10-13 网络文件共享服务》 image.png

    设置映射后效果

    《2017 10-13 网络文件共享服务》 image.png
    《2017 10-13 网络文件共享服务》 image.png
    《2017 10-13 网络文件共享服务》 image.png

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

    《2017 10-13 网络文件共享服务》 image.png

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

    《2017 10-13 网络文件共享服务》 image.png

    chmod u-w /home/zhangnan

    《2017 10-13 网络文件共享服务》 image.png
    《2017 10-13 网络文件共享服务》 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”

《2017 10-13 网络文件共享服务》 image.png

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

《2017 10-13 网络文件共享服务》 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

《2017 10-13 网络文件共享服务》 image.png

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

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

《2017 10-13 网络文件共享服务》 image.png

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

《2017 10-13 网络文件共享服务》 image.png

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

userlist_enable=YES 默认有此设置

userlist_deny=YES(默认值)黑名单,不提示口令,NO为白名单

userlist_file=/etc/vsftpd/users_list 此为默认值

《2017 10-13 网络文件共享服务》 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 实现非独立控制

三.实现基于文件验证的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
 测试

四.实现基于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

    原文作者:楠人帮
    原文地址: https://www.jianshu.com/p/106d4b8698ed
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞