Samba Tips

来自Jack's Lab
跳转到: 导航, 搜索

1 权限管理

samba 的权限管理基础还是基于 Linux/Unix 的用户组和文件夹的权限控制

其中 samba 的用户一定是 Linux/Unix 系统用户的子集,即添加 samba 用户必须首先添加 Linux/Unix 的用户,samba 的用户名和密码须和 Linux/Unix 一致

samba 支持多种存取用户数据的机制:Plaintext, smbpasswd, ldapsam_compat (Samba-2.2 LDAP Compatibility), tdbsam, ldapsam

比较常用的是 smbpasswd, tdbsam 和 ldapsam。这个在 /etc/samba/smb.conf 中进行配置:

passdb backend = smbpasswd (缺省)
passdb backend = tdbsam (默认存储于/var/lib/samba/passdb.tdb)
passdb backend = ldapsam:ldaps://ldap.jackslab.org


不指定 passdb backend 的情形下使用 smbpasswd 机制,相应的文件存储于 /etc/samba/smbpasswd

这个是一个文本文件,当然每个用户的密码已经成为加密字符串。在 Linux/Unix 中添加相应的用户后,可用如下命令生成 /etc/samba/smbpasswd:

cat /etc/passwd | mksmbpasswd > /etc/samba/smbpasswd


当采用 tdbsam 机制时,可用 pdbedit 添加、删除、修改 samba 用户;亦可用如下命令查看用户数据文件:

tdbdump /var/lib/samba/passdb.tdb


添加 guest 和 root 用户:

pdbedit -a guest
pdbedit -a root


提示输入密码时,应与系统用户的密码一致



2 匿名访问

即实现不用输入用户名和密码的匿名访问

先保证 /etc/passwd 中有 nobody 的用户,能不能登录无所谓


I. 修改 smb.conf

  security =share            # 使用共享模式,而不是 Linux 系统用户认证的模式 (user)
  guest account = nobody   # guest ok 时,用来登录的系统用户名,当指定 valid users 时,这个将被覆盖


[data]
   comment = Shared Data
   path = /data
   guest ok = yes     # 连接到这个服务不需要口令, 权限设置为 guest account 的权限
   write list=nobody   # 允许 nobody 在 data 里具有 samba 的写权限,当然 Linux 的文件夹要赋予 nobody 相应的权限才行


II. 设置文件夹的权限

# ls -l / | grep data
drwxr-xr-x  24 root root  640 Nov  1 14:52 data     # nobody 只读


建一个 upload 文件夹,集中搜集写入的文件

# ls -l /data |grep upload
drwxrwxrwx  2 root   root        88 Nov  1 18:40 upload


这样匿名用户无须输入用户名和密码,直接可以浏览 /data,且可以通过 /data/upload 上载数据



3 匿名用户模式下,root 登录管理

pdbedit -a root # 添加 samba root 用户,密码与系统一致


smb.conf 中,加一个 admin 服务,目录同样指向 /data

[admin]
   comment = Admin entry
   path = /data
   write list=root    # samba 允许 root 的写请求可以 route 到 Linux 文件系统
   valid users=root  # 默认 root 用户访问


建一个 /etc/samba/smbusers,内容如下:

####
# User mapping file
####
# File Format
# -----------
# Unix_ID = Windows_ID
#
# Examples:
# root = Administrator
# janes = "Jane Smith"
# jimbo = Jim Bones
#
# Note: If the name contains a space it must be double quoted.
#       In the example above the name 'jimbo' will be mapped to Windows
#       user names 'Jim' and 'Bones' because the space was not quoted.
#######################################################################
root = Administrator

并在 smb.conf 中指定这个用户名映射:

username map = /etc/samba/smbusers


这样在 Windows 从 admin 这个服务进入时就会默认以 root 登录,/data 的所有权限 root 都有


更多玩法可以 man smb.conf 获得更详细的信息





个人工具
名字空间

变换
操作
导航
工具箱