Fork me on GitHub

samba-4.12.3版本 smb.conf 配置方式

1. 配置说明

1.1> 文件位置

Samba服务的主配置文件是smb.conf,默认在/etc/samba/目录下。

1 [root@localhost /]# vim etc/samba/smb.conf      # 文件路径
2 [global]
3 workgroup = ...
4 server string = ...
5 netbios name = ...
6 security = ...
7 map to guest = ...
8 dns proxy = ...

 

1.2> 文件配置格式

smb.conf含有多个段,每个段由段名开始,直到下个段名。每个段名放在方括号中间。

每段的参数的格式是:名称 = 值。挨着等号的两侧可以留出空格, 解放排版强迫症患者。

配置文件中一行一个段名和参数,除了[global] 段外,段名和参数名不分大小写。

所有的段都可以看作是一个共享资源。段名是该共享资源的名字,段里的参数是该共享资源的属性。

 1 [global]          # 段名, 也将是Windows下访问共享时的文件名
 2 workgroup = ...
 3 server string = ...
 4 netbios name = ...
 5 security = ...
 6 map to guest = ...
 7 dns proxy = ...
 8 
 9 [data]
10 path = /.../.../
11 browseable = ...
12 writable = ...
13 guest ok = ...
14 read only = ...

 

1.3> 三个特殊 <section header>

[global]

[global] 下配置的内容是全局可见的,但是在需要的时候,我们可以在其他 [自定义共享] 中定义某些属性来覆盖 [global] 的对应选项定义,比如我们在全局中配置了 deadtime = 10,作用为10分钟强制断线,我们在 [自定义共享] 的局部配置了 deadtime = 20,那么用户访问这个  [自定义共享] 将会20分钟强制断线。如果 [自定义共享] 的局部没有配置 deadtime 那么他依旧是10分钟强制断线。

[homes]

[homes] 下的配置作用为:当客户端发起访问共享服务请求时,samba服务器就查询 smb.conf 文件是否定义了该共享服务,如果没有指定的 [自定义共享] ,但 smb.conf 文件定义了 [homes] 时,samba 服务器会将请求的共享服务名看做是某个用户的用户名,并在本地的 password 文件中查询该用户,若用户名存在并且密码正确,则 samba 服务器会将 [homes] 中的选项定义克隆出一个共享服务给客户端,该共享的名称是用户的用户名。

[printers]

[printers] 用于提供打印服务。当客户端发起访问共享服务请求时,没有特定的服务与之对应,并且 [homes] 也没有找到存在的用户,则samba服务器将把请求的共享服务名当做一个打印机的名称来进行处理。

 

1.4> 其他注意事项

1.4.1 配置中,以“=”来划分选项名和选项值

1.4.2 如果说配置过长,可以在某行的末尾使用续行符“\”来在下一行继续某选项的定义

1.4.3 共享的服务器名称,以及配置选项不区分大小写

1.4.4 配置保存完成后,使用 testparm 命令可以测试 smb.conf 配置是否正确。

1.4.5 使用 testparm -v 命令可以详细的列出 smb.conf 支持的配置参数。

1.4.6 使用 testparm --show-all-parameters 命令可以列出 samba-4.12.3版本490余项配置的默认参数,如果smb.conf 中没有对其作出配置,那么都将按照默认值处理。

 

1.4> 可配置项的含义说明

所有配置的类型,以及常用配置项的说明可以看这篇:samba-4.12.3版本 smb.conf 配置内容解释

 

2. 配置举例

2.1 配置一个不需要账号密码便可以访问的文件夹

进入到root权限操作

进入 smb.conf 配置内容

vim /etc/samba/smb.conf
[global]
        workgroup = WORKGROUP
        server string = Samba Server %v
        netbios name = SambaServer
        security = user
        map to guest = bad user
        dns proxy = no

[homes]
        comment = this is homes
        path = /home/homes/
        browseable = yes
        guest ok = yes
        writable = yes

编辑完成后保存,验证配置

testparm

出现以下内容

[root@localhost /]# testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

# Global parameters
[global]
        dns proxy = No
        map to guest = Bad User
        netbios name = SAMBASERVER
        security = USER
        server string = Samba Server %v
        idmap config * : backend = tdb
[homes]
        comment = this is homes
        guest ok = Yes
        path = /home/homes/
        read only = No

到此,说明配置完毕,接下来添加共享需要的文件夹。

创建文件夹,我这里放到了home文件夹下,你如果是其他位置,记得改上边 smb.conf 中的 path = /home/homes/

mkdir -p /home/homes/

修改文件夹权限,由于是公共访问操作,这里给了777最高权限

chmod -R 0777 /home/homes/

改变文件上下文

chcon -t samba_share_t /home/homes/

修改文件所有者和文件关联属组为 nobody 

chown -R nobody:nobody /home/homes/ 

重启Samba服务

/sbin/service smb restart

windows下 win + R 打开运行,输入服务器IP地址

 

Linux 下的查看打印

[root@localhost homes]# touch Linux创建.txt
[root@localhost homes]# vim Linux创建.txt
[root@localhost homes]# ll
总用量 8
-rw-r--r--. 1 root       root       493 1月  17 23:12 Linux创建.txt
-rwxr--r--. 1 suozhiyuan suozhiyuan   3 1月  17 23:12 Windows创建.txt

 

 

2.2 配置一个指定用户, 通过账号密码访问的文件夹

进入到root权限操作

创建一个用户组, 如果你要的组已经有了, 就不用创建了, 这里的 SUOZHIYUAN 是我的组名

groupadd SUOZHIYUAN

创建一个用户, 并且添加到组中, 如果这个用户你已经有了, 就不用创建了, 这里的 suozhiyuan 是我的用户名

useradd -g SUOZHIYUAN suozhiyuan

配置这个用户的密码, (密码要求输入两遍)   这里的 suozhiyuan 是我的用户名

smbpasswd -a suozhiyuan

 

接下来添加共享需要的文件夹

创建共享文件夹,我这里放到了home文件夹下

mkdir -p /home/suozhiyuan/

修改文件夹权限,由于是私人文件夹,这里给了700

chmod -R 0700 /home/suozhiyuan/

改变文件上下文

chcon -t samba_share_t /home/suozhiyuan/

修改文件所有者和文件关联属组 

chown -R suozhiyuan:suozhiyuan /home/suozhiyuan/ 

 

进入 smb.conf 配置内容

vim /etc/samba/smb.conf
[global]
        workgroup = WORKGROUP
        server string = Samba Server %v
        netbios name = SambaServer
        security = user
        map to guest = bad user
        dns proxy = no

[suozhiyuan]
        comment = this is suozhiyuan
        path = /home/suozhiyuan/
        browseable = yes
        valid users = suozhiyuan
        guest ok = no
        writable = yes

编辑完成后保存,验证配置

testparm

出现以下内容

[root@localhost homes]# testparm
Load smb config files from /etc/samba/smb.conf
Global parameter guest account found in service section!
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

# Global parameters
[global]
        dns proxy = No
        map to guest = Bad User
        netbios name = SAMBASERVER
        security = USER
        server string = Samba Server %v
        idmap config * : backend = tdb


[suozhiyuan]
        comment = this is suozhiyuan
        path = /home/suozhiyuan/
        read only = No
        valid users = suozhiyuan

到此,配置完毕。

重启Samba服务

/sbin/service smb restart

windows下 win + R 打开运行,输入服务器IP地址

 

Linux 下查看文件

[root@localhost suozhiyuan]# cd /home/suozhiyuan/
[root@localhost suozhiyuan]# touch Linux创建.txt
[root@localhost suozhiyuan]# ls -laF
总用量 28
drwx------. 4 suozhiyuan suozhiyuan  214 1月  17 23:45 ./
drwxr-xr-x. 7 root       root         80 1月  17 21:05 ../
-rw-------. 1 suozhiyuan suozhiyuan  270 1月  17 21:07 .bash_history
-rw-r--r--. 1 suozhiyuan suozhiyuan   18 7月  21 23:59 .bash_logout
-rw-r--r--. 1 suozhiyuan suozhiyuan  141 7月  21 23:59 .bash_profile
-rw-r--r--. 1 suozhiyuan suozhiyuan  376 7月  21 23:59 .bashrc
drwx------. 3 suozhiyuan suozhiyuan   19 1月  12 07:51 .config/
-rw-------. 1 suozhiyuan suozhiyuan   16 1月  12 07:51 .esd_auth
-rw-r--r--. 1 root       root          0 1月  17 23:39 Linux创建.txt
drwxr-xr-x. 4 suozhiyuan suozhiyuan   39 1月  12 07:10 .mozilla/
-rw-------. 1 suozhiyuan suozhiyuan 1497 1月  17 03:02 .viminfo
-rwxr--r--. 1 suozhiyuan suozhiyuan    0 1月  17 23:45 Windows创建.txt*
-rw-------. 1 suozhiyuan suozhiyuan  134 1月  17 21:13 .Xauthority

 

 

2.4 配置一个指定用户组用密码登录的文件夹

进入到root权限操作

创建一个用户组, 如果你要的组已经有了, 就不用创建了, 这里的 GroupA 是组名

groupadd GroupA

创建两个用户, 并且添加到组中, 如果这个用户你已经有了, 就不用创建了, 这里的 A1 A2是用户名

useradd -g GroupA A1
useradd -g GroupA A2

配置用户的密码, (密码要求输入两遍)   这里的 A1 A2 是用户名

smbpasswd -a A1
smbpasswd -a A2

以上三步的打印结果:

[root@localhost suozhiyuan]# groupadd GroupA
[root@localhost suozhiyuan]# useradd -g GroupA A1
[root@localhost suozhiyuan]# useradd -g GroupA A2
[root@localhost suozhiyuan]# smbpasswd -a A1
New SMB password:
Retype new SMB password:
Added user A1.
[root@localhost suozhiyuan]# smbpasswd -a A2
New SMB password:
Retype new SMB password:
Added user A2.

 

接下来添加共享需要的文件夹

创建共享文件夹,我这里放到了home文件夹下

mkdir -p /home/GroupA/

修改文件夹权限,由于是私人文件夹,这里给了700

chmod -R 0700 /home/GroupA/

改变文件上下文

chcon -t samba_share_t /home/GroupA/

修改文件所有者和文件关联属组

chown -R A1:GroupA /home/GroupA/

 

进入 smb.conf 配置内容

vim /etc/samba/smb.conf
[global]
        workgroup = WORKGROUP
        server string = Samba Server %v
        netbios name = SambaServer
        security = user
        map to guest = bad user
        dns proxy = no

[GroupA]
        comment = this is GroupA
        path = /home/GroupA
        browseable = yes
        valid users = @GroupA
        guest ok = no
        writable = yes

 编辑完成后保存,验证配置

testparm

出现以下内容

[root@localhost suozhiyuan]# testparm
Load smb config files from /etc/samba/smb.conf
Global parameter guest account found in service section!
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

# Global parameters
[global]
        dns proxy = No
        map to guest = Bad User
        netbios name = SAMBASERVER
        security = USER
        server string = Samba Server %v
        idmap config * : backend = tdb

[GroupA]
        comment = this is GroupA
        path = /home/GroupA
        read only = No
        valid users = @GroupA

到此,说明配置完毕

重启Samba服务

/sbin/service smb restart

重启成功打印

[root@localhost suozhiyuan]# /sbin/service smb restart
Redirecting to /bin/systemctl restart smb.service

windows下 win + R 打开运行,输入服务器IP地址

Windows查看文件夹

 

 

 Linux打印查看文件夹

[root@localhost /]# cd home/GroupA/
[root@localhost GroupA]# mkdir Linux创建
[root@localhost GroupA]# ls -laF
总用量 0
drwx------.  4 A1   GroupA  46 1月  18 01:04 ./
drwxr-xr-x. 10 root root   114 1月  18 00:54 ../
drwxr-xr-x.  2 root root     6 1月  18 01:04 Linux创建/
drwxr-xr-x.  2 A1   GroupA   6 1月  18 01:03 Windows创建/

 

 

如果用多个用户登录过,会出现这个提示:不允许一个用户使用一个以上用户与服务器或共享资源的多重连接。中断与此服务器或共享资源的所有连接,然后再试一次。

有三种解决办法,可点击前往查看

 提示:不允许一个用户使用一个以上用户与服务器或共享资源的多重连接。中断与此服务器或共享资源的所有连接,然后再试一次。的解决办法

 

2.5 配置一个高低权限的文件夹

创建2个用户组 A B,每个组下有两个用户:A1,A2 | B1,B2

A组用户权限高,可以访问所有组的文件夹

B组用户权限低,只可以访问B组下每个用户自己对应的文件夹

 

大同小异,关键在于 valid users 的配置


3. Windows无法打开文件——防火墙的处理

此处建议不关闭防火墙,而允许 Samba 穿越防火墙,以便外部用户可以访问 Samba 共享。

firewall-cmd --add-service=samba --zone=public --permanent
firewall-cmd --reload

操作成功提示:

[root@My-Linux-CentOS-8 samba]# firewall-cmd --add-service=samba --zone=public --permanent
success
[root@My-Linux-CentOS-8 samba]# firewall-cmd --reload
success

如果提示防火墙未开启可通过以下命令开启

开启 firewalld 防火墙

systemctl start firewalld.service    # 启用firewalld服务
 
systemctl enable firewalld.service   # 开机启用firewalld服务

验证防火墙开启状态

systemctl status firewalld.service  # 查看开启状态

 



posted @ 2021-01-17 14:43  索智源  阅读(5558)  评论(0编辑  收藏  举报