前言

为了方便 Linux 在 Windows 平台下开发,搭建 Manjaro 无密访问 samba 服务器

后面加了 Windows 下搭建 samba 方法

正文

安装 smb 服务器

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

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

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

1) 安装上面软件之后,开始配置参数,先备份 smb.conf

1
2
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
28
[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
17
## 将系统用户加入到 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
9
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
2
//[PC 的 IP]/[共享目录名]   /[挂载目录名]    cifs    defaults,guest  0 0 

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


to be continued…