Samba简介

在90年代初,UNIX机器之间的网络文件系统可以基于NFS协议,Window机器之间的网络文件系统可以基于CIFS协议(目前的Windows已经内置了NFS支持)。Windows和UNIX机器之间无法共享网络文件系统,Samba因此出现。

Samba 是 SMB/CIFS 网络协议的实现, 它作为NFS的补充使得在 Linux 和 Windows 系统中进行文件共享、打印机共享更容易实现。Samba对Linux、DOS、Windows、Mac OS等系统提供客户端支持。

本文中的Samba主要指Samba4服务器软件,它提供AD(活动目录,Active Directory)、文件共享以及打印服务。它支持基于SMB/CIFS、DCE/RPC、LDAP等协议与客户端通信。

服务器端安装

安装必要的软件

Shell

1

2

#安装Samba4

sudo apt-get install samba samba-common python-glade2 system-config-samba

提供一个匿名共享目录给Windows客户端访问

Shell

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

#备份原配置文件

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

#创建共享目录

sudo mkdir -p /var/samba/anonymous

 

sudo vi /etc/samba/smb.conf

#设置为以下内容

[global]

#工作组名称,和Windows客户端的工作组保持一致

workgroup = GMEM

netbios name = amethystine

security = user

#把所有不能识别的用户映射为guest

map to guest = bad user

dns proxy = no

#方括号内是共享目录的名字

[Anonymous]

path = /var/samba/anonymous

browsable =yes

writable = yes

guest ok = yes

read only = no

# 限定能访问此共享目录的IP地址

hosts allow = 10.0.0.0/255.0.0.0

 

#修改目录权限

cd /var/samba

sudo chmod -R 0755 anonymous/

sudo chown -R nobody:nogroup anonymous/

 

#重启服务

service samba restart

完成以上步骤后,在Windows资源管理器中输入\\amethystine(如果域名解析没有设置,可以使用\\Ubuntu服务器的IP地址),即可看见一个目录:Anonymous,可以写入文件。

设置一个需要身份验证的共享目录

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

#创建共享目录

sudo mkdir -p /var/samba/secured

#创建共享目录专用组和用户

sudo addgroup smbgrp

sudo adduser smbuser -ingroup smbgrp

#根据提示输入必要的用户信息

 

#添加Samba用户,根据提示设置密码,例如smb

sudo smbpasswd -a smbuser

 

#在上节的smb.conf中增加下面一段内容:

[secured]

path = /var/samba/secured

valid users = @smbgrp

guest ok = no

writable = yes

browsable = yes

 

 

#修改目录权限

cd /var/samba

sudo chmod -R 0770 secured/

sudo chown -R smbuser:smbgrp secured/

 

#重启服务

service samba restart

完成上述设置后,即可使用smbuser来访问secured目录。

客户端访问

Windows客户端

在资源管理器中可以直接访问,例如 \\server\Anonymous ,如果需要身份验证,资源管理器会弹出对话框

Linux客户端

可以在文件管理器(例如nautilus)中输入 smb://server/ 访问

还可以使用命令行:

Shell

1

2

3

4

# 命令格式:

smbclient //server/sharename -U username

# 举例:

smbclient //zircon.local/Anonymous

访问Windows网络驱动器

使用Samba客户端可以直接在Linux中访问Windows网络驱动器(Network Driver),例如:smb://192.168.0.200/d$/ ,输入合法的远程机器用户名、密码即可。

挂载文件系统

现代Linux内核自带cifs模块(对于Ubuntu14.04之类的系统,你可以需要到synaptic中搜索cifs-utils、mount.nfs并安装),这是一个特殊的文件系统,用它可以挂载Samba共享目录:

Shell

1

2

3

4

5

6

7

8

9

10

# 命令格式:

mount -t cifs //server/sharename mountpoint

# 举例:

sudo mkdir -p /nas/zircon/Anonymous

sudo chmod 777 /nas/zircon/Anonymous

sudo mount -t cifs //zircon.local/Anonymous /nas/zircon/Anonymous

# 指定用户密码

sudo mount -t cifs //10.0.0.3/tdj_p_w_picpaths /tmp/tudouji/p_w_picpaths -o username=alex,password=lavender

# 挂载Windows共享目录为读写,由于Linux不理解Windows用户和权限,Windows也不理解UNIX用户,因此你需要指定uid、gid选项,才能保证可读写

sudo mount -t cifs //10.0.0.3/tdj_p_w_picpaths /tmp/tudouji/p_w_picpaths -o username=alex,password=lavender,rw,uid=alex,gid=alex

或者修改 /etc/fstab 以便在系统启动时自动挂载:

Shell

1

2

3

4

5

6

# 格式:

//server/sharename mountpoint cifs user=user,pass=password 0 0

# 如果没有在NAS上设置任何用户,则:

//server/sharename mountpoint cifs guest,_netdev,uid=curusername 0 0

# 举例

//zircon.local/Anonymous /nas/zircon/Anonymous cifs guest,_netdev,uid=pi 0 0