SAMBA

SAMBA介绍

	SMB(Server Message Block)服务器消息块,IBM 发布,最早是DOS网络文件共享,也称为SAMBA,SAMBA使用的是NetBIOS通讯协议。
	NetBIOS(Network Basic Input/Output System)
		网络的基本输入输出系统,它定义了一种软件接口以及在应用程序和连接介质之间提供通信接口的标准方法,作用是为局域网提供网络以及其他特殊功能。
		目前使用NetBIOS协议来获得局域网中计算机的名称来解析成IP地址实现数据的通信。
		SAMBA通过NetBIOS协议来获取对方主机的NetBIOS name进而来定位该主机所在位置,然后根据对方的主机赋予的权限来存取可用的资源。
		实际中SAMBA是通过两个服务来控制这两个步骤的,即nmb和smb两个服务。
			nmb是用来管理工作组合NetBIOS name解析,主要是通过UDP的137和138两个端口来负责名称解析任务。
			smb主要用来管理SAMBA主机所分享的目录、文件或打印机等,主要使用TCP协议的139和445两个端口进行数据的传输。
	Cifs(common internet file system),微软基于SMB 发布,最简单的实现就是window的网上邻居
	SAMBA:
		1991 年Andrew Tridgell, 实现windows 和UNIX 相通
	SAMBA 的功能:
		共享文件和打印,实现在线编辑 
		实现登录SAMBA 用户的身份认证
		可以进行NetBIOS 名称解析
		外围设备共享
	计算机网络管理模式:
		工作组WORKGROUP:计算机对等关系,帐号信息各自管理
		域DOMAIN:C/S 结构,帐号信息集中管理,DC,AD
	SAMBA的相关包:
		Samba   提供smb服务
		Samba-client  客户端软件
		samba-common   通用软件
		cifs-utils   smb客户端工具
		samba-winbind   和AD相关

	相关服务进程:
		smbd 提供smbd(cifs)服务 TCP:139,445
		nmbd NetBIOS 名称解析 UDP:137,138

	主配置文件:
		/etc/samba/smb.conf
		帮助参看:
			man smb.conf
			
	语法检查: 
		testparm [-v] [/etc/samba/smb.conf]

	客户端工具:
		smbclient
	mount.cifs

SAMBA配置

SAMBA的相关包

	Samba   提供smb服务
	Samba-client  客户端软件
	samba-common   通用软件
	cifs-utils   smb客户端工具
	samba-winbind   和AD相关

SAMBA服务器配置

	主配置文件:
		/etc/samba/smb.conf
		帮助参看:
			man smb.conf
		smb.conf 继承了.ini文件的格式,用[ ]分成不同的部分。
	全局设置:
		[global]  服务器通用或全局设置的部分
	特定共享设置:
		[homes]  用户的家目录共享
			comment = Home Directories	描述信息
			browseable = no	用户的家目录是否允许访问,这里通常设置为no
			writable = yes	是否允许写入内容
			valid users = %S	
			valid users = MYDOMAIN\%S	
		[printers]  定义打印机资源和服务
		[sharename]  自定义的共享目录配置
			paht=/PATH/TO/SHARE_DIRECTORY	共享内容路径
			comment=Comment String	描述信息
			guest ok ={yes|no}	是否允许访客访问
			public = {yes|no}	是否公开,与guest ok类似
			writable = {yes|no}	是否可写
			read only = {yes|no}	是否只读
			write list = +group_name	用户指明可写的用户列表,这里的+表示加组名,表示组里面的用户可以写
	# 和; 
		以此开头的语句为注释,大小写不敏感
	宏定义:
		%m  	客户端主机的NetBIOS名 
		%M  	客户端主机的FQDN
		%H  	当前用户家目录路径 
		%U  	当前用户用户名
		%g  	当前用户所属组 
		%h   	samba 服务器的主机名
		%L   	samba 服务器的NetBIOS名  
		%I  	客户端主机的IP
		%T  	当前日期和时间 %S 可登录的用户名
	全局内的配置:
		workgroup  	指定工作组名称
		server string  	主机注释信息
		netbios name  	指定NetBIOS名 名
		interfaces  	指定服务侦听接口和IP
		hosts allow  	可用“ “,”  ,空格,或tab 分隔,默认允许所有主机访问 , 也可在每个共享独立配置,如在[global] 设置,将应用并覆盖所有共享设置
			IPv4 network/prefix: 172.25.0.0/24 IPv4 前缀: 172.25.0.
			IPv4 network/netmask: 172.25.0.0/255.255.255.0
			主机名: desktop.example.com
			        以example.com后缀的主机名: .example.com
			示例:
			        hosts allow = 172.25.
			        hosts allow = 172.25. .example.com
		hosts deny 	拒绝指定主机访问
		config file=/etc/samba/conf.d/%U 	用户独立的配置文件
		Log file=/var/log/samba/log.%m  	不同客户机采用不同 日志
		max log size=50 	日志文件达到50K ,将轮循rotate, 单位KB
		passdb backend = tdbsam  	密码数据库格式
		Security 三种认证方式:
			share :	匿名(CentOS7 不再支持)
			user :	samba用户(采有linux 用户,samba 的独立口令)
			domain: 	使用DC(DOMAIN CONTROLLER) 认证
		实现samba 用户:
			包:samba-common-tools
			工具:smbpasswd pdbedit
			samba 用户须是Linux 用户,建议使用/sbin/nologin
	语法检查:
		testparm
			testparm - check an smb.conf configuration file for internal correctness
			testparm [OPTION...] <config-file> [host-name] [host-ip]
				-s, --suppress-prompt           	禁止输入提示
				-v, --verbose                   	同时显示默认选项
				-l, --skip-logic-checks         	跳过全局检查
				--show-all-parameters           	显示参数类型和可能值
				--parameter-name=STRING         	将testparm限制为命名参数
				--section-name=STRING           	将testparm限制为命名节
				--usage                         	显示简短的有用消息
				-d, --debuglevel=DEBUGLEVEL     	设置调试水平
				--option=name=value             	从命令行设置smb.conf选项

管理SAMBA用户

	前提:
		samab用户必须是系统中已经存在的用户
	添加samba 用户
		smbpasswd -a <user>
		pdbedit -a -u <user>
	修改用户密码
		smbpasswd <user>
	删除用户和密码 :
		smbpasswd –x <user>
		pdbedit –x –u <user>
	查看samba 用户列表 :
		/var/lib/samba/private/passdb.tdb
		pdbedit –L –v
	查看samba 服务器状态
		smbstatus

配置目录共享

	每个共享目录应该有独立的[ ] 部分
		[共享名称]  	远程网络看到的共享名称
		comment  	注释信息
		path 	所共享的目录路径
		public  	能否被guest 访问的共享,默认no ,和guest ok 类似
		browsable 	是否允许所有用户浏览此共享, 默认为yes,no 为隐藏
		writable=yes  	可以被所有用户读写,默认为no
		read only=no  和writable=yes 等价	如与以上设置冲突,放在后面的设置生效,默认只读
		write list  	三种形式:
			用户,@ 组名,+ 组名, 用,分隔
			如writable=no ,列表中用户或组可读写,不在列表中用户只读
		valid users 	特定用户才能访问该共享,如为空,将允许所有用户,用户名之间用空格分隔

基本特定用户和组的共享

	vim /etc/samba/smb.conf
		[share]
		path = /app/dir
		valid users=wang,@admins
		writeable = no
		browseable = no

SMB客户端访问

	UNC路径: Universal Naming Convention, 通用命名规范
		格式:\\sambaserver\sharename
	终端下使用smbclient 登录服务器
		smbclient -L instructor.example.com
		smbclient -L instructor.example.com -U wang
			> cd directory
			> get file1
			> put file2
		smbclient //instructor.example.com/shared -U wang
			可以使用-U 选项来指定用户% 密码,或通过设置和导出USER和PASSWD环境变量来指定

挂载CIFS文件系统

	手动挂载
		mount -t cifs -o user=wang,password=magedu //server//shared /mnt/smb
	开机自动挂载
		cat /etc/fstab  可以用文件代替用户名和密码的输入
			//server/homes /mnt cifs credentials=/etc/smb.txt 0 0
		cat /etc/smb.txt
			username=wang
			password=password
		 chmod 600 /etc/smb.txt

实现SMB共享

	一、在samba 服务器上安装samba包 
		yum -y install samba
	二、创建samba 用户和组
		groupadd -r admins
		useradd -s /sbin/nologin -G admins wang
		smbpasswd -a wang
		useradd -s /sbin/nologin mage
		smbpasswd -a mage
	三、创建samba 共享目录, 并设置SElinux
		mkdir /testdir/smbshare
		chgrp admins /testdir/smbshare
		chmod 2775 /testdir/smbshare
		semanage fcontext -a -t samba_share_t '/testdir/smbshare(/.*)?'
		restorecon -vvFR /testdir/smbshare
	四、samba 服务器配置
		vim /etc/samba/smb.conf
			security = user
			passdb backend = tdbsam
			[share]
			path = /testdir/smbshare
			write list = @admins
		systemctl start smb nmb
		systemctl enable smb nmb
		firewall-cmd --permanent --add-service=samba
		firewall-cmd --reload
	 五、samba 客户端访问
		安装包
			yum -y install cifs-utils
		用wang 用户挂载smb 共享并访问
			mkdir /mnt/wang
			mount -o username=wang //smbserver/share /mnt/wang
			echo "Hello wang" >/mnt/wang/wangfile.txt
		用mage 用户 挂载smb 共享并访问
			mkdir /mnt/mage
			mount -o username=mage //smbserver/share /mnt/mage
			touch /mnt/mage/magefile.txt

多用户SMB挂载

	SAMBA 共享默认只支持同时用一个用户挂载SMB 共享
	CentOS7 中可启用多用户挂载功能
		客户端挂载samba 共享目录后,在客户端登录的不同用户访问同一个samba的挂载点,可获得不同权限。
	
	一、samba 服务器配置
		yum install samba
		mkdir /multiuser
		vim /etc/samba/smb.conf
			[smbshare]
			path=/multiuser
			writable=no
			write list= @admins
	二、samba 服务器创建samba 用户
		useradd –s /sbin/nologin smbuser
		smbpasswd –s smbuser
		useradd –s /sbin/nologin –G admins wang
		smbpasswd –a wang
		useradd –s /sbin/nologin mage
		smbpasswd –a mage
	三、samba 服务器设置目录权限和SELinux对wang,admins 组分配目录读写权限
		chmod 777 /testdir/multiuser
		或者
		setfacl –m u:wang:rwx /testdir/multiuser
		setfacl –m g:admins:rwx /testdir/multiuser
		设置SELinux 标签:
			semanage fcontext -a -t samba_share_t '/testdir/multiuser (/.*)?'
			restorecon /testdir/multiuser
	四、samba 客户端启用多用户挂载
		yum -y install cifs-utils
		mkdir /mnt/smb
		echo 'username=smbuser' >/etc/multiuser
		echo 'password=centos' >>/etc/multiuser
		chmod 600 /etc/multiuser
		以多用户方式挂载:
			vim /etc/fstab
				//smbserver/smbshare /mnt/smb cifs credentials=/etc/multiuser,multiuser,sec=ntlmssp 0 0
		mount -a
	五、在samba 客户端用实现多用户访问
		useradd wang;useradd mage
		用root 访问
			ls /mnt/smb; touch /mnt/smb/root.txt
		用wang 访问
			ls /mnt/smb; touch /mnt/smb/wang.txt
			cifscreds add –u wang smbserver
			touch /mnt/smb/wang.txt
		用mage 访问
			cifscreds add –u mage smbserver
			ls /mnt/smb
			touch /mnt/smb/mage.txt

实现图形化管理

	一、在CentOS6( 第二张光盘) 上安装包
		yum install samba-swat
	二 、配置swat 服务
		vim /etc/xinetd.d/swat
		disable = no
		port = 901
		only_from = 127.0.0.1  此行改成172.16.0.0/16
		service xinetd restart
	三 、浏览器访问管理
		http://127.0.0.1:901  以root 用户登录
		注意:commit changes 后会自动重新加载配置,且自动将/etc/samba/smb.conf

相关SELinux 配置

	SMB 共享目录应设为samba_share_t 安全上下文
	semanage fcontext -a -t samba_share_t '/sharedpath(/.*)?'
	restorecon -vvFR /sharedpath
	SMB设共享目录安全上下文也可设 public_content_t ( 只读)和public_content_rw_t ( 读写).
	要支持读写,SElinux 布尔值smbd_anon_write 必须启用
	如用SMB 网络共享samba 服务器上的用户家目录,需在samba 服务器上启用布尔值samba_enable_home_dirs
	如需挂载远程SMB 目录做为本地用户家目录,需在SMB 客户机上启用布尔值use_samba_home_dirs
posted @ 2018-02-22 16:03  shenxm  阅读(456)  评论(0编辑  收藏  举报