💸samba 配置
2023-7-14
| 2023-8-10
0  |  0 分钟
type
status
date
Jul 14, 2023 09:21 AM
slug
summary
tags
category
icon
password
这篇文章对匿名配置, 权限配置讲解的最详细 .总结解决samba 不用密码直接登录&以及只读的方法
 

问题现象说明

 
  1. 尝试不用密码直接访问共享文件夹
  1. 访问共享文件夹写入权限

偏文字的解释

Samba 服务的主配置文件是 smb.conf,默认在 / etc/samba / 目录下。
smb.conf 含有多个段,每个段由段名开始,直到下个段名。每个段名放在方括号中间。每段的参数的格式是:名称 = 值。
配置文件中一行一个段名和参数,段名和参数名不分大小写。
除了 [global] 段外,所有的段都可以看作是一个共享资源。段名是该共享资源的名字,段里的参数是该共享资源的属性。
Samba 安装好后,使用 testparm 命令可以测试 smb.conf 配置是否正确。使用 testparm –v 命令可以详细的列出 smb.conf 支持的配置参数。
====================Global Settings =====================
[global]
config file = /usr/local/samba/lib/smb.conf.%m 说明:config file 可以让你使用另一个配置文件来覆盖缺省的配置文件。如果文件 不存在,则该项无效。这个参数很有用,可以使得 samba 配置更灵活,可以让一台 samba 服务器模拟多台不同配置的服务器。比如,你想让 PC1(主机名)这台电脑在访问 Samba Server 时使用它自己的配置文件,那么先在 / etc/samba/host / 下为 PC1 配置一个名为 smb.conf.pc1 的文件,然后在 smb.conf 中加入:config file = /etc/samba/host/smb.conf.%m。这样当 PC1 请求连接 Samba Server 时,smb.conf.%m 就被替换成 smb.conf.pc1。这样,对于 PC1 来说,它所使用的 Samba 服务就是由 smb.conf.pc1 定义的,而其他机器访问 Samba Server 则还是应用 smb.conf。
 
workgroup = WORKGROUP 说明:设定 Samba Server 所要加入的工作组或者域。
 
server string = Samba Server Version %v 说明:设定 Samba Server 的注释,可以是任何字符串,也可以不填。宏 %v 表示显示 Samba 的版本号。
 
netbios name = smbserver 说明:设置 Samba Server 的 NetBIOS 名称。如果不填,则默认会使用该服务器的 DNS 名称的第一部分。netbios name 和 workgroup 名字不要设置成一样了。
interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 说明:设置 Samba Server 监听哪些网卡,可以写网卡名,也可以写该网卡的 IP 地址。
hosts allow = 127. 192.168.1. 192.168.10.1 说明:表示允许连接到 Samba Server 的客户端,多个参数以空格隔开。可以用一个 IP 表示,也可以用一个网段表示。hosts deny 与 hosts allow 刚好相反。 例如:hosts allow=172.17.2.EXCEPT172.17.2.50 表示容许来自 172.17.2._._ 的主机连接,但排除 172.17.2.50 hosts allow=172.17.2.0/255.255.0.0 表示容许来自 172.17.2.0/255.255.0.0 子网中的所有主机连接 hosts allow=M1,M2 表示容许来自 M1 和 M2 两台计算机连接 hosts allow=@xq 表示容许来自 XQ 网域的所有计算机连接
max connections = 0 说明:max connections 用来指定连接 Samba Server 的最大连接数目。如果超出连接数目,则新的连接请求将被拒绝。0 表示不限制。
deadtime = 0 说明:deadtime 用来设置断掉一个没有打开任何文件的连接的时间。单位是分钟,0 代表 Samba Server 不自动切断任何连接。
time server = yes/no 说明:time server 用来设置让 nmdb 成为 windows 客户端的时间服务器。
log file = /var/log/samba/log.%m 说明:设置 Samba Server 日志文件的存储位置以及日志文件名称。在文件名后加个宏 %m(主机名),表示对每台访问 Samba Server 的机器都单独记录一个日志文件。如果 pc1、pc2 访问过 Samba Server,就会在 / var/log/samba 目录下留下 log.pc1 和 log.pc2 两个日志文件。
max log size = 50 说明:设置 Samba Server 日志文件的最大容量,单位为 kB,0 代表不限制。
security = user 说明:设置用户访问 Samba Server 的验证方式,一共有四种验证方式的安全级别。
  • 1)share:表示匿名登录,不需要 samba 账户就可登陆 samba 服务器。即用户访问 Samba Server 不需要提供用户名和口令, 安全性能较低。
  • 2)user:表示系统账户要先添加进 samba 库然后变成 samba 用户,使用 samba 用户来登陆,简单来讲就是需要使用用户密码登录。Samba Server 共享目录只能被授权的用户访问, 由 Samba Server 负责检查账号和密码的正确性。账号和密码要在本 Samba Server 中建立。安全性能适中。
  • 3)server:表示由另外一台 samba 服务器来对用户进行身份验证。依靠其他 Windows NT/2000 或 Samba Server 来验证用户的账号和密码, 是一种代理验证。此种安全模式下,系统管理员可以把所有的 Windows 用户和口令集中到一个 NT 系统上,使用 Windows NT 进行 Samba 认证, 远程服务器可以自动认证全部用户和口令,如果认证失败,Samba 将使用用户级安全模式作为替代的方式。安全性能最高。
  • 4)domain:表示把 samba 服务器加入到 N 域,由 NT 的域控制器来进行身份验证。域安全级别, 使用主域控制器 (PDC) 来完成认证。
  • 5)ADS :(Active Directory Service,活动目录服务),是 samba3.0 中新增的身份验证方式,采用 ADS 验证方式,samba 服务器集成到活动目录中。
    passdb backend = tdbsam 说明:
    passdb backend 就是用户后台的意思。目前有三种后台: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”
    encrypt passwords = yes/no 说明:是否将认证密码加密。因为现在 windows 操作系统都是使用加密密码,所以一般要开启此项。不过配置文件默认已开启。
    smb passwd file = /etc/samba/smbpasswd 说明:用来定义 samba 用户的密码文件。smbpasswd 文件如果没有那就要手工新建。
    username map = /etc/samba/smbusers 说明:用来定义用户名映射,比如可以将 root 换成 administrator、admin 等。不过要事先在 smbusers 文件中定义好。比如:root = administrator admin,这样就可以用 administrator 或 admin 这两个用户来代替 root 登陆 Samba Server,更贴近 windows 用户的习惯。
    guest account = nobody 说明:用来设置 guest 用户名。
    socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 说明:用来设置服务器和客户端之间会话的 Socket 选项,可以优化传输速度。
    domain master = yes/no 说明:设置 Samba 服务器是否要成为网域主浏览器,网域主浏览器可以管理跨子网域的浏览服务。
    local master = yes/no 说明:local master 用来指定 Samba Server 是否试图成为本地网域主浏览器。如果设为 no,则永远不会成为本地网域主浏览器。但是即使设置为 yes,也不等于该 Samba Server 就能成为主浏览器,还需要参加选举。
    preferred master = yes/no 说明:设置 Samba Server 一开机就强迫进行主浏览器选举,可以提高 Samba Server 成为本地网域主浏览器的机会。如果该参数指定为 yes 时,最好把 domain master 也指定为 yes。使用该参数时要注意:如果在本 Samba Server 所在的子网有其他的机器(不论是 windows NT 还是其他 Samba Server)也指定为首要主浏览器时,那么这些机器将会因为争夺主浏览器而在网络上大发广播,影响网络性能。 如果同一个区域内有多台 Samba Server,将上面三个参数设定在一台即可。
    os level = 200 说明:设置 samba 服务器的 os level。该参数决定 Samba Server 是否有机会成为本地网域的主浏览器。os level 从 0 到 255,winNT 的 os level 是 32,win95/98 的 os level 是 1。Windows 2000 的 os level 是 64。如果设置为 0,则意味着 Samba Server 将失去浏览选择。如果想让 Samba Server 成为 PDC,那么将它的 os level 值设大些。
    domain logons = yes/no 说明:设置 Samba Server 是否要做为本地域控制器。主域控制器和备份域控制器都需要开启此项。
    logon . = %u.bat 说明:当使用者用 windows 客户端登陆,那么 Samba 将提供一个登陆档。如果设置成 %u.bat,那么就要为每个用户提供一个登陆档。如果人比较多,那就比较麻烦。可以设置成一个具体的文件名,比如 start.bat,那么用户登陆后都会去执行 start.bat,而不用为每个用户设定一个登陆档了。这个文件要放置在 [netlogon] 的 path 设置的目录路径下。
    wins support = yes/no 说明:设置 samba 服务器是否提供 wins 服务。
    wins server = wins 服务器 IP 地址 说明:设置 Samba Server 是否使用别的 wins 服务器提供 wins 服务。
    wins proxy = yes/no 说明:设置 Samba Server 是否开启 wins 代理服务。
    dns proxy = yes/no 说明:设置 Samba Server 是否开启 dns 代理服务。
    load printers = yes/no 说明:设置是否在启动 Samba 时就共享打印机。
    printcap name = cups 说明:设置共享打印机的配置文件。
    printing = cups 说明:设置 Samba 共享打印机的类型。现在支持的打印系统有:bsd, sysv, plp, lprng, aix, hpux, qnx
    ==================== Share Definitions ====================
    [共享名]
    comment = 任意字符串 说明:comment 是对该共享的描述,可以是任意字符串。
    path = 共享目录路径 说明:path 用来指定共享目录的路径。可以用 %u、%m 这样的宏来代替路径里的 unix 用户和客户机的 Netbios 名,用宏表示主要用于 [homes] 共享域。例如:如果我们不打算用 home 段做为客户的共享,而是在 / home/share / 下为每个 Linux 用户以他的用户名建个目录,作为他的共享目录,这样 path 就可以写成:path = /home/share/%u; 。用户在连接到这共享时具体的路径会被他的用户名代替,要注意这个用户名路径一定要存在,否则,客户机在访问时会找不到网络路径。同样,如果我们不是以用户来划分目录,而是以客户机来划分目录,为网络上每台可以访问 samba 的机器都各自建个以它的 netbios 名的路径,作为不同机器的共享资源,就可以这样写:path = /home/share/%m 。
    browseable = yes/no 说明:browseable 用来指定该共享是否可以浏览。
    writable = yes/no 说明:writable 用来指定该共享路径是否可写。
    available = yes/no 说明:available 用来指定该共享资源是否可用。
    admin users = 该共享的管理者 说明:admin users 用来指定该共享的管理员(对该共享具有完全控制权限)。在 samba 3.0 中,如果用户验证方式设置成 “security=share” 时,此项无效。 例如:admin users =bobyuan,jane(多个用户中间用逗号隔开)。
    valid users = 允许访问该共享的用户 说明:valid users 用来指定允许访问该共享资源的用户。 例如:valid users = bobyuan,@bob,@tech(多个用户或者组中间用逗号隔开,如果要加入一个组就用 “@+ 组名” 表示。)
    invalid users = 禁止访问该共享的用户 说明:invalid users 用来指定不允许访问该共享资源的用户。 例如:invalid users = root,@bob(多个用户或者组中间用逗号隔开。)
    write list = 允许写入该共享的用户 说明:write list 用来指定可以在该共享下写入文件的用户。 例如:write list = bobyuan,@bob
    public = yes/no 说明:public 用来指定该共享是否允许 guest 账户访问。
    guest ok = yes/no 说明:意义同 “public”。
    几个特殊共享: [homes] comment = Home Directories browseable = no writable = yes valid users = %S valid users = MYDOMAIN%S
    [printers] comment = All Printers path = /var/spool/samba browseable = no guest ok = no writable = no printable = yes
    [netlogon] comment = Network Logon Service path = /var/lib/samba/netlogon guest ok = yes writable = no share modes = no
    [Profiles] path = /var/lib/samba/profiles browseable = no guest ok = yes
    =========================================================
     

    另外一篇文章,偏 code 的解释.

    Samba 的配置文件 /etc/samba/smb.conf 分为两大部分,一部分是 [global] ,即全局配置,另一部分是 [home] 、[printer] 、[自定义共享名] ,这些都是共享的部分,共享部分的设置优先级高于全局配置,另外,Samba 默认开启本地用户家目录 [home] 和打印机 [printer] 的共享,如果不需要你也可以关闭这两个共享,然后在末行自己重新创建一个共享。下面分享一个 smb.conf 配置示例:

    匿名访问

    notion image
    =======Samba 目录只对指定有权限的用户可见 =======
    在 Samba 服务器有一个共享目录 kevin(/kevin 的自身权限为 777)只希望用户 kevin 可见可读可写,另一个共享目录 grace(/grace 的自身权限为 777)希望其他用户 grace 可见可读可写。通过子配置文件实现方法如下: 在 / etc/samba 下建立一个文本文件其名称为 kevin.smb.conf,在该文件中加入如下内容:
    在 / etc/samba/smb.conf 文件中引用子配置文件。在引用子配置文件时有二种方法:
    config file 和 include 的区别是:
    这样在访问时,只有 kevin 用户或者在 kevin 组里的用户才可以看到 kevin 目录了,其余用户还是使用的 smb.conf 配置,无法看到 kevin 目录!

     

    我目前的配置

    还要在 linux (samba server)上对文件权限进行配置

    上面设置后,可能是只读的.
    把共享文件夹改为 777 , 实现所有用户可以写入文件.
    chmod -R 777 center-share
     
    更进一步, 设置特殊权限位,被称为 "sticky bit"。
    chmod -R 1777 center-share
    chmod 是一个 Linux 命令,用于改变文件或目录的权限。命令 chmod 1777 center-share 设置了 center-share 文件或目录的权限。
    这里的数字 1777 是八进制表示的权限设置,每一位都代表了不同的权限:
    • 第一位 1 是特殊权限位,被称为 "sticky bit"。当设置在目录上时,它意味着只有文件的所有者才能删除目录中的文件。这在公共目录(例如 /tmp)中很有用,它允许用户在该目录中创建文件,但不能删除其他用户的文件。
    • 后三位 777 指定了其他的基本权限。这里每个 7 代表 rwx (读-写-执行)权限,分别对应于所有者、所属组以及其他用户。所以,777 代表所有人都有读、写和执行的权限。
    所以,总的来说,chmod 1777 center-share 命令给所有用户赋予了对 center-share 的读、写、执行权限,并设置了粘滞位,这意味着只有文件的所有者才能删除目录中的文件。

    总结

    发现 center 有一次同样配置无法连接. 重启电脑就可以了.
    journalctl -xeu smbd.service
    sudo systemctl restart smbd.service
    testparm /etc/samba/smb.conf
    技术折腾
  • 操作系统
  • 折腾
  • WIN
  • 工具
  • 开发
  • samba
  • MileStone
  • cp 复制带软连接的代码解决 samba 网络文件夹目前是以其他用户名和密码进行映射的——映射盘更换登录用户名问题_指定的网络文件夹目前是以其他用户名和密码进行映射的
    目录