Samba Tips
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 获得更详细的信息