官方文档

安装smb服务器

我用的是Manjaro gnome 18,需要安装下面几个软件

1
2
sudo su 
pacman -S samba nautilus-share manjaro-settings-samba

配置/etc/samba/smb.conf参数

1) 安装上面软件之后,开始配置参数,先备份smb.conf
1
mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
2) 然后新建一个,写入如下参数 vim /etc/samba/smb.conf,这里感谢Conanx给我的参考!
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
[global]
workgroup = WORKGROUP
#所要加入的工作组或者域
netbios name = Manjaro
#用于在 Windows 网上邻居上显示的主机名
security = user
#定义安全级别
map to guest = bad user
#将所有samba系统主机所不能正确识别的用户都映射成guest用户
dns proxy = no
#是否开启dns代理服务

[misfit]
#共享显示的目录名
path = /home/misfit/code
#实际共享路径
browsable = yes
#共享的目录是否让所有人可见
writable = yes
#是否可写
guest ok = yes
#是否允许匿名(guest)访问,等同于public
create mask = 0777
#客户端上传文件的默认权限
directory mask = 0777
#客户端创建目录的默认权限
#注意共享文件在系统本地的权限不能低于以上设置的共享权限。

修改好了输入testparm检查smb.conf是否有语法错误,需要其他配置这里是:配置参数详解。

3) 配置权限和密码工作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
##将系统用户加入到samba用户,并设置密码,这里我们按两次回车,设置成无密码
smbpasswd -a misfit #这里misfit是上面设置的 #共享显示的目录名,也就是自己系统用户名

##查看所有Samba用户
pdbedit -L

##查看对应IP上的samba服务器
smbclient -L //IP #例如查看本机 smbclient -L 127.0.0.1

##这一段已经失效----2019.4.10更新
##将 path 中目录的所有者改为nobody,否则,任何人都没权限操作这个目录。另外用如下命令设置:
##chown nobody:nobody /home/misfit/code -R

##将 path 中目录的权限设置为777
chmod 777 /home/misfit/code -R
chmod 777 /home/misfit/ #这个不给权限会拒绝访问

到这里配置基本完成了,跳到下一步直接启动samba服务器

注意:不要把自己的 /home/misfit 系统目录修改成nobody权限了,会导致开机无法登录系统
如果导致进不小心修改了,登不进界面,在开机界面按ctrl+alt+F2进入tty2控制台,修改输入下面命令改回权限
chown misfit:misfit /home/misfit -R 这里misfit是linux的用户名。

其他知识补充:目前samba有三种后台:smbpasswd、tdbsam和ldapsam。sam应该是security account manager(安全账户管理)的简写。
1.smbpasswd:该方式是使用smb自己的工具smbpasswd来给系统用户(真实
用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工建立该文件。
2.tdbsam:该方式则是使用一个数据库文件来建立用户数据库。数据库文件叫passdb.tdb,默认在/etc/samba目录下。passdb.tdb用户数据库可以
使用smbpasswd –a来建立Samba用户,不过要建立的Samba用户必须先是系统用户
。我们也可以使用pdbedit命令来建立Samba账户。pdbedit命令的参数很多,我们列出几个主要的。
pdbedit –a username:新建Samba账户。
pdbedit –x username:删除Samba账户。
pdbedit –L:列出Samba用户列表,读取passdb.tdb数据库文件。
pdbedit –Lv:列出Samba用户列表的详细信息。
pdbedit –c “[D]” –u username:暂停该Samba用户的账号。
pdbedit –c “[]” –u username:恢复该Samba用户的账号。
3.ldapsam:该方式则是基于LDAP的账户管理方式来验证用户。首先要建立LDAP服务,然后设置“passdb backend = ldapsam:ldap://LDAP Server”

然后启动服务

1
2
3
4
5
6
7
8
systemctl start smb     #启动服务

#然后设置为开机自启
systemctl enable smb #开机自启

#其他命令
systemctl status smb #查询状态
systemctl restart smb #重新启动

Manjaro防火墙默认关闭的,并且没有安装selinux,安装了的需要关闭
systemctl stop iptables #关闭防火墙
setenforce 0 #关闭selinux
关闭selinux开机启动
sudo vim /etc/selinux/config
将SELINUX=enforcing改为SELINUX=disabled。

最后挂载到windows上

打开资源管理器>>右击网络>>映射网络驱动,添加\Linux IP\共享目录,完成

Windows搭建服务器

1) 关闭windows防火墙
控制面板>>系统安装>>windows防火墙>>打开关闭防火墙,家庭、共用都关掉
2) 解禁Guest账户
资源管理右击计算机,管理>>本地用户和组>>用户,右击Guest选择属性,将账户已禁用的勾去掉。
3) 在本地策略上修改用户权限分配和安全选项

  • 输入“secpol.msc”命令打开本地安全策略向导:
  • 本地策略>>用户权限分配>>拒绝从网络访问这台计算机,双击打开,将Guest账户删除。
  • 本地策略>>安全选项>>网络访问:本地账户的共享和安全模型,双击打开,设置为仅来宾模式。

4)将Windows的文件夹设置成无密共享
右键需要共享的文件夹,属性>>共享(标签)>>共享(按钮),添加everyone用户,设置权限级别为 读\写 ,单击共享。
5)最后挂载到Manjaro Linux

  • 查看共享目录smbclient -L //[PC的IP]
  • 挂载共享目录到Linux,manjaro 默认安装了cifs:
    mount -t cifs //[PC的IP]/[共享目录名] /[挂载目录名]

6)开机自动挂载samba (貌似无效)
在vim /etc/fstab添加:

1
//[PC的IP]/[共享目录名]   /[挂载目录名]    cifs    defaults,guest  0 0 

关于服务器的选择:
我目前偏向于在虚拟机Linux中将smb和nfs都搭建,Linux和windows之间共享用smb,Linux挂载到开发版用nfs。


1- samba介绍

Samba 是在 Linux 和 UNIX 系统上实现 SMB 协议的一个免费软
件,由服务器及客户端程序构成,SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。

SMB 协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、 打印机及其他资源。通过设置“NetBIOSover TCP/IP”使得 Samba 不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。

2- 安装

2.1- 安装说明

samba服务器搭建流程主要分为四个步骤:

  1. 安装samba包
  2. 在编辑主配置文件/etc/smb.conf,自定需要共享的目录,并为共享目录设置共享权限
  3. 在/etc/samba/smb.conf中指定日志文件名称和存放路径
  4. 设置共享目录的本地系统权限及samba共享权限
  5. 重新加载配置文件或重新启动smb服务,使配置生效

2.2- 安装samba

2.2.1- ubuntu安装samba

1
apt-get install samba samba-common -y

2.2.2- centos安装samba

1
yum install samba -y

2.2.3- 查看samba版本

1
2
[root@localhost ~]# smbclient -V
Version 4.9.1

2.3- user级别的samba的配置

user级别的samba需以samba用户和密码才能访问

2.3.1- 创建一个用于分享的samba目录

1
mkdir -p /smb

2.3.2 创建samba访问用户

1
2
3
4
5
6
useadd smb ##添加smb用户
passwd smb ##设置密码为smb
root@ubuntu:~# passwd smb
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

2.3.3- 给创建的这个目录设置权限

1
2
3
4
5
root@ubuntu:~# chmod -R o+rwx /smb  ##设置smb目录的other权限为全部
##或者 chown -R smb:smb /smb ##设置smb目录的所属用户和组为smb
##或者 chown -R smb /smb ##设置smb目录的所属用户为smb
root@ubuntu:~# ll -l /|grep smb
drwxr-xrwx 2 root root 4096 2月 5 23:11 smb/

2.3.4- 设置smb用户的samba访问密码

1
2
3
4
5
smbpasswd -a smb
root@ubuntu:~# smbpasswd -a smb ##设置密码为smb
New SMB password:
Retype new SMB password:
Added user smb.

2.3.5- 配置samba的配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
vim /etc/samba/smb.conf
##在[global]下添加
security = user ##原来已经存在则不需要修改
##在最后添加下面的内容:
[smb]
comment = smb folder
browseable = yes
path = /smb
create mask = 0700
directory mask = 0700
valid users = smb
force user = smb
force group = smb
public = yes
available = yes
writable = yes

2.3.6- 重启samba服务器

1
service smbd restart

2.4- 匿名级别的samba的配置

这个级别的samba很简单,首先它不需要以用户和密码来验证登陆,所以就不必去配置samba用户了

2.4.1- 创建一个用于分享的samba目录

1
mkdir -p /share

2.4.2- 配置目录权限

1
2
3
4
[root@localhost ~]# chown nobody:nobody /share
[root@localhost ~]# chmod o+rwx -R /share/
[root@localhost ~]# ll -l / |grep share
drwxr-xrwx 3 nobody nobody 24 Jan 16 16:10 share

2.4.3- 配置samba的配置文件

1
2
3
4
5
6
7
8
9
10
11
12
vim /etc/samba/smb.conf
##找到 security = user 修改为
security = user
map to guest = Bad User
##在最后添加下面的内容:
[share]
comment = share folder
browseable = yes
path = /share
public = ok
guest ok = yes
writable = yes
2.4.4- 重启samba服务
1
service smb restart

2.5- 验证

2.5.1- window打开samba服务器ip

window + r 键打开运行,输入samba两个反斜杠和服务器ip
img

2.5.2- 使用smb用户名和密码[smb]登录

【ps: samba4版本匿名登录的用户名和密码均为nobody】
img

2.5.3- 创建文件测试

img

3- 其他

windows查看samba挂载情况

cmd:

1
2
3
net use #查看samba挂载情况
net use * /delete #断开所有
net use \\x.x.x.x\public /delete #断开指定

Linux samba挂载:

terminal:

package: cifs-utils

1
2
3
4
mount -t cifs  //192.168.6.1  /mnt/sambashare -o username=MYUSERNAME,password=MYPASSOWRD  # mount.cifs  //192.168.6.1  /mnt/sambashare -o username=<用户名> 
# 匿名
mount -t cifs //192.168.6.1 /mnt/sambashare -o user=,file_mode=0777,dir_mode=0777,unc=\\\\cifs-server\\share
mount | grep cifs

在 /etc/fstab 末尾添加:

1
//192.168.6.1  /mnt/sambashare  cifs  username=<用户名>,password=<密码>  0  0

指定用户名密码文件格式 //192.168.6.1 /mnt/sambashare cifs credentials=/home/Yuki/.smbcredentials 0 0

1
2
username=msusername
password=mspassword

WIndows无法显示问题

windows 不能发现 linux 下基于 samba 的共享,原因是从 windows 10 某些版本开始禁用了 smb1.0,不过尝试从 windows 系统中启用 smb1.0 后,仍然不能正常工作,

最佳解决方案是,在 linux 系统中安装 wsdd,项目地址为:https://github.com/christgau/wsdd

安装后启动服务:

1
systemctl start wsdd
1
2
3
4
5
6
7
8
9
10
11
[yuki-share]
comment = Yuki's Shared Directory
path = /home/yuki/share
valid users = zpsmb
write list = zpsmb
read only = No
browseable = Yes
create mask = 0644
directory mask = 0755
force user = zpsmb
force group = zpsmb

这个配置的含义如下:

  • [yuki-share]: 共享名称,客户端访问时会看到这个名称
  • comment: 共享描述
  • path: 共享目录的路径
  • valid users: 允许访问的用户
  • write list: 具有写权限的用户
  • read only = No: 允许读写
  • browseable = Yes: 在网络中可见
  • create mask 和 directory mask: 设置文件和目录的权限掩码
  • force user 和 force group: 强制使用指定的用户和组权限
1
2
3
4
5
6
7
[global]
workgroup = SAMBA
security = user
map to guest = bad user
guest account = nobody

passdb backend = tdbsam

然后修改共享配置,允许匿名访问:

1
2
3
4
5
6
7
8
9
10
11
[yuki-share]
comment = Yuki's Shared Directory
path = /home/yuki/share
guest ok = Yes
guest only = Yes
browseable = Yes
read only = No
create mask = 0666
directory mask = 0777
force user = nobody
force group = nogroup

配置完成后,你需要:

  1. 创建共享目录:
1
2
3
sudo mkdir -p /home/yuki/share
sudo chown zpsmb:zpsmb /home/yuki/share
sudo chmod 755 /home/yuki/share
  1. 创建SMB用户并设置密码:
1
2
sudo smbpasswd -a zpsmb
# 输入密码:123456
  1. 重启SMB服务:
1
2
sudo systemctl restart smbd
sudo systemctl restart nmbd
  1. 验证配置:
1
sudo testparm
  1. 检查服务状态:
1
sudo systemctl status smbd

这样配置后,用户zpsmb就可以通过SMB协议访问/home/yuki/share目录了。客户端可以使用以下连接字符串:

1
\\服务器IP\yuki-share