注:我大概已经阅读了 50 多页关于如何设置公共 Samba 共享的页面2年但对我来说什么都没用。我不知道我需要花多少时间阅读手册才能设置这些东西。
我需要/想要在我的家庭服务器上为两个工作站设置一个完全开放的公共文件共享。
设置如下:
服务器:
- Debian Wheezy
sudo smbd --version
给我Version 3.6.6
。- 我想共享 2 个本地分区,由于年代久远且取自 Windows 计算机,因此格式化为 NTFS。我无法将它们格式化为 ext* FS,因为它们包含大量数据,我(暂时)无法将其移动到其他任何地方。
- 由于缺乏原创性,该机器被命名为“homeserv”。
客户:
- Debian 测试 (Jessie)
- Windows 7(2 台不同的机器)。事实上,我的机器是 Debian/Windows 双启动,而我妻子的机器只有 Windows。
经过提炼后的 smb.conf 如下所示(逐字,没有其他内容):
[global]
workgroup = WORKGROUP
security = user
map to guest = Bad User
[disk1]
comment = Disk 1 on 400GB HDD
path = /media/disk1
browsable = yes
guest ok = yes
read only = no
create mask = 0755
[disk2]
comment = Disk 2 on 400GB HDD
path = /media/disk2
browsable = yes
guest ok = yes
read only = no
create mask = 0755
在 Debian 和 Windows 的两台客户端机器上,我都得到了相同的结果:登录/密码对话框。security = user
、map to guest = Bad user
、security = share
和guest ok = yes
等的组合都无济于事。
当我单击网络邻居中的共享计算机后,Windows 7 立即显示登录/密码对话框。Debiansmb://homeserv/
中的文件路径(在任何文件浏览器中)显示了两个文件夹:disk1
和disk2
,正如预期的那样,尝试打开它们会出现登录/密码对话框。
那么,我缺少的方案是什么,无需输入登录名/密码?这是可用性问题,我不会为文件垃圾场创建基于用户的身份验证。
答案1
好的,我自己找到了答案。
因为这是绝对不明显从文档和 HOWTO 等来看,这个东西要求输入密码的原因是它无法将访客用户映射到共享目录的所有者。
我有 NTFS 分区,需要挂载 RW,因此我在我的分区中使用了以下设置/etc/fstab
:
/dev/sdb1 /media/disk1 ntfs defaults,noexec,noatime,relatime,utf8,uid=1000,gid=1000 0 2
/dev/sdb2 /media/disk2 ntfs defaults,noexec,noatime,relatime,utf8,uid=1000,gid=1000 0 2
最重要的配置部分是uid
和gid
(可能只有uid
,不知道)。它们设置为jonnie
服务器上设置的用户的 UID 和 GID(显然不是 root)。因此,当 ntfs-3g 挂载这些磁盘时,所有内容都将归他所有。
之后,我将该用户添加到 Samba 注册表(或者可能创建了新的相同的用户,无所谓):
# smbpasswd -a jonnie
它要求输入密码,我输入了与主系统相同的密码。
之后,我已将force user
和force group
设置添加到smb.conf
:
[global]
workgroup = WORKGROUP
netbios name = HOMESERV
security = user
map to guest = Bad User
[disk1]
comment = Disk 1 on 400GB HDD
path = /media/disk1
browsable = yes
guest ok = yes
read only = no
create mask = 666
directory mask = 777
force user = jonnie
force group = jonnie
[disk2]
comment = Disk 2 on 400GB HDD
path = /media/disk2
browsable = yes
guest ok = yes
read only = no
create mask = 666
directory mask = 777
force user = jonnie
force group = jonnie
所以,最重要的与我相关的配置是force user
。
图片来源:Samba 指南
答案2
配置可以更短:
创建 unix 用户 jonnie
sudo useradd jonnie -s /usr/sbin/nologin
创建 smbuser
sudo smbpasswd -a jonnie
创建要共享的 Linux 目录
mkdir /mysmbshare
将目录的所有者更改为 jonnie
sudo chown jonnie /mysmbshare
smb配置文件
[global]
workgroup = MyWorkGroup
server string = Hello, use me
security = user
map to guest = Bad User
guest account = jonnie
passdb backend = tdbsam
[the_public_share]
path = /mysmbshare
writable = yes
printable = no
public = yes
所有文件均归 jonnie 所有,并且每个人都对这些文件拥有 rw 访问权限。
答案3
拥有开放 Samba 共享的快速而简单的方法是:
# ----------------------- Standalone Server Options ------------------------
#
# Scurity can be set to user, share(deprecated) or server(deprecated)
#
# Backend to store user information in. New installations should
# use either tdbsam or ldapsam. smbpasswd is available for backwards
# compatibility. tdbsam requires no further configuration.
security = share
passdb backend = tdbsam
并有这样的共享定义:
[export]
comment = Data Export Directory
path = /data/export
read only = no
public = yes
browseable = yes
writeable = yes
create mask = 666
directory mask = 777
重新启动守护进程。
对于 Windows 7 客户端,自 2014 年起,我需要设置域策略:始终对通信进行数字签名禁用。
答案4
这个对我有用。我相信你可以把大部分内容删除。我花了很多功夫才让它工作起来。目录上的文件权限当然也需要宽松,例如 777 等。然后如果你想要更安全的话,可以稍微修剪一下。我相信其中一些设置可能会被删除,它仍然可以工作。我在 Linux Mint 20 和 21、Linux Lite 6 和 Kali Linux(都是基于 Ubuntu)上使用过它。它对我来说总是很好用,当从 Windows 10 机器连接时,它不会提示进行身份验证。
我通常还会在我的 Linux 机器上安装 WSDD,以便 Windows 可以更轻松地找到它们。 https://github.com/christgau/wsdd 您通常可以通过 APT 获取它。
sudo apt install wsdd
干杯!
usershare owner only = false
workgroup = WORKGROUP
server string = %h server (Samba, Ubuntu)
log file = /var/log/samba/log.%m
max log size = 1000
logging = file
panic action = /usr/share/samba/panic-action %d
server role = standalone server obey pam restrictions = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u passwd chat =
Enter\snew\s\spassword:* %n\n Retype\snew\s\spassword:* %n\n
password\supdated\ssuccessfully .
pam password change = yes
map to guest = bad user
usershare allow guests = yes
[Your Share Name]
comment = Whatever you want it to say
path = /PathToSharedDirectory
browsable = yes
guest ok = yes
read only = no
create mask = 0777