Samba是和NFS类似都是网络文件系统。

就是实现跨平台的,文件共享,windows和linux之间的共享。当然也可以linux和linux。

在windows中不需要下载文件就可以直接使用,直接在服务器上编辑。

samba服务的端口
1)rhel 5 由两个进程完成的
smbd:处理smb数据的,实现文件和打印机共享 139 445 tcp
nmbd:名字解析 137 138 udp
2)rhel 6:一个进程实现
smbd: 139 445 tcp

1、最简单的共享:

配置思路:
1、安装软件 ,服务端安装samba 客户端安装samba-client windows不用安装。
2、编写配置文件。
3、重启服务
4、测试。

软件的安装:

服务端:

[root@localhost /]# yum install samba
Dependency Installed:
  avahi-libs.x86_64 0:0.6.31-17.el7           cups-libs.x86_64 1:1.6.3-29.el7             
  libldb.x86_64 0:1.1.29-1.el7                libtalloc.x86_64 0:2.1.9-1.el7              
  libtdb.x86_64 0:1.3.12-2.el7                libtevent.x86_64 0:0.9.31-1.el7             
  libwbclient.x86_64 0:4.6.2-8.el7            pytalloc.x86_64 0:2.1.9-1.el7               
  samba-client-libs.x86_64 0:4.6.2-8.el7      samba-common.noarch 0:4.6.2-8.el7           
  samba-common-libs.x86_64 0:4.6.2-8.el7      samba-common-tools.x86_64 0:4.6.2-8.el7     
  samba-libs.x86_64 0:4.6.2-8.el7            

Complete!

编写配置文件:

[root@localhost /]# tail -10 /etc/samba/smb.conf

map to guest = Bad User    // 允许匿名登录
最后加上这几行。

[sambashare]     //这个表示连接的名字,连接时用这个名字访问,而不是目录。
	comment = test sambas!!   //这个是描述,随便写,不过最好是标识信息。
	path = /samba-dir         //源文件,也就是共享目录的绝对路径
	browseable = yes          //是否允许不登录就可以查看共享目录
	public = yes              //与guest ok=yes是一样的,表示允许匿名共享
	writable = yes           //可写的。

客户端:
客户端要安装了samba-client软件。

[root@www nfs-172.16.12.14]# smbclient -L 172.16.12.14
Enter SAMBA\root's password: 
OS=[Windows 6.1] Server=[Samba 4.6.2]

	Sharename       Type      Comment
	---------       ----      -------
	print$          Disk      Printer Drivers
	sambashare      Disk      test sambas!!
	IPC$            IPC       IPC Service (Samba 4.6.2)
OS=[Windows 6.1] Server=[Samba 4.6.2]

	Server               Comment
	---------            -------

	Workgroup            Master
	---------            -------

客户端登录samba服务

[root@www nfs-172.16.12.14]# smbclient //172.16.12.14/sambashare  //输入服务端IP和共享模块名
Enter SAMBA\root's password:  //设置的是匿名直接回车
OS=[Windows 6.1] Server=[Samba 4.6.2]
smb: \> ls  //登录进来了
  .                                   D        0  Sat Nov  2 14:07:18 2019
  ..                                 DR        0  Sat Nov  2 14:07:18 2019

		41922560 blocks of size 1024. 40901980 blocks available
smb: \> ls
  .                                   D        0  Sat Nov  2 14:14:37 2019
  ..                                 DR        0  Sat Nov  2 14:07:18 2019
  111.txt                             N        0  Sat Nov  2 14:14:37 2019

		41922560 blocks of size 1024. 40901980 blocks available

在windows中操作。

直接输入服务端地址就好了

linux查询连接Samba用户名和密码 linux samba端口_Server


linux查询连接Samba用户名和密码 linux samba端口_bc_02

常用命令和ftp的类似:

常用命令:

ls:查看共享的文件列表

cd:切换服务器路径

lcd:切换本地路径

put:上传

get:下载

创建目录等操作是,要看共享的目录本身有没有这个权限。

否则就算samba给了读写权限也不能创建。

41922560 blocks of size 1024. 40901980 blocks available
smb: \> mkdir kkk
NT_STATUS_ACCESS_DENIED making remote directory \kkk
这个就是没有权限的

下面的就是有权限的,上传成功。

smb: \> put ggg.txt 
putting file ggg.txt as \ggg.txt (0.1 kb/s) (average 0.1 kb/s)
smb: \> ls
  .                                   D        0  Sat Nov  2 14:36:50 2019
  ..                                 DR        0  Sat Nov  2 14:07:18 2019
  111.txt                             N        0  Sat Nov  2 14:14:37 2019
  kkk                                 D        0  Sat Nov  2 14:33:50 2019
  ggg.txt                             A        6  Sat Nov  2 14:36:50 2019

		41922560 blocks of size 1024. 40901860 blocks available

最大访问上限:
在全局那一项里加
max connect = 1

设置最大访问限制为1 。

表示同时只能有一个人访问服务器。

linux查询连接Samba用户名和密码 linux samba端口_Server_03


这是第一个访问成功。

linux查询连接Samba用户名和密码 linux samba端口_bc_04

第二个访问失败,提示网络资源不足。

释放资源 就正常了。

linux查询连接Samba用户名和密码 linux samba端口_Server_05

2、用户名和密码访问登录
samba的用户比较特殊,一个用户要先存在于系统之中,再将系统用户设置samba的用户,如此才能在samba中使用。

将配置文件中设置匿名用户可登录的那一项取消。

map to guest = Bad User // 允许匿名登录

然后将共享模块里的public注释掉

将系统中的用户 sambauser1 sambauser2变为samba的用户并设置密码。

成功后就可以在客户端进行登录了。
服务端

[root@localhost /]# smbpasswd -a sambauser1
New SMB password:
Retype new SMB password:
Mismatch - password unchanged.
Unable to get new password.
[root@localhost /]# smbpasswd -a sambauser2
New SMB password:
Retype new SMB password:
Added user sambauser2.

客户端

[root@www gsc-test-ssh]# smbclient //172.16.12.14/sambashare -U sambauser1
Enter SAMBA\sambauser1's password: 
Domain=[LOCALHOST] OS=[Windows 6.1] Server=[Samba 4.6.2]
smb: \> ls
  .                                   D        0  Sat Nov  2 14:36:50 2019
  ..                                 DR        0  Sat Nov  2 14:07:18 2019
  111.txt                             N        0  Sat Nov  2 14:14:37 2019
  kkk                                 D        0  Sat Nov  2 14:33:50 2019
  ggg.txt                             A        6  Sat Nov  2 14:36:50 2019

		41922560 blocks of size 1024. 40901948 blocks available
smb: \>

查看samba用户

[root@localhost /]# pdbedit -L
sambauser2:1003:
sambauser1:1002:

只允许某个用户访问

[root@localhost /]# tail -1 /etc/samba/smb.conf
	
	valid users = sambauser1

只有1 能登陆 2不能登陆

[root@www gsc-test-ssh]# smbclient //172.16.12.14/sambashare -U sambauser2
Enter SAMBA\sambauser2's password: 
Domain=[LOCALHOST] OS=[Windows 6.1] Server=[Samba 4.6.2]
tree connect failed: NT_STATUS_ACCESS_DENIED
[root@www gsc-test-ssh]# smbclient //172.16.12.14/sambashare -U sambauser1
Enter SAMBA\sambauser1's password: 
Domain=[LOCALHOST] OS=[Windows 6.1] Server=[Samba 4.6.2]
smb: \>

允许组访问

[root@srv254-200 ~]# tail -1 /etc/samba/smb.conf
	valid users = @smbuser2   // @组名  或者   +组名

允许多个用户访问
配置文件

valid users = smbuser1 smbuser2

只限制某个用户

read list = smbuser2    //只读
互相不可见

如果想要让每个samba用户只看到对自己用户共享的文件,而看不到别的用户的共享。可以将每个用户的配置文件分来来写,并且主配置文件不做更改。比如一个用户art

[root@localhost ~]# cat /etc/samba/smb.conf.art
# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.

[global]
	workgroup = SAMBA
	security = user

	passdb backend = tdbsam

	printing = cups
	printcap name = cups
	load printers = yes
	cups options = raw

[homes]
	comment = Home Directories
	valid users = %S, %D%w%S
	browseable = No
	read only = No
	inherit acls = Yes

[printers]
	comment = All Printers
	path = /var/tmp
	printable = Yes
	create mask = 0600
	browseable = No

[print$]
	comment = Printer Drivers
	path = /var/lib/samba/drivers
	write list = @printadmin root
	force group = @printadmin
	create mask = 0664
	directory mask = 0775

[art]
        comment = art
        path = /smbvg/art
        write list = art
        create mask = 0664
        directory mask = 0775

这个配置文件只写art用户的共享,前边的都是原来的主配置文件的内容,不用变。同时修改用户的家目录为,这个用户的samba的共享目录。

第二个用户money

[root@localhost ~]# cat /etc/samba/smb.conf.money 
# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.

[global]
	workgroup = SAMBA
	security = user

	passdb backend = tdbsam

	printing = cups
	printcap name = cups
	load printers = yes
	cups options = raw

[homes]
	comment = Home Directories
	valid users = %S, %D%w%S
	browseable = No
	read only = No
	inherit acls = Yes

[printers]
	comment = All Printers
	path = /var/tmp
	printable = Yes
	create mask = 0600
	browseable = No

[print$]
	comment = Printer Drivers
	path = /var/lib/samba/drivers
	write list = @printadmin root
	force group = @printadmin
	create mask = 0664
	directory mask = 0775
[money]
	comment = money
	path = /smbvg/money
	write list = money
	create mask = 0664
	directory mask = 0775

这个配置文件中前变的不变 后边之加上money这个用户的共享。同样修改家目录为这个用户samba共享的目录。

这样就可以实现 money用户登录samba只能看到money的共享目录,而看不到art的。

一些选项的含义

[global]        //全局配置    

		workgroup = SAMBA         //工作组
		security = user              //安全验证的设置    	   
	    share:匿名共享,不需要提供用户名和密码直接就能访问共享
	    user:需要提供用户名和密码才能访问共享,验证使用的是本地服务器
	    server:       依靠其他samba server来验证用户的密码账号
	    domain:  域安全级别,使用主域控制器来完成验证
	    ads:
		passdb backend = tdbsam         //用户后台
	    smbpasswd:使用smb自己的工具来给用户设置smb密码
	    tdbsam:使用数据库文件来建立用户数据库
	    ldapsam:基于LDAP的ldap服务
		printing = cups                    //设置共享打印机的类型
		printcap name = cups          //设置共享打印机的配置文件
		load printers = yes         //是否加载打印机
		cups options = raw      //跟打印机相关的选项

    [homes]     //共享名
	    comment = Home Directories //注释,对共享的描述
	    browseable = no     //是否允许不登录就可以查看共享目录 
                smbclient -L            查看共享目录的	            
	
	    valid users = %S, %D%w%S         //允许访问的用户
    	read only = No         //是否只读
    	inherit acls = Yes

    [printers]
	    comment = All Printers
	    path = /var/spool/samba   //共享的绝对路径
	    browseable = no              
	    create mask = 0600                 
	    printable = yes
	[print$]
	    comment = Printer Drivers

非交互式设置samba的密码。

echo -e "123\n123" | smbpasswd -a -s sambauser1
[root@localhost ~]# echo -e "123\n123" | smbpasswd -a -s sambauser1
Added user sambauser1.