Linux之FTP服务器,NFS服务器,SAMBA服务器详解

本文介绍Linux中的三个网络文件共享服务:ftp,nfs,samba

FTP服务

File Transfer Protocol 早期的三个应用级协议之一

  • 基于C/S结构 ?双通道协议:数据和命令连接
  • 数据传输格式:二进制(默认)和文本
  • 两种模式:(服务器角度)
    主动(PORT style):服务器主动连接
    ??? 命令(控制):客户端:随机port ---> 服务器:tcp 21
    ????数据:客户端:随机port <---服务器:tcp 20
    被动(PASV style):客户端主动连接
    ????命令(控制):客户端:随机port ---> 服务器:tcp 21
    ????数据:客户端:随机port --->服务器:随机port
    接下来我来用一个实验演示FTP:基于MySQL验证的vsftpd虚拟用户

    实验准备:

  • centos 7 作为FTP服务器
  • centos 7test 作为安装了MySQL的客户端
  1. 在ftp服务器上安装pam_mysql

    [[email protected] ~]# tar xvf pam_mysql-0.7RC1.tar.gz
    [[email protected] ~]# yum -y groupinstall "Development tools"#依赖工具包
    [[email protected] ~]# yum -y install mariadb-devel pam-devel openssl-devel#依赖
    [[email protected] pam_mysql-0.7RC1]# ./configure --with-mysql=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/securit
    [[email protected] pam_mysql-0.7RC1]#  make && make install
  2. 在ftp服务器上安装vsftpd
    [[email protected] ~]# yum -y install vsftpd
  3. 在数据库服务器上安装数据库
    [[email protected] ~]# yum -y install mariadb#详情看我前面的博客,有详细介绍
  4. 在数据库服务器上创建数据库
    [[email protected] ~]# mysql
    MariaDB [(none)]> create database ftpdb;
    MariaDB [(none)]> grant all on ftpdb.* to [email protected]‘%‘ identified by ‘centos‘;
  5. 在数据库服务器上使用创建的mysql帐户登录数据库,并且创建数据表
    [[email protected] ~]# mysql -uftpuser -h 172.18.252.106 -pcentos
    MariaDB [(none)]> use ftpdb;
    MariaDB [ftpdb]> create table ftpvusers (
        -> id int unsigned auto_increment primary key,
        -> username char(30),
        -> password char(48));
    MariaDB [ftpdb]> insert into ftpvusers (username,password) values (‘lishuyang‘,password(‘centos‘)),(‘wangyapeng‘,password(‘centos‘));
  6. 在FTP服务器上安装vsftpd并且配置连接MySQL的pam_mysql模块
    [[email protected] ~]# yum -y install vsftpd
    [[email protected] ~]# vim /etc/pam.d/vsftpd.mysql
    auth required pam_mysql.so user=ftpuser passwd=centos host=172.18.252.106 db=ftpdb table=ftpusers usercolumn=username passwdcolumn=password crypt=2
    account required pam_mysql.so user=ftpuser passwd=centos host=172.18.252.106 db=ftpdb table=ftpusers usercolumn=username passwdcolumn=password crypt=2

    配置字段说明
    ? 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()函数加密

  7. 修改vsftpd配置文件,使其适应mysql认证
    [[email protected] ~]# vim /etc/vsftpd/vsftpd.conf
    anonymous_enable=YES
    local_enable=YES
    write_enable=YES
    local_umask=022
    dirmessage_enable=YES
    connect_from_port_20=YES
    xferlog_std_format=YES
    listen=NO
    listen_ipv6=YES
    userlist_enable=YES
    tcp_wrappers=YES
    guest_enable=YES
    pam_service_name=vsftpd.mysql  #使其原系统用户无法登陆
    guest_username=ftpvuser
    user_config_dir=/etc/vsftpd/configdir                                    

    配置字段说明及常用的配置汇总
    ? 在centos7当中ftp用户的根目录不能有w权限
    ? listen_port (Default: 21) FTP命令通道的监
    ? connect_from_port_20 (Default: YES) 是否允许主动传输
    ? ftp_data_port (Default: 20) 主动模式使用的端口
    ? pasv_min_port=9527 (Default: 0) 被动模式,服务端开启的随机端口的最小值
    ? pasv_max_port=9529 (Default: 0) 被动模式,服务端开启的随机端口的最大值
    ? anonymous_enable=YES (Default: YES) 是否开启匿名用户
    ? local_enable=NO (Default: NO) 是否开启Linux本地用户登录
    ? local_root=(Default: (none)) 非匿名用户登录时所在的目录,默认是各自的家目录
    ? write_enable=NO (Default: NO) 是否允许Linux本地用户上传文件
    ? local_umask=022 (Default: 077) 本地用户上传文件的默认权限
    ? anon_upload_enable=YES (Default: NO) 是否允许匿名用户上传,如启动,还需让ftp用户对/var/ftp/pub及其他需要上传的目录设置wx权限
    ? anon_mkdir_write_enable=YES (Default: NO) 是否允许匿名用户创建目录,如启动,还需让ftp用户对/var/ftp/pub及其他需要上传的目录设置wx权限
    ? no_anon_password=YES (Default: NO) 使用ftp客户端登录匿名时,是否密码,如为NO,即默认,则需要输入任意密码,如为YES,直接登录,不用输入。
    ? anon_world_readable_only (Default: YES) 匿名用户下载文件时,文件一定要other上也有r权限。
    ? anon_other_write_enable=YES (Default: NO) 匿名用户是否可以删除及重命名
    ? anon_umask (Default: 077) 匿名用户上传时的默认权限。
    ? chown_uploads=YES (Default: NO) 匿名用户上传文件的所属人是否要更改。如YES,则更改为chown_username所指定的
    ? chown_username (Default: root)
    ? chown_upload_mode=0755 (Default: 0600)在chown_uploads生效的前提下,设置匿名用户的上传权限,一旦设置anon_umask失效。且权限一定要权限4位
    ? guest_enuable (Defalt: NO) 所有的非匿名用户都映射为了guest用户
    ? guest_username (Default: ftp) guest用户是谁,默认ftp
    ? chroot_local_user=YES 将linux系统用户的根目录设置为家目录,注意在Centos7中该目录对用户不能有w权限,当为YES时,所有人都不能越狱,当为NO时,所有人都能越狱。
    ? chroot_list_enable=YES 越狱例外,下一行一定要有。当上一行为YES是,为白名单,当为NO时,为黑名单
    ? chroot_list_file=/etc/vsftpd/chroot_list
    ? xferlog_enable=YES (Default: no) 是否开启上传、下载日志
    ? xferlog_std_format (Default: no) 是否使用wuftp格式
    ? xferlog_file (Default: /var/log/xferlog) xferlog的存放路径
    ? dual_log_enable (Default: NO) 是否同时开启vsftpd格式的日志,该格式记录信息更多,不只upload/downloads
    ? vsftpd_log_file (Default: /var/log/vsftpd.log) vsftpd格式日志的存放路径
    ? ftpd_banner (Default: none) 登录时的欢迎信息。不是所有客户端都可见
    ? banner_file Default: (none) 登录时的欢迎信息。不是所有客户端都可见,当该行存在时,则优先于ftpd_banner
    ? dirmessage_enable (Default: NO) 每进入一个目录时,如果该目录下有.message文件,则将其内容展现出来,不是所有客户端都可见
    ? message_file (Default: .message)
    ? userlist_enable=YES (Default: NO) 是否启用用户过滤功能。如YES,则开启,过滤文件由userlist_file决定
    ? userlist_file (Default: /etc/vsftpd/user_list) 过滤文件路径
    ? userlist_deny (Default: YES) 当该值为YES时userlist为黑名单,反之为白名单
    /etc/vsftpd/ftpuser 固定是黑名单,写入其中的用户一定不能登录ftp
    ? max_clients (Default: 2000) 允许同时登录的客户端请求数
    ? nopriv_user (Default: nobody) 客户端建立命令通道时,服务端与之连接的进程的所属用户
    ? anon_max_rate (Default: 0) 匿名用户上传和下载的最大速度,单位字节。
    ? local_max_rate (Default: 0) Linux本地用户上传和下载的最大速度,单位字节。
    ? connect_timeout (Default: 60) 主动模式数据连接超时时长
    ? accept_timeout (Default: 60) 被动模式数据连接超时时长
    ? data_connection_timeout (Default: 300) 数据连接无数据传输时的超时时长
    ? idle_session_timeout (Default: 300) 无命令操作超时时长
    ? ascii_upload_enable=NO ASCII模式上传
    ? ascii_download_enable=NO ASCII模式下载

  8. 重启服务并且测试
    [[email protected] ~]# systemctl restart vsftpd
    [[email protected] ~]# systemctl restart mariadb.service
    [[email protected] ~]# lftp 172.18.252.106
    lftp 172.18.252.106:~> user wangyapeng
    Password:
    lftp [email protected]:~> #成功登陆到ftp服务器

    这样我们利用MySQL的用户成功登陆到FTP服务器上

    NFS服务

     NFS 就是 Network FileSystem 的缩写,最早之前是由sun 这家公司所发展出来的。 它最大的功能就是可以透过网络,让不同的机器、不同的操作系统、可以彼此分享个别的档案 (share files)。所以,你也可以简单的将他看做是一个文件服务器,这个 NFS 服务器可以让你的 PC 来将网络远程的 NFS 服务器分享的目录,挂载到本地端的机器当中, 在本地端的机器看起来,那个远程主机的目录就好像是自己的一个磁盘分区槽一样,使用上面相当的便利。

    NFS工具

    ###rpcinfo
    [[email protected] ~]# rpcinfo -p 172.18.252.106   # 查看RPC注册程序
    [[email protected] ~]# rpcinfo -s 172.18.252.106
    ###exportfs
    [[email protected] ~]# exportfs -v  #查看本机所有NFS共享
    [[email protected] ~]# exportfs -r   #重读配置文件,并共享目录
    [[email protected] ~]# exportfs -a  #输出本机所有共享
    [[email protected] ~]# exportfs -au #停止本机所有共享
    ###展示远程的共享的目录
    [[email protected] ~]# showmount -e 172.18.252.106

    实验演示nfs自动挂载

    我们有时候需要使用远程的共享目录,我们可以手动挂载远程目录,那么需要好多台主机上的目录的话我们是不是也需要一个一个手动挂载?不知道大家有没有注意到我们光盘目录,当我们用的时候它会自动挂载,不用的他不挂载,现在我来以一个实验模拟自动挂载目录

    1. 安装nfs

      [[email protected] ~]# yum -y install nfs-utils
      [[email protected] ~]# vim /etc/exports.d/mage.exports #编辑配置文件
      /app/homedir *(rw,sync) # 要共享的目录
      [[email protected] ~]# exportfs -r  #重新读取文件
      [[email protected] ~]# systemctl restart nfs  #重新启动服务

      配置文件说明
      ? 默认选项:(ro,sync,root_squash,no_all_squash)
      ? ro,rw 只读和读写
      ? async 异步,数据变化后不立即写磁盘,性能高
      ? sync(1.0.0后为默认)同步,数据在请求时立即写入共享 ? no_all_squash (默认)保留共享文件的UID和GID
      ? all_squash 所有远程用户(包括root)都变成nfsnobody
      ? root_squash (默认)远程root映射为nfsnobody,UID为65534,早期版本 是4294967294 (nfsnobody)
      ? no_root_squash 远程root映射成root用户
      ? anonuid和anongid 指明匿名用户映射为特定用户UID和组GID,而非 nfsnobody,可配合all_squash使用

    2. 安装autofs
      [[email protected] ~]# yum -y install autofs
    3. 配置主配置文件
      [[email protected] ~]# vim /etc/auto.master
      /app/homedir    /etc/auto.mage   #挂载目录的目录名
      [[email protected] ~]# vim /etc/auto.mage
      * -fstype=nfs   172.18.252.106:/app/homedir/& #基名与远程目录匹配,后向引用
    4. 重启autofs服务
      [[email protected] ~]# service autofs restart
    5. 测试,客户端和服务器创建一个用户mage
      
      [[email protected] ~]# su - mage
      [[email protected] ~]#ls -a
      .  ..  .bash_logout  .bash_profile  .bashrc  .mozilla
      [[email protected] ~]$ df
      172.18.252.106:/app/homedir
                    186532       8    186524   1% /app/homedir
    至此用户家目录切换成功,且自动挂载,一段时间后会自动取消挂载
    ---
    ## samba服务
    SMB:Server Message Block服务器消息块,IBM发布,最早是DOS网络文 件共享协议
    SAMBA的功能:
    ? 共享文件和打印,实现在线编辑
    ? 实现登录SAMBA用户的身份认证
    ? 可以进行NetBIOS名称解析
    ? 外围设备共享
    ### 实验演示samba多用户挂载(仅支持centos7)
    1. 在服务器上创建用户

    [[email protected] ~]# useradd -s /sbin/nologin xiaofan
    [[email protected] ~]# useradd -s /sbin/nologin xiaochen

    2. 设置登陆samba服务的密码

    [[email protected] ~]# smbpasswd -a xiaofan #设置登陆密码
    [[email protected] ~]# smbpasswd -a xiaochen

    3. 创建共享目录 

    [[email protected] ~]# mkdir /app/smbshared
    [[email protected] ~]# chcon -t samba_share_t /app/smbshared #不用关闭selinux直接给目录设置期望值
    [[email protected] ~]# setfacl -m u:xiaofan:rwx /app/smbshared #给用户设置读写权限
    [[email protected] ~]# setfacl -m u:xiaochen /app/smbshared

    4. 配置共享目录

    [[email protected] ~]# vim /etc/samba/smb.conf
    [gongxiang]
    comment = Gongxiang
    path = /app/smbshare #设置的访问目录
    browseable = yes #可以浏览
    writeable = no #可写
    write list = xiaofan,xiaochen #可以写的用户
    public = yes #是否可见
    allow list = 172.18. 192.168. #表示可以访问的网段

    5. 重新启动服务

    [[email protected] ~]# systemctl restart smb

    6. 客户端安装工具

    [[email protected] ~]# yum -y install cifs-utils

    7. 配置自动挂载目录

    [[email protected] ~]# vim /etc/fstab
    //172.18.254.96/gongxiang /mnt/ cifs credentials=/etc/multiuser,multiuser,sec=ntlmssp 0 0

    8. 配置登陆用户

    [[email protected] ~]# vim /etc/multiuser
    username=xuxian
    password=centos

    9. 挂载

    [[email protected] ~]# mount -a
    [[email protected] ~]# df
    172.18.252.106:/gongxiang
    3667968 33024 3634944 1% /mnt/#
    [[email protected] ~]# smbclient -L //172.18.252.106 -U xuxian

  9. 以低权限xuxian的身份获取服务器上的高权限的xiaofan.xianchen 的权限
    [[email protected] ~]# useradd xiaofan
    [[email protected] ~]# useradd xiaochen
    [[email protected] ~]# su - xiaofan #切换用户
    [[email protected] ~]# cifscreds add 172.18.252.106#随便输入服务端xiaofan.xiaochen的samba密码

    至此完成samba多用户挂载

    使用NFS,NIS,AUTOFS实现用户帐号及家目录的漫游

    本实验的场景:生活中一台服务器提供账号和目录共享,然后其他主机可以实现这台服务器的账号共享及目录的漫游,使用对方目录的时候自动挂载,不使用的时候自动取消挂载

  10. 服务端安装软件包
    [[email protected] ~]# yum -y install ypserv ypbind yp-tools
  11. 配置NIS域,并且使之生效
    [[email protected] ~]# vim /etc/sysconfig/network
    # Created by anacondoa
    NISDOMAIN=cyn
    [[email protected] ~]# nisdomainname cyn
  12. 编写NIS主配置文件
    [[email protected](nanyibo) ~]# vim /etc/ypserv.conf#最后添加内容
    127.0.0.1:*:*:none
    172.18.254.0/255.255.255.0:*:*:none #允许这个网段内的主机连接
    *:*:*:deny #其他网段拒绝
  13. 启动NIS服务,并且设置为开机启动
    [[email protected] ~]# systemctl restart ypserv
    [[email protected] ~]# systemctl enable ypserv
  14. 创建几个用户并指定家目录
    [[email protected] ~]# mkdir /app/homedir#用户的家目录在这个目录下
    [[email protected] ~]# for n in {1..5};do useradd -d /app/homedir/nisuser$n nisuser$n;echo centos |passwd --stdin nisuser$n;done
  15. nis生成数据库
    [[email protected] app]# /usr/lib64/yp/ypinit -m
    #先按CTRL+D,然后按Y。即可生成
  16. 配置NFS
    [[email protected] ~]# yum -y install nfs-utils
    [[email protected] ~]# vim /etc/exports.d/cynports
    /app/homedir *(rw,sync)
    [[email protected] ~]# systemctl restart nfs
  17. 配置autofs
    [[email protected] ~]# yum -y install autofs
    [[email protected] ~]# vim /etc/auto.master
    /app/homedir    /etc/auto.cyn  timeout=10
    [[email protected] ~]# vim /etc/auto.cyn
    *      -fstype=nfs             172.18.254.234:/app/homedir/&
  18. 重新启动autofs
    [[email protected] ~]# service autofs restart
  19. 客户端nis的配置
    [[email protected] ~]# yum install -y ypbind
    [[email protected] ~]# setup

    这个时候会出现图形化界面,选择use nis ,空格确定,选择next,

    填入你自己设置的域名和服务器IP,选择ok,然后再会出现一个界面。选择退出即可

  20. autofs客户端的测试
    [[email protected] ~]# mkdir -p /app/homedir
    [[email protected] ~]# su - nisuser1
    [[email protected] ~]$ ls -a
    .  ..  .bash_logout  .bash_profile  .bashrc  .mozilla
    [[email protected] ~]$ df
    172.18.254.136:/app/homedir/nisuser1
                      52403200 4518272  47884928   5% /app/homedir/nisuser1

    至此实验完成,实现了服务器的用户账号共享及用户家目录的漫游,对于所需目录的自动挂载。

原文地址:http://blog.51cto.com/13805636/2298920

时间: 2024-10-16 07:08:02

Linux之FTP服务器,NFS服务器,SAMBA服务器详解的相关文章

在CentOS 7上构建RAID5、LVM和SAMBA服务器(5)——架设SAMBA服务器

在CentOS 7上构建RAID5.LVM和SAMBA服务器(5)--架设SAMBA服务器 6. 架设SAMBA服务器 6.1. 预备 本节的任务是配置SAMBA服务,共享/home/shared目录,使指定的Windows用户可以远程访问该共享. 首先要在CentOS上运行yum命令安装SAMBA服务: yum install samba 安装之后,执行systemctl命令来启动smb和nmb两个samba的守护进程. 图37 启动SAMBA 6.2. 修改smb.conf文件 修改/etc

Linux - CentOS6.5服务器搭建与初始化配置详解(下)

传送带:Linux - CentOS6.5服务器搭建与初始化配置详解(上) 继续接着上面的安装,安装完后会出现下面界面 点击reboot重启 重启后可以看到下面的tty终端界面  因为这就是最小化安装 输入root和之前配置的密码 第一步先把防火墙给光了 iptables -F  命令用于清空规则 这里插一条命令(这个命令我忘记打上去了) /etc/init.d/iptables save  用于保存当前被清空的规则 chkconfig  iptables  stop  开机不允许启动防火墙 c

NFS服务器原理和安装配置详解附案例演练

NFS服务器原理和安装配置详解附案例演练 1.什么是NFS服务器 NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器.不同的操作系统可以共享彼此的文件. NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利: 2.NFS挂载原理 NFS服务器的挂载结构图: 如上图示: 当我们在NFS服务器设置好一个共享目录/home/public后

DNS服务器的搭建与使用详解

DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串.通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析).DNS协议运行在UDP协议之上,使用端口号为53. 1.网络环境图示 2.分别在两台服务器ns1和ns2上通过YUM安装Bind软件包 [[email protected] ~]# yum install bind [[email pro

linux之cp/scp命令+scp命令详解

linux之cp/scp命令+scp命令详解 名称:cp 使用权限:所有使用者 使用方式: cp [options] source dest cp [options] source... directory 说明:将一个档案拷贝至另一档案,或将数个档案拷贝至另一目录. 把计 -a 尽可能将档案状态.权限等资料都照原状予以复制. -r 若 source 中含有目录名,则将目录下之档案亦皆依序拷贝至目的地. -f 若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制. 范例: 将档案 aa

【转】linux之cp/scp命令+scp命令详解

linux之cp/scp命令+scp命令详解 名称:cp 使用权限:所有使用者 使用方式: cp [options] source dest cp [options] source... directory 说明:将一个档案拷贝至另一档案,或将数个档案拷贝至另一目录. 把计 -a 尽可能将档案状态.权限等资料都照原状予以复制. -r 若 source 中含有目录名,则将目录下之档案亦皆依序拷贝至目的地. -f 若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制. 范例: 将档案 aa

linux网络编程之shutdown() 与 close()函数详解

linux网络编程之shutdown() 与 close()函数详解 参考TCPIP网络编程和UNP: shutdown函数不能关闭套接字,只能关闭输入和输出流,然后发送EOF,假设套接字为A,那么这个函数会关闭所有和A相关的套接字,包括复制的:而close能直接关闭套接字. 1.close()函数 [cpp] view plain copy print? <span style="font-size:13px;">#include<unistd.h> int 

Linux下nginx编译安装教程和编译参数详解

这篇文章主要介绍了Linux下nginx编译安装教程和编译参数详解,需要的朋友可以参考下 一.必要软件准备1.安装pcre 为了支持rewrite功能,我们需要安装pcre 复制代码代码如下: # yum install pcre* //如过你已经装了,请跳过这一步 2.安装openssl 需要ssl的支持,如果不需要ssl支持,请跳过这一步 复制代码代码如下: # yum install openssl* 3.gzip 类库安装 复制代码代码如下: yum install zlib zlib-

Linux系统IO分析工具之iotop参数详解(查看IO占用)

这篇文章主要介绍了Linux系统IO分析工具之iotop参数详解(查看IO占用),本文着重注解了iotop工具的参数,以及可操作命令,需要的朋友可以参考下 简介: iotop – simple top-like I/O monitoriotop是一个用来监视磁盘I/O使用状况的 top 类工具,可监测到哪一个程序使用的磁盘IO的信息(requires 2.6.20 or later) 安装: 复制代码 代码如下: yum -y install iotop 用法: 复制代码 代码如下: iotop

Linux备份入门:3种克隆方法详解_Clonezilla

摘自:http://os.51cto.com/art/201006/206871.htm 给你的系统磁盘制作一个镜像拷贝是创建备份的好办法.由于便携式U盘总是有比较低廉的价格,你可以维护数个拷贝以便循环利用.如果你的主磁盘崩溃了,你可以在几分钟之内恢复回来并继续运行.于是剩下的事情就是真正去创建镜像拷贝的操作了.有很多种方法可以完成这项任务,我们将在这里介绍几种,以便你可以学会. 制作系统磁盘的镜像拷贝最大的问题是你必须从另外一个设备启动,这样才能得到一个真正的拷贝.第一种可供选择的方法有Liv