跳至正文

ubuntu 安装samba

一、安装软件

apt install samba samba-common

二、创建共享目录

mkdir /mnt/samba

三、目录授权

chmod 775 /mnt/samba

四、修改配置文件

/etc/samba/smb.conf

[shared]
  # 共享文件目录描述
  comment = Shared Dirs
  # 共享文件目录
  path = /mnt/sdb1
  # 设置共享是否允许guest账户访问
  public = no
  # 设置共享的管理员,如果 security =share 时,引项无效,多用户中间使用逗号隔开,例如admin users = samba,user1,user2
  admin users = samba
  # 设置共享是否可浏览,如果no就表示隐藏,需要通过IP+共享名称进行访问
  browseable = yes
  # 设置共享是否具有可写权限
  writeable = yes
  # 创建的文件权限为666
  create mask = 0666
  # 创建的目录权限为666
  directory mask = 0666
  # 设置共享是否具有只读权限
  # read only  =  yes/no                   
  # 设置允许访问共享的用户,例如valid users = user1,user2,@group1,@group2(多用户或组使用逗号隔开,@group表示group用户组)
  # valid users  =  username
  # 设置不允许访问共享的用户
  # invalid users  =  username
  # 设置在共享具有写入权限的用户,例如例如write list  = user1,user2,@group1,@group2(多用户或组使用逗号隔开,@group表示group用户组)
  # write list  =  username



备注:
[global]
  #设置用户访问samba服务器的验证方式 ,一共四种验证方式。
  # 1. share:用户访问Samba Server不需要提供用户名和口令, 安全性能较低。
  # 2. user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立。
  # 3. server:依靠其他Windows NT/2000或Samba Server来验证用户的账号和密码,是一种代理验证。此种安全模式下,系统管理员可以把所有的Windows用户和口令集中到一个NT系统上,使用Windows NT进行Samba认证, 远程服务器可以自动认证全部用户和口令,如果认证失败,Samba将使用用户级安全模式作为替代的方式。
  # 4. domain:域安全级别,使用主域控制器(PDC)来完成认证。
  security = share                  

五、管理samba用户

samba使用 Linux 的用户和权限系统,但是有自己的认证机制默认使用的是用户口令认证模式;samba服务程序的数据库要求,账户必须在当前系统中已存在,不然创建不成功且日后在管理文件时将导致文件的权限属性混乱

samba用户有两种管理方式

1、smbpasswd
smbpasswd命令属于samba套件,能够实现添加或删除samba用户和为用户修改密码,密码为单文件存储在/etc/samba/下

 smbpasswd [options] USERNAME
   -a:添加
   -x:删除
   -d:禁用
   -e:启用
   -n:空密码 :在globa中更改 null passwords -true

2、pdbedit
生成数据库文件存储用户passdb.tdb同样在/etc/samba/下

pdbedit:
  -L:列出samba服务中的所有用户;
  -a, –create:添加用户为samba用户;
    -u, –user=USER:要管理的用户;
  -x, –delete:删除用户;
  -t, –password-from-stdin:从标准输出接收字符串作为用户密码;
    使用空提示符,而后将密码输入两次;

六、重启服务

systemctl restart smbd

七、配置文件详解

参考文章

在安装了Samba服务软件后,会自动在Linux系统中生成一系列的配置文件,了解它们的用途是配置Samba服务器所必须的。

1、主要配置文件 /etc/Samba/smb.conf
这是Samba服务的主配置文件,文件由一系列段和选项构成.一个段由一对方括号中的段名开始,直到下一个段名结束,主要由全局设置(Global Settings)和共享定义(Share Definitions)两部分组成。其中全局设置定义了对影响整个Samba系统运行的全局选项,用于设置整个系统的规则,如果在其他段中没有再对这些选项进行重新设置的话,就以全局选项为主:共享定义则是对系统中共享资源进行定义,该部分可以由多个段组成,其中常见的包括:用户主目录段,共享目录和打印机段,每个段中可以再定义详细的共享选项。smb.conf文件的格式如下所示:
----------------------------------------------------------------------------

#======================= Global Settings =======================

[global]      #全局选项  

#======================= Share Definitions =======================

[homes]       #共享选项
   
[printers]    #共享选项
 
-----------------------------------------------------------------------------
smb.conf配置文件中使用;号和#号作为注释符,凡是使用这两个符号开头的行都会被Samba视为注释行而忽略处理,这个配置文件中,大小写是没关系的,因为Windows不分大小写。配置文件中选项的格式如下所示。
-------------------------
选项名称 = 选项值
-------------------------


四、常用的全局选项及说明如下所示

先说一下samba定义的变量:
%S = 当前服务名(如果有的话)
%P = 当前服务的根目录(如果有的话)
%u = 当前服务的用户名(如果有的话)
%g = 当前用户说在的主工作组
%U = 当前对话的用户名
%G = 当前对话的用户的主工作组
%H = 当前服务的用户的Home目录
%v = Samba服务的版本号。
%h = 运行Samba服务机器的主机名
%m = 客户机的NETBIOS名称
%L = 服务器的NETBIOS名称
%M = 客户机的主机名
%N = NIS服务器名
%p = NIS服务的Home目录
%R = 说采用的协议等级(值可以是CORE, COREPLUS, LANMAN1, LANMAN2,NT1)
%d = 当前服务进程的ID
%a = 客户机的结构(只能识别几项:Samba,WfWg,WinNT,Win95)
%I = 客户机的IP
%T = 当前日期和时间

1、workgroup
该选项设置Samba服务器所属工作组名称,通过网上邻居可以从该工作组中找到该Samba服务器。默认设置如下:

workgroup = WORKGROUP
-------------------------------------------------------
2、wins support
该选项设置Samba服务器是否作为WINS服务器。如果要启用该选项,则不能设置wins server选项,默认设置如下:

#   wins support = no
选项默认都是被注释掉了
-------------------------------------------------------
3、wins serve

该选项指定WINS服务器的IP地址或主机名。默认设置如下:

;   wins server = w.x.y.z
选项默认都是被注释掉了
-------------------------------------------------------
4、interfaces 和bind interfaces only = yes
如果服务器有多个IP地址或网络接口,可以使用interfaces选项把IP地址或网络接口列出来。如果bind interfaces only选项设置为yes,则表示Samba将绑定(监听)interfaces选项所设置的IP地址或网络接口,只通过这个些IP地址或网络接口提供服务,默认设置如下:

;   interfaces = 127.0.0.0/8 eth0

;   bind interfaces only = yes
上面两个选项默认都是被注释掉了
-------------------------------------------------------
5、dns proxy
该选项设置是否启用DNS代理功能,默认设置如下:

dns proxy = no
-------------------------------------------------------
6、log file
该选项用来设置Samba日志文件的存放位置和文件名称,默认设置如下:

log file = /var/log/samba/log.%m
这个选项中的.%m是Samba配置文件的保留变量,表示客户端的NetBIOS名称。
-------------------------------------------------------
7、max log size
日志文件最大能达到多少Kbytes,如果超过该限制,则Samba自动在当前的日志文件名后面加上“.old”然后创建一个新的日志文件继续写入。如果为0,则表示没有大小限制。默认设置如下:

max log size = 1000
-------------------------------------------------------
8、syslog only
设置Samba只通过syslog进行日志记录。默认设置如下:

#   syslog only = no   
默认这个选项被注销掉
-------------------------------------------------------
9、syslog
syslog的日志级(0,err)(1,warning)(2,notice)(3,ifno)(4或以上,debug)。默认设置如下:

syslog = 0
-------------------------------------------------------
10、server role
服务器角色。定义Samba将以何种模式操作。可能的值是“独立服务器”、“成员服务器”、“经典主域服务器”、“经典备份域控制器”、“活动目录域控制器",默认设置如下:

server role = standalone server
-------------------------------------------------------
11、passdb backend
密码数据库格式,之前samba服务器的用户信息都是以数据文件信息存放,为了加快速度, 目前密码文件已经转为使用数据库了! 默认的数据库格式为tdbsam ,存放在/var/lib/samba/private/passdb.tdb,早期使用smbpasswd命令来管理用户密码, 后来使用 TDB 数据库,因此建议使用新的 pdbedit 指令来管理用户数据smbpasswd仍然可以使用。默认设置如下:

passdb backend = tdbsam
-------------------------------------------------------
12、obey pam restrictions
在Samba中集成PAM的访问控制功能。默认设置如下:

obey pam restrictions = yes
-------------------------------------------------------
13、 unix password sync = yes
当用户改变samba加密的密码时,SAMBA会试着更新UNIX用户密码。默认设置如下:

unix password sync = yes
-------------------------------------------------------
14、passwd program
这个就指定更改密码的命令。默认设置如下:

passwd program = /usr/bin/passwd %u
-------------------------------------------------------
15、passwd chat
更改密码时的对话。默认设置如下:

passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
-------------------------------------------------------
16、pam password change
为samba打开pam改变密码控制机制的支持。默认设置如下:

pam password change = yes

-------------------------------------------------------
17、map to guest
这个配置的意思是将所有samba系统主机所不能正确识别的用户都映射成guest用户。默认设置如下:

map to guest = bad user
-------------------------------------------------------
18、usershare max shares
最大用户共享数量,0表示禁用用户共享。默认设置如下:
 
usershare max shares = 100
-------------------------------------------------------
19、usershare allow guests
是否允许guest用户访问,这相当于在共享定义中设置guest ok = yes选项,最终以共享中的设置为准。

usershare allow guests = yes
-------------------------------------------------------

以下是smb.conf配置文件中没有提到的,但是可以通过testparm -v 命令查看到默认设置,如果不符合自己的实际设置,可以在配置文件中加入相应
的选项。
-------------------------------------------------------
20、netbios name = DEBIAN

设置Samba Server的NetBIOS名称,在“网上邻居”中显示的主机名,如果不填,则默认会使用该服务器的DNS名称的第一部分。
-------------------------------------------------------
21、server string = Samba 4.5.12-Debian

设定 Samba Server 的注释,可以是任何字符串,也可以不填。宏%v表示显示Samba的版本号。
-------------------------------------------------------
22、hosts allow = 127. 192.168.1. 192.168.10.1
设置允许连接到Samba Server的客户端,多个参数以空格隔开。可以用一个IP表示,也可以用一个网段表示。这选项也可以
在共享段起作用,只对某个共享的目录单独起作用。

hosts deny 与hosts allow 刚好相反。

ALL 表示所有用户,例如:hosts allow = ALL

EXCEPT 表示排除,例如:允许除192.168.1.100以为的所有主机访问,格式为 hosts allow = ALL EXCEPT 192.168.1.100

-------------------------------------------------------
23、max connections = 0

max connections用来指定连接Samba Server的最大连接数目。如果超出连接数目,则新的连接请求将被拒绝。0表示不限制。
-------------------------------------------------------
24、deadtime = 0

deadtime用来设置断掉一个没有打开任何文件的连接的时间。单位是分钟,0代表Samba Server不自动切断任何连接。
-------------------------------------------------------
25、time server = yes/no

time server用来设置让nmdb成为windows客户端的时间服务器
-------------------------------------------------------
26、security = user

设置用户访问Samba Server的验证方式,一共有四种验证方式。
1. user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立。
2. domain:域安全级别,使用主域控制器(PDC)来完成认证。
3. auto:这是Samba中的默认安全设置,Samba会通过服务器角色参数(如果设置)来确定安全模式。
4. ads:在此模式下,Samba将充当ADS领域中的域成员

在samba4中share 和 server验证方式已被弃用
-------------------------------------------------------
27、encrypt passwords = yes/no

是否将认证密码加密。因为现在windows操作系统都是使用加密密码,所以一般要开启此项。不过配置文件默认已开启。
-------------------------------------------------------
28、username map = /etc/samba/smbusers

用来定义用户名映射,比如可以将root换成administrator、admin等。不过要事先在smbusers文件中定义好。比如:root = administrator admin,这样就可以用administrator或admin这两个用户来代替root登陆Samba Server,更贴近windows用户的习惯。
-------------------------------------------------------
29、guest account = nobody

用来设置Samba中guest用户对用的系统用户名。
-------------------------------------------------------
30、load printers = yes/no

设置是否在启动Samba时就共享打印机。现行几乎都是网络打印机了,默认关闭就可以,这里也不讨论打印机的问题。
-------------------------------------------------------
31、 smb ports = 139 445
指定服务监听SMB流量的端口。

五、常用的共享选项及说明


在该段中指定了一个通过Samba进行共享的目录,定义用户访问该目录的各种设置。如下所示:

[共享名称]:这个共享名称很重要,它是一个代号而已,用户在“网上邻居”中所看到的共享目录名

comment = 任意字符串
说明:comment是对该共享的描述,可以是任意字符串。
 
path = 共享目录路径
说明:path用来指定共享目录的路径。可以用%u、%m这样的宏来代替路径里的unix用户和客户机的Netbios名,用宏表示主要用于[homes]共享域。例如:如果我们不打算用home段做为客户的共享,而是在/home/share/下为每个Linux用户以他的用户名建个目录,作为他的共享目录,这样path就可以写成:path = /home/share/%u; 。用户在连接到这共享时具体的路径会被他的用户名代替,要注意这个用户名路径一定要存在,否则,客户机在访问时会找不到网络路径。同样,如果我们不是以用户来划分目录,而是以客户机来划分目录,为网络上每台可以访问samba的机器都各自建个以它的netbios名的路径,作为不同机器的共享资源,就可以这样写:path = /home/share/%m 。
 
browseable = yes/no
说明:browseable用来指定该共享是否在“网上邻居”中可见。
 
writable = yes/no
说明:writable用来指定该共享路径是否可写。

read only = yes/no
说明:设置共享目录为只读,这个选项和writable是互斥的,最好不要两个同时出现如果同时出现,那么最后出现的那个设置为主要的设置。
 
available = yes/no
说明:available用来指定该共享资源是否可用。
 
admin users = 该共享的管理者
说明:admin users用来指定该共享的管理员(对该共享具有完全控制权限)。在samba 3.0中,如果用户验证方式设置成“security=share”时,此项无效。
例如:admin users =bobyuan,jane(多个用户中间用逗号隔开)。
 
valid users = 允许访问该共享的用户
说明:valid users用来指定允许访问该共享资源的用户。
例如:valid users = bobyuan,@bob,@tech(多个用户或者组中间用逗号隔开,如果要加入一个组就用“@+组名”表示。)
 
invalid users = 禁止访问该共享的用户
说明:invalid users用来指定不允许访问该共享资源的用户。
例如:invalid users = root,@bob(多个用户或者组中间用逗号隔开。)
 
write list = 允许写入该共享的用户
说明:write list用来指定可以在该共享下写入文件的用户。
例如:write list = bobyuan,@bob
 
public = yes/no
说明:public用来指定该共享是否允许guest账户访问。
 
guest ok = yes/no
说明:意义同“public”。

create mask = 0700
说明:指定用户通过Samba在该共享目录中创建文件的默认权限。0600代表创建文件的权限为rw-------

directory mask = 0700
说明:指定用户通过Samba在该共享目录中创建目录的默认权限。0600代表创建目录的权限为rwx------


更多设置参考官方文档:
https://www.samba.org/samba/docs/man/
用户映射
由于Samba用户必须要与操作系统用户同名,出于系统安全或使用习惯的考虑,我们可以把上面的laopi用户映射为administrator用户或admin用户,映射后就无需在添加administrator或admin用户了,也可以防止Samba用户通过Samba帐号来猜测操作系统用户的信息。映射后的用户其权限和密码都和laopi一样,映射步骤如下:

1、编辑smb.conf文件,在[global]部分添加用户映射文件(该文件由用户手动创建,可以把他放在系统可以访问的任何位置),添加内容如下所示:

username map = /etc/samba/smbusers           #一般文件都放在这里

2、手动创建用户映射文件/etc/samba/smbusers ,该文件的格式如下:

Samba用户帐号 = 需要映射的用户列表

列表中的用户名之间以空格进行分割,如下所示。

root@debian:~# vim.tiny /etc/samba/smbusers

laopi = administrator admin

3、重启smbd和nmbd服务

发表回复