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 # 查看开启状态