FTP,SAMBA,NFS之间的区别
FTP Windows/linux/unix/macOS等 发布网站,文件共享 Tcp/21
Samba Windows/linux 文件共享(网上邻居) Tcp/445,tcp/139
NFS Linux/unix 网站发布,文件共享(mount) Tcp/2049
samba
能够将本地共享的目录通过文件系统接口方式输出给客户端,客户端可以使用mount命令挂载。客户端可以使用针对本地文件系统命令操作该目录,比如ls… samba是smb协议的实现。更为通用的叫法是cifs协议的实现。 可以实现windows和Linux之间文件共享和打印服务共享。
smb:Service Message Block;服务信息块 cifs:Common Internet File System 通用互联网文件系统
samba:作者-Andrew Tridgell;
功能:
文件系统共享; NetBIOS协议; windows主机在网上邻居中可以搜索到网络中主机的主机名;workgroup 使用的就是广播方式的netbios协议。 要使windows主机能够找到启用samba的Linux主机,Linux主机也需要支持NetBIOS协议。 NetBIOS要求主机名不能超过15个字符。 NetBIOS仅是本地网络使用的网络协议。 打印服务;基于samba能够实现打印机共享给基于smb或cifs的所有的客户端。
samba通信模型:两种
peer to peer(Work Group模型) 主机对主机 domain devel 域模型 LDAP:Lightweight Directory Access Protocol 轻量级访问协议 写入性能不是很好,但是查询性能非常好 windows将LDAP协议以域的方式实现。 DEC域控制器
samba运行原理
samba可以使用匿名账号登录文件系统 samba认证是使用系统用户的用户名,不是系统用户登录系统的账号和密码。 windows上配置文件共享,开启认证功能,一般是使用主机上用户名和密码。
安装samba:
程序环境: samba集成在centos中默认。分为三类程序
samba.x8664 ##服务端程序 samba-client.x8664 ##客户端程序
samba-common.x86_64 ##公共组件,客户端和服务端都依赖此包 samba4-libs.x8664 ##服务端和客户端都会用到库文件 samba-common-tools.x8664 ##samba服务端和客户端工具 需要内核支持SMB/CIFS协议默认一般都是支持的。
samba程序文件介绍
配置文件: /etc/samba/smb.conf 主程序:有两个 实现samba协议和NetBIOS协议 nmbd:Network Naming Service, NetBIOS 如果仅是在类Unix主机之上实现文件共享,不需要此服务 windows共享需要名称解析,如果有windows主机使用该服务需要此服务。 smbd:SMB/CIFS Service; Unit File: /usr/lib/systemd/system/nmb.service /usr/lib/systemd/system/smb.service 监听的端口: 137/udp, 138/udp 139/tcp, 445/tcp 客户端程序: mount -t cifs = mount.cifs smbclient:交互式命令行客户端工具;命令行的访问工具
samba的配置:
主配置文件 由samba-common包提供
/etc/samba/smb.conf [root@centos7 ~]# grep -i -E "^#+[[:space:]]*(-|=)+.*" /etc/samba/smb.conf #======================= Global Settings ===================================== ### 全局配置段 # ----------------------- Network-Related Options ------------------------- ### 网络相关配置 # --------------------------- Logging Options ----------------------------- ### 日志选项 # ----------------------- Standalone Server Options ------------------------ ### 独立服务选项 # ----------------------- Domain Members Options ------------------------ ### 域成员配置 # ----------------------- Domain Controller Options ------------------------ ### 域控制配置 # ----------------------- Browser Control Options ---------------------------- ### 浏览者控制选项 #----------------------------- Name Resolution ------------------------------- ### 名称解析 # --------------------------- Printing Options ----------------------------- ### 打印相关选项 # --------------------------- File System Options --------------------------- ### 文件系统相关 #============================ Share Definitions ============================== ### 共享定义配置段
两类配置段:
全局配置段
网络相关配置选项 workgroup = MYGROUP 工作组模型中的工作组名称。windows一般用的是workgroup server string = Samba Server Version %v 鼠标悬停到网络主机上显示提示信息 interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 指明要监听的地址或网络接口; hosts allow = 127. 192.168.12. 192.168.13. 运行访问的主机网段 127网段192.168.12网段可以访问 netbios name = MYSERVER 当前主机被网络其他电脑使用netbios解析到主机名 注意:samba一般是内部服务用所以interface一般只是监听在本地某个接口或地址上,一般不指定某个网段,很少进行夸网段共享。 日志相关选项 log file = /var/log/samba/log.%m 日志文件路径%m代表一个客户端的ip地址 max log size = 50 日志大小 独立服务选项 security = user ###定义全级别 share (depricated)废弃选项 server (depricated)废弃选项 user 用户登录必须使用账号和密码登录 passdb backend = tdbsam ###定义密码到一个tdb方式编码的库。 打印选项 load printers = yes ###开启打印服务 cups options = raw
共享文件系统配置段
每一个共享都要使用一个独立的配置段 [shared_ID]:定义共享名称,在网络上邻居中显示的资源名称。 配置段选项有三类: [homes]:每个samba用户是否能够通过samba服务访问自己的家目录; 不是所有系统用户都是samba用户,只有有了samba账号密码的系统用户才是 [printers]:打印服务; [shared_FS]:用户自定义的共享目录; home和shared配置中常用指令: comment:注释信息; path:本地文件系统路径;类似url映射本地文件系统该路径。 browseable: 是否可浏览,是否为用户可见;是否允许属组合主用户浏览samba服器上的共享资源名称。 guest ok:是否允许来宾账号访问; public:是否公开给所有来宾; writable:是否可写;需要双授权,文件系统可写,服务可写 read only = no write list:拥有写权限的用户或组列表; 用户名 @组名, +组名
samba用户管理:
smbpasswd, pdbedit smbpasswd [OPTIONS] USERNAME ###username必须问系统用户 -a:添加 -x:删除 -d:禁用 -e:启用 pdbedit: -L:列出samba服务中的所有用户; -a:添加用户为samba用户; -u USERNAME: -x:删除 -t:从标准输出接收密码;
访问服务:
启动服务 服务端启动服务:systemctl status nmb smb 创建系统用户centos 为用户创建用密码pdbedit -au centos
(1) smbclient交互式客户端程序: (1) 查看目标服务上的共享,自己有权查看的共享。 smbclient -L SMB_SERVER [-U USERNAME] ##-U大写的 [root@centos6 ~]# smbclient -L 192.168.197.129 -U centos ###centos用户使用密码查看 Enter centos's password: Domain=[MYGROUP] OS=[Windows 6.1] Server=[Samba 4.2.3] Sharename Type Comment ###共享资源名称信息 --------- ---- ------- IPC$ IPC IPC Service (Samba Server Version 4.2.3) centos Disk Home Directories ###共享的目录 Domain=[MYGROUP] OS=[Windows 6.1] Server=[Samba 4.2.3] Server Comment ###服务器信息 --------- ------- CENTOS7 Samba Server Version 4.2.3 LOCALHOST Samba Server Version 4.2.3 Workgroup Master --------- ------- MYGROUP LOCALHOST [root@centos6 ~]# smbclient -L 192.168.197.129 使用匿名用户查看 Enter root's password: ###不需输入任何密码 Anonymous login successful (2) 访问共享服务 smbclient //SMB_SERVER[/SHARE_NAME] [-U USERNAME] ##-U大写的 [root@centos6 ~]# smbclient //192.168.197.129/home -U centos Enter centos's password: Domain=[MYGROUP] OS=[Windows 6.1] Server=[Samba 4.2.3] tree connect failed: NT_STATUS_BAD_NETWORK_NAME [root@centos6 ~]# smbclient //192.168.197.129/homes -U centos Enter centos's password: Domain=[MYGROUP] OS=[Windows 6.1] Server=[Samba 4.2.3] smb: \> ls . D 0 Tue Oct 18 16:12:19 2016 .. D 0 Tue Oct 18 16:12:19 2016 .mozilla DH 0 Fri Oct 14 21:35:44 2016 .bash_logout H 18 Fri Nov 20 13:02:30 2015 .bash_profile H 193 Fri Nov 20 13:02:30 2015 .bashrc H 231 Fri Nov 20 13:02:30 2015 61410 blocks of size 524288. 61345 blocks available smb: \> help ? allinfo altname archive blocksize cancel case_sensitive cd chmod chown close del dir du echo exit get getfacl geteas hardlink help history iosize lcd link lock lowercase ls l mask md mget mkdir more mput newer open posix posix_encrypt posix_open posix_mkdir posix_rmdir posix_unlink print prompt put pwd q queue quit readlink rd recurse reget rename reput rm rmdir showacls setea setmode stat symlink tar tarmode timeout translate unlock volume vuid wdel logon listconnect showconnect .. ! 常用命令 put mget ls cd mkdir pwd del ... lcd 切换本地工作目录 (2)mount.cifs mount -t cifs //SMB_SERVER/SHARED_ID /MOUNT_POINT -o username=USER,password=PASS 注意:挂载操作中的用户,与-o选项中指定的用户直接产生映射关系;访问挂载,是以-o选项指定的用户身份运行,与本地用户以ID产生映射; /SHARED_ID 可以不输入 SHARED_ID就是配置段中共享文件系统设置中的[SHARED_ID]
[root@centos6 ~]# mount -t cifs //192.168.197.129/homes /mnt -o user=centos,password=yang [root@centos6 ~]# mount //192.168.197.129/homes on /mnt type cifs (rw)
自定义共享的方式:
修改主配置文件,、/etc/samba/smb.cof,在共享文件系统配置段加入下面的配置即可定义自定义共享
[shared_ID] ###共享资源名和本地文件系统路径名可以不一致。随便起 comment = ###注释信息 path = ###文件系统路径 guest ok = ###是否允许其来宾用户访问 read only = ###是否只读,不是只读就是可读写 public = ###是否为所有人可见,来宾,匿名用户。 browseable = ###浏览控制,非属组合属主用户是否可见资源。 write list = ###有写权限的用户,相当于黑名单。 注意:writable = yes 不能与write list共存。否则用户还是有写权限。 write list可以使用组来定义一个组内的用户都是否拥有写权限。 write list = +GROUPNAME ##注意要有个加号。 注意:只要用户拥有服务的写权限,就能删除文件,哪怕属主不是他。 注意:定义所用户在服务级的写权限write = yes (read only = no)不建议与write list同时使用;
检查配置文件是否有语法错误:testparm命令
查询samba服务器状态
smbstatus命令: 显示samba服务的相关共享的访问状态信息; -b:显示简要格式信息; -v:显示详细格式信息; Samba version 4.2.3 PID Username Group Machine Protocol Version ------------------------------------------------------------------------------ 40302 nobody nobody 192.168.197.128 (ipv4:192.168.197.128:43946) NT1 Service pid machine Connected at ------------------------------------------------------- public 40302 192.168.197.128 Tue Oct 18 05:21:50 2016 No locked files
总结:
C/S架构。用户以系统用户身份登录指定的共享资源。没有默认登录根目录。
samba的用户必须为系统用户,但是密码是单独设置的。可以使用smbpasswd, pdbedit为用户设置密码。用户登录samba服务后都是以系统用户身份登录。共享资源要给予相应授权才能读写查看。
samba的工作模型,工作组模型,域控制器模型。一般文件共享工作组模型就可以了。
设置共享目录。要修改主配置文件/etc/samba/smb.conf文件。在共享文件系统配置段,定义该目录的共享。定义好后需要使用testparm命令测试语法。
samba有匿名用户,guest来宾用户。匿名用户使用nobody这个系统用户登录。共享文件系统配置中控制目录是否可读写。是否可浏览到
登录samba服务器必须制定要访问资源名称shared_id否则不能的登录,需要事先查询都有哪些资源。或用户自己就知道资源。
samba可使用udp协议也可以使用tcp协议。根据客户端与服务端的协商。
udp137,138 tcp139,445
samba提供的共享资源是可以挂在到其他主机上的。
mount -t cifs或使用mount.cifs
注意:挂载点无论是什么权限,只要挂载了cifs共享目录,该目录就是服务端远程主机的上共享目录的权限,属主和属组。
这挂在点就是samba服务器上共享目录的映射(权限,uid,gid),呈现在客户端。客户端的用户操作该挂载点,就想操作本地文件系统一样。只要本机有与之对应的uid或gid的用户就能拥有该目录的权限。但是客户端主机对挂载点的操作,是根据服务器授权的。
客户端主机对共享资源的挂在点权限是登录账号(服务端的系统用户)在服务端主机服务和文件系统的授权的交集,并且客户端主机有gid或uid与服务端共享目录的uid和gid相同,才会有属主和数组权限。
最重要的:权限的最终权限决定于本地文件系统授权和服务授权的交集,其次才是客户端是否有与之对应uid或gid的用户,否者就只能是其他人身份(但是其他人身份,guest用户或匿名用户的授权又取决于服务授权)。
实现了类似UIDmap功能。只要uid本机中有,就认为是本地主机上的文件。并拥有响应权限。服务端说这个文件是谁的就是谁的。inux只认uid和gid,拿着自己家的钥匙打开任意一家的门,而且还是主人身份。
服务端共享目录的权限及属主属组
[root@centos7 ~]# ll -d /home/samba/ drwxrwxr-x. 3 centos centos 27 Oct 18 07:58 /home/samba/ [root@centos7 ~]# id centos uid=1001(centos) gid=1001(centos) groups=1001(centos)
客户端挂在后,挂载点权限属主和属组的变化
[root@centos6 ~]# ll -d /mydata/ drwxr-xr-x. 3 root root 4096 Oct 15 05:41 /mydata/ [root@centos6 ~]# mount -t cifs //192.168.197.129/public/ /mydata/ -o username=centos,password=yang [root@centos6 ~]# ll -d /mydata/ drwxrwxr-x. 3 yang yang 0 Oct 18 19:52 /mydata/
客户端只要有与之对应的uid或gid就拥有相应权限,否则就只能是其他人的权限。
[root@centos6 ~]# id yang uid=1001(yang) gid=1001(yang) groups=1001(yang)
下面的练习暂不使用samba,会有很多问题。但是要使用nfs测试下述实验。
练习:
(1) 创建一个共享mydata,路径为/mysql/data,客户端1挂载至/mydata;而后客户端1主机安装mysql或mariadb,将数据目录设定为/mydata,要确保mysql服务能正常 运行,但数据目录位于samba server上; mysql更换数据位置要初始化数据库。
(2) 客户端2主机使用类似客户端1主机的方式挂载mydata共享至本地的/mydata目录,而后,直接安装mysql或mariadb server,设定其数据目录为/mydata;测试
(a) 客户端1 mysql服务运行时,客户端2的mysql服务能否启动?
(b) 客户端1 mysql服务停止时,客户端2的mysql服务能否启动?
练习目的:
部署samba服务,熟悉权限设定
该项目测试两台mysql公用一个使用samba共享的目录为数据位置,测试能否同时使用。
应该会出现很多问题,但是生产环境中使用该模式,是当一台mysql出现问题,立即启用第二台服务器。
练习:
创建一个共享ftp,路径为/var/ftp/pub;要求仅centos和gentoo用户能上传;此路径对其它用户不可见;
练习:
(1) samba sever共享/data/application/web,在目录中提供wordpress;
(2) 部署两台amp服务器,均挂载此共享作为某主机的文档映射路径;
(3) 验正两台主机上的wordpress是否可被同时访问;
(a) 发一个文件,验正图片上传等功能; (b) 在任一客户端上访问此应用,多次刷新,确认下所有资源访问是否正常 ;
练习目的:
两台web前端服务器使用同一个存储,该存储上部署samba服务提供共享存储,部署mysql。
测试是两台服务器是否能够同时响应用户的请求对数据库进行读写。
部署dns实现一个FQDN两条A记录。实现负载均衡。其中一台web前端出现故障,删除该web前端的
A记录。实现切换,将缓存时间调短一些,尽量少的影响客户访问(客户端有dns缓存)。
两个实验写好文档和测试文档。下周一,上交,pdf文档。
原创文章,作者:yyw,如若转载,请注明出处:http://www.178linux.com/56562