linux网络文件共享服务的实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux网络文件共享服务的实现相关的知识,希望对你有一定的参考价值。

LINUX网络文件共享服务 

 

linux网络文件共享服务的实现:

  应用层:ftp

  内核:nfs (Sun)

  跨平台:samba

一.vsftp实现文件共享

1,  概念:

vsftpd :very secure FTP daemon,高安全性的 FTP 服务器。

 ftp: File Transfer Protocol文件传输协议;属于应用层协议,使用TCP端口: 21/tcp

FTP会话时包含了两个通道,一个叫控制通道,一个叫数据通道。

控制通道:控制通道是和FTP服务器进行沟通的通道,连接FTP,发送文件管理类命令,始终在线的连接。

数据通道:数据通道是和FTP服务器进行文件传输或者列表的通道。

FTP协议中,控制连接均由客户端发起,而数据连接有两种工作方式:PORT方式和PASV方式

PORT模式(主动方式)

FTP 客户端首先和FTPServerTCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。

PASV模式(被动方式)

在建立控制通道的时候和PORT模式类似,当客户端通过这个通道发送PASV 命令的时候,FTP server打开一个随机端口并且通知客户端在这个端口上传送数据的请求,然后FTP server 将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接传送数据。

如果从C/S模型这个角度来说,PORT对于服务器来说是OUTBOUND,而PASV模式对于服务器是INBOUND,这一点请特别注意,尤其是在使用防火墙的企业里,这一点非常关键,如果设置错了,那么客户将无法连接。

响应码:

      1xx: 信息

      2xx: 成功类的状态码

      3xx: 提示需进一步提供补充类信息的状态码

      4xx: 客户端错误

          5xx: 服务端错误

2,  安装配置:

CentOS6.7: 上安装vsftpd

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

      服务脚本:/etc/rc.d/init.d/vsftpd

      配置文件目录:/etc/vsftpd

        主配置文件:vsftpd.conf

注意:此配置文件中所有配置,每行配置的行首都不能有空格

      匿名用户(映射为ftp用户)共享资源位置:/var/ftp

      系统用户通过ftp访问的资源的位置:用户自己的家目录

     虚拟用户通过ftp访问的资源的位置:给虚拟用户指定的映射成为的系统用户的家目录

  安装命令:yum install  vsftpd

  启动服务:service vsftpd start

  查看检验:ss –tnlp  查看21端口是否监听

  技术分享

登录验证:

技术分享

技术分享

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

     匿名用户的配置:

      anonymous_enable=YES :是否允许匿名用户

      anon_upload_enable=YES  :是否可以上传

      anon_mkdir_write_enable=YES:是否可以创建目录

      anon_ohter_write_enable=YES:是否可以删除文件和目录

 

    系统用户的配置:

      local_enable=YES:本地用户是否可用

          write_enable=YES:本地用户是否有写权限

      禁锢所有的ftp本地用户于其家目录中:不可随便切换到其他用户目录

        chroot_local_user=YES

      禁锢文件中指定的ftp本地用户于其家目录中:只锁定部分指定用户

         chroot_list_enable=YES

            chroot_list_file=/etc/vsftpd/chroot_list

日志:

         xferlog_enable=YES

         xferlog_std_format=YES

         xferlog_file=/var/log/xferlog

      改变上传文件的属主:

         chown_uploads=YES

         chown_username=whoever

      登录欢迎信息:

            ftpd_banner=welcome to blash ftp servece.

 vsftpd使用pam完成用户认证,其用到的pam配置文件:

      pam_service_name=vsftpd

      vim ftpusers :在这里的编辑的用户都无法登陆FTP  

通过在pam.d中定义的vsftp文件控制的

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

      userlist_enable=YES :是否启动控制用户登录列表文件

      userlist_deny=YES|NO :是否拒绝文件中列出的用户,yes表示列表文件是黑名单,no表示列表文件是白名单

      默认需手动指定文件为/etc/vsftpd/user_list;如果userlist_deny=YES,则拒绝此文件中的用户登录,如果userlist_deny=NO则只有在此文件中的用户才可以登录,没有定义的都不能登陆

    连接限制:

      max_clients: 最大并发连接数;

      max_per_ip: 每个IP可同时发起的并发请求数;

    传输速率:

      anon_max_rate: 匿名用户的最大传输速率, 单位是“字节/秒”;

          local_max_rate: 本地用户的最大传输速率, 单位是“字节/秒”;

 

 实例:在/var/ftp/下新建一个目录,让系统用户有写入权限:

                 技术分享

/etc/目录下的vsftpd/ftpusersvsftpd/user-list两个文件与主配置文件中的"userlist_enable""userlist_deny"选项有着密切联系。两个文件中,每个用户名需占用一行。

以下是默认情况下ftpusers文件的内容:

技术分享

以下是默认情况下user_list文件的内容:

技术分享

比较两个文件的内容,会发现它们实际上是一样的。在使用两个文件时的区别在于,当userlist_enableYES时,如果一个用户名在"vsftpd/user_list"文件中,而同时"userlist_deny"选项为"YES",则该用户在试图登录FTP服务器时,将不能够登录,甚至连输入密码的提示信息都没有,直接被FTP服务器拒绝。

而如果一个用户名在"vsftpd/ftpusers"文件中,同时"userlist_deny"选项为"YES",则该用户在试图登录FTP服务器时,将能看到输入密码的提示,但即使正确输入密码仍然不能登录FTP服务器。

userlist_deny选项和user_list文件一起能够有效地阻止"root""apache""www"等系统用户登录FTP服务器,从而保证了FTP服务器的分级安全性。

vsftpd服务器使用虚拟用户登录控制:

 所有的虚拟用户会被统一映射为一个指定的系统账号,访问的共享位置即为此系统账号的家目录;

  各虚拟用户可被赋予不同的访问权限;通过匿名用户的权限控制参数进行指定;

拟用户账号的存储方式:

     文件:编辑文件

          奇数行为用户名

          偶数行为密码

          此文件需要被编码为hash格式;

     关系型数据库中的表中:

          即时查询数据库完成用户认证;

          mysql库, pam要依赖于pam_mysql

实例:mysql存储vsftpd虚拟用户:

a, 安装所需要程序

   yum -yinstall  mysql-server mysql-develpam_mysql

b, 创建虚拟用户账号, 准备数据库及相关表

   首先请确保mysql服务已经正常启动。而后,按需要建立存储虚拟用户的数据库即可,这里将其创建为vsftpd数据库。

mysql>create database vsftpd;

mysql>grant select on vsftpd.* to [email protected] identified by‘www.magedu.com‘; 

mysql>grant select on vsftpd.* to [email protected] identified by ‘www.magedu.com‘;

mysql> flush privileges;

mysql> use vsftpd;

CREATETABLE users(

    -> id INT UNSIGNED  NOT NULL AUTO_INCREMENT  PRIMARY KEY,

    -> name VARCHAR(50) BINARY NOT NULL,

    -> passwordCHAR(48) BINARY NOT NULL );

添加测试的虚拟用户:

根据需要添加所需要的用户,需要说明的是,这里将其密码为了安全起见应该使用PASSWORD函数加密后存储。

mysql>insert into users(name,password) values(‘magedu1‘,password(‘magedu‘));

mysql> insert into users(name,password)values(‘magedu2‘,password(‘magedu‘));

 

c, 配置vsftpd

 

  1. 建立pam认证所需文件

#vim/etc/pam.d/vsftpd.mysql

添加如下两行:

1:认证账号密码是否匹配,2,审查是否在有效期限内

authrequired /lib64/security/pam_mysql.so user=vsftpd passwd=www.magedu.comhost=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwordcrypt=2

account required /lib64/security/pam_mysql.so user=vsftpdpasswd=www.magedu.com host=localhost db=vsftpd table=users usercolumn=namepasswdcolumn=password crypt=2

  1. 修改vsftpd的配置文件,使其适应mysql认证

 

建立虚拟用户映射的系统用户及对应的目录

#useradd -s /sbin/nologin -d /var/ftproot vuser

# chmodgo+rx /var/ftproot

 

请确保/etc/vsftpd.conf中已经启用了以下选项

anonymous_enable=NO

local_enable=YES

write_enable=YES

anon_upload_enable=NO

anon_mkdir_write_enable=NO

chroot_local_user=YES

 

而后添加以下选项

guest_enable=YES

guest_username=vuser  :来宾账号都映射为vuser账号

并确保pam_service_name选项的值如下所示

pam_service_name=vsftpd.mysql

d,启动vsftpd服务

查看端口开启情况

 

# netstat-tnlp |grep :21

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

 

使用虚拟用户登录,验正配置结果,以下为本机的命令方式测试,你也可以在其它Win Box上用IE或者FTP客户端工具登录验正

# ftplocalhost

#service vsftpd start

# chkconfig vsftpd on

 

e, 配置虚拟用户具有不同的访问权限

   vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可。

 

1、配置vsftpd为虚拟用户使用配置文件目录

 

# vimvsftpd.conf

添加如下选项,,vusers_config是目录

user_config_dir=/etc/vsftpd/vusers_config

 

2、创建所需要目录,并为虚拟用户提供配置文件

 

为每个用户创建一个和目录同名的文件

 

# mkdir/etc/vsftpd/vusers_config/

# cd/etc/vsftpd/vusers_config/

# touchtom jerry

 

3、配置虚拟用户的访问权限

 

虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。比如,如果需要让tom用户具有上传文件的权限,可以修改/etc/vsftpd/vusers_config/tom文件,在里面添加如下选项即可。

anon_upload_enable={YES|NO}

anon_mkdir_write_enable={YES|NO}

anon_other_write_enable={YES|NO}

 

cd/etc/vsftpd/vusers_config

 vim tom

 anon_upload_enable=YES

 anon_mkdir_write_enable=YES

anon_other_write_enable=YES

 

vimjerry

anon_upload_enable=NO

 anon_mkdir_write_enable=NO

anon_other_write_enable=NO

以上完成vsftpd实现文件共享以及用户管理。

 

二,NFS实现文件共享管理:

NFS:network filesystem 网络文件系统;

 实现Linux系统之间的文件共享(LinuxWindows中间文件共享采用SAMBA服务),其为C/S架构,仅是一种文件系统,本身没有传输功能,基于RPC协议实现达到两个Linux系统之间的文件目录共享,其端口为:2049/tcp, 2049/udp

 安装配置:

    先安装rpcbind:  yum install rpcbind

    启动服务: systemctl startrpcbind.service

    技术分享

   安装NFS:   yum   install  nfs-utils –y

    启动服务: systemctl start  nfs.service

    技术分享

   建立共享目录:mkdir –pv  /shared/nfs

     技术分享

   修改配置文件并重启服务后查看共享:

      vim /etc/exports

       /shared/nfs   192.168.1.33(rw) 192.168.1.13(ro)

       exportfs命令:维护exports文件导出的文件系统表的专用工具:不用重启NFS服务就可用导出或关闭文件系统

      export -ar: 重新导出所有的文件系统

      export -au: 关闭导出的所有文件系统

      export -u FS: 关闭指定的导出的文件系统

 

    开机自动挂载nfs:

      /etc/fstab

      SERVER:/PATH/TO/EXPORTED_FS/mount_point  nfs   defaults,_netdev(表明网络设备,开机时不会强制挂载)  0 0

       技术分享

     技术分享

          补充材料:

 

      /etc/exports 文件中的项的格式相当简单。要共享一个文件系统,只需要编辑 /etc/exports 并使用下面的格式给出这个文件系统(和选项)即可:

        directory (or file system)要导出的文件系统   客户端一client1(option1用户, option2权限)client2(option1, option2)

 

      常用客户端(选项)

 

        有几个常用的选项可以对 NFS 实现进行定制。这些选项包括:

          secure 这个选项是缺省选项,它使用了 1024 以下的 TCP/IP 端口实现 NFS 的连接。指定insecure 可以禁用这个选项。

          rw 这个选项允许 NFS 客户机进行读/写访问。缺省选项是只读的。

          async 这个选项可以改进性能,但是如果没有完全关闭NFS 守护进程就重新启动了 NFS 服务器,这也可能会造成数据丢失。

          no_wdelay 这个选项关闭写延时。如果设置了 async,那么 NFS 就会忽略这个选项。

          nohide 如果将一个目录挂载到另外一个目录之上,那么原来的目录通常就被隐藏起来或看起来像空的一样。要禁用这种行为,需启用 hide 选项。

          no_subtree_check 这个选项关闭子树检查,子树检查会执行一些不想忽略的安全性检查。缺省选项是启用子树检查。

          no_auth_nlm 这个选项也可以作为insecure_locks 指定,它告诉 NFS 守护进程不要对加锁请求进行认证。如果关心安全性问题,就要避免使用这个选项。缺省选项是 auth_nlm secure_locks

          mp (mountpoint=path) 通过显式地声明这个选项,NFS 要求挂载所导出的目录。

          fsid=num 这个选项通常都在 NFS 故障恢复的情况中使用。如果希望实现 NFS 的故障恢复,请参考 NFS 文档。

     

      用户映射

        通过 NFS 中的用户映射,可以将伪或实际用户和组的标识赋给一个正在对 NFS 卷进行操作的用户。这个 NFS 用户具有映射所允许的用户和组的许可权限。对 NFS 卷使用一个通用的用户/组可以提供一定的安全性和灵活性,而不会带来很多管理负荷。

        在使用 NFS 挂载的文件系统上的文件时,用户的访问通常都会受到限制,这就是说用户都是以匿名用户的身份来对文件进行访问的,这些用户缺省情况下对这些文件只有只读权限。这种行为对于 root 用户来说尤其重要。然而,实际上的确存在这种情况:希望用户以 root 用户或所定义的其他用户的身份访问远程文件系统上的文件。NFS 允许指定访问远程文件的用户——通过用户标识号(UID)和组标识号(GID),可以禁用正常的 squash 行为。       

        用户映射的选项包括:

          root_squash 这个选项不允许 root 用户访问挂载上来的 NFS卷。

          no_root_squash 这个选项允许 root 用户访问挂载上来的 NFS卷。

          all_squash 这个选项对于公共访问的 NFS 卷来说非常有用,它会限制所有的 UID GID,只使用匿名用户。缺省设置是 no_all_squash

          anonuid anongid 这两个选项将匿名 UID GID 修改成特定用户和组帐号。

 

  客户端挂载时可以使用的特殊选项:

      Client

      Mounting remote directories

      Before mounting remote directories 2daemons should be be started first:

        rpcbind

        rpc.statd

 

    rsize 的值是从服务器读取的字节数。wsize 是写入到服务器的字节数。默认都是1024如果使用比较高的值,如8192,可以提高传输速度。

 

    The timeo value is the amount of time, intenths of a second, to wait before resending a transmission after an RPCtimeout. After the first timeout, the timeout value is doubled for each retryfor a maximum of 60 seconds or until a major timeout occurs. If connecting to aslow server or over a busy network, better performance can be achieved byincreasing this timeout value.

    The intr option allows signals to interruptthe file operation if a major timeout occurs for a hard-mounted share.

 

 

 

三,samba安装配置:

    实现的是LinuxWindows间资源互通的问题:在Linux下架设Samba服务器,在Windows下来访问。

smb: Service Message Block

         CIFS:Common Internet File System

      使用端口: 137/udp,138/udp, 139/tcp, 445/tcp

  安装配置:

        安装命令: yuminstall  samba  samba-client -y

         服务启动:service nmbstart;service smb start

         服务脚本:

                   /etc/rc.d/init.d/nmb

                   /etc/rc.d/init.d/smb

         主配置文件:

                   /etc/samba/smb.conf

           修改配置文件:将工作组修改为和windows一样WORKGROUP,定义测试共享环境,然后重启服务

             vim smb.conf

                 vorkgroup=WORKGROUP

                 service nmb restart ; service smb restart

技术分享

技术分享

技术分享

技术分享

 

使用smbpasswd命令将系统用户smbuser1加入samba用户:

     smbpasswd:

          -a Sys_User: 添加系统用户为samba用户

          -d :禁用

          -e: 启用

          -x: 删除

   技术分享

在另一台centos主机上验证:

  技术分享

技术分享

windows主机中验证:

 技术分享

技术分享

 

samba客户端挂载:

      注意:需安装samba-clientcifs-utils程序;否则无法挂载:

        1,设置SMB共享目录:

vi /etc/samba/smb.conf ,在最后加入想要共享的文件夹:

[share]

               path = /shared

               available = yes

               browsealbe = yes

               public = yes

               writable = yes

         2, 设置SMB用户:

samba的帐户设置有点特别,它使用的是系统的帐户,但是要把账户映射到samba的帐户数据库,而且要设置samba密码才能使用如果该账户只用于samba访问,可以不设置系统密码,而只为账户设置samba的密码

//我使用已有的用户,设置smb用户密码后始终不能成功从远程访问,所以新建了一个系统用户

useradd smbtest

passwd 654321

//设置smb用户的密码

smbpasswd -asmbtest//增加SMB用户,同时会提示设置密码

smbpasswd x smbtest//删除SMB用户

技术分享

     2,在另一台linux主机上执行如下命令挂载:

        mount -t cifs -ousername=smbtest,password=654321 //192.168.1.19/shared  /mont

         注意:/mont目录需在本地先创建好。

        技术分享

        技术分享

     3,设置自动挂载:

   //192.168.1.19/shared  /mont cifs  defaults,_netdev,username=smbtest,password=654321,rw 0  0

 

  技术分享

 

samba图形化界面管理:

        安装:yum installsamba-swat –y

        修改配置文件:

          vim /etc/xinetd.d/swat

          技术分享

 

启动服务:service xinetdstart

在浏览器中输入对应的服务器IP和端口,登录管理:

技术分享

技术分享


本文出自 “前进的轨迹” 博客,转载请与作者联系!

以上是关于linux网络文件共享服务的实现的主要内容,如果未能解决你的问题,请参考以下文章

Linux网络文件共享服务之smaba

Linux网络文件共享服务之NFS

第九章 网络文件共享服务之NFS

Linux通过NFS实现文件共享

Linux 服务器之间如何进行文件目录共享

Linux网络文件共享服务之SAMBA 服务