一、配置文件详解
Samba配置文件非常简洁明了,所有的设置都在 /etc/samba/smb.conf 配置文件中进行,通过对该配置文件的修改,可以将Samba配置为一台匿名文件服务器、基于账户的文件服务器或打印服务器,默认情况下,Samba会已开启本地账号家目录共享与打印机共享,配置文件中以#或;符号开头的行为注释行,配置文件分为若干段,除了global(全局配置段)之外的其余所有段用来描述共享资源,全局段中的配置代表全局有效,是全局的默认设置。但如果全局配置段中的设置项与共享段中的设置项有冲突,则共享设置段中的设置为实际有效值。下面具体说明配置文件中各个配置选项的含义。
配置 | 说明 |
[global] | 定义全局策略 |
workgroup = MYGROUP | 定义工作组 |
server string = Samba Server Version %v | 服务器提示字串,默认显示samba版本,建议修改默认值以防止针对版本的网络攻击 |
;interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 | 如果你的服务器有多个网络接口,可以通过interfaces选项指定Samba监听哪些网络接口 |
;hosts allow = 127. 192.168.12. 192.168.13. EXCEPT 192.168.13.13 | hosts allow指定仅允许哪些主机有权访问Samba服务器资源,该参数可以放置在全局段也可以放置在共享段。与此相反的选项是hosts deny,用来设置黑名单列表,这里可以指定允许访问的主机名、IP地址或网段,当指定网段时可以使用192.168.12.或192.168.12.0/255.255.255.0两种格式,使用EXCEPT可以指定例外的IP地址 |
log file = /var/log/samba/log.%m |
定义日志文件,因为使用了Samba变量%m,所以每个访问共享的主机会产生独立的日志文件,%m会被替换为客户端的主机名 |
max log size = 50 | 定义日志单个文件最大容量为50KB |
security = user |
设置security选项将影响客户端访问samba的方式,是非常重要的设置选项之一。security可以被设置为uesr、share、server或domain,user代表通过用户名、密码验证访问者的身份,账户需要是服务器本机系统账户;share代表匿名访问;server代表基于验证身份的访问,但账户信息保存在另一台SMB服务器上;domain同样是基于验证的访问,账户信息保存在活动目录中 |
passdb backend = tdbsam |
账户与密码的存储方式,smbpasswd代表使用老的明文格式存储账户及密码;tdbsam代表基于TDB的密文格式存储;ldapsam代表使用LDAP存储账户资料 |
deadtime = 10 |
客户端在10分钟内没有打开任何Samba资源,服务器将自动关闭会话,在大量的并发访问环境中,这样的设置可以提高服务器性能 |
display charset = UTF8 | 设置显示使用的字符集为UTF8 |
max connections = 0 | 设置最大连接数,0代表无限制,若设置该规则超过此限制的连接请求服务器将拒绝连接 |
guest account = nobody | 设置匿名账号为nobody |
load printers = yes | 是否共享打印机 |
cups options = raw | 打印属性 |
[homes] | 共享名称 |
comment = Home Directories | 注释,共享的描述信息 |
browseable = no | 共享目录是否可以被浏览 |
writable = yes | 共享目录是否可以进行写操作 |
comment = All Printers | 打印机共享 |
path = /var/spool/samba | 打印机共享池 |
browseable = no | |
guest ok = no | |
writable = no | |
printable = yes | |
[common] | 共享名称为common |
comment = Common share | 注释,共享描述信息 |
path = /common | 重要,指定共享路径 |
valid users = tom jerry | 有效账户列表 |
create mask = 0750 | 客户端上传文件的默认权限,默认为0744 |
directory mask = 0775 | 客户端创建目录的默认权限,默认为0755 |
browseable = yes | 共享目录是否对所有人可见(yes或no) |
writable = no | 不允许写入操作 |
write list = tom | 写权限账户列表,这里设置tom可写 |
admin users = tom | 该共享的管理员,具有完全权限 |
invalid users = root bin | 禁止root与bin访问common共享 |
guest ok = no | 是否允许匿名访问,仅当全局设置 security=share时有效(yes或no) |
二、Samba应用案例
ABC是一家网站设计公司,公司下有商务部、页面设计部、开发部、运维部四个部门,商务部门负责与客户沟通并调研客户需求,为客户制定网站建设方案。页面设计部门根据商务部与客户的沟通记录与调研报告,确定主页设计风格与方案。网站设计具体方案经客户审核确认后提交开发部完成网站代码的编写,向客户提交完成后的网站,待客户确认后上传公司服务器由运维部门负责网站的运行维护工作。根据这些信息可以看出该公司部门之间的衔接是非常密切的,部门之间有大量的数据需要共享,为了加强部门之间互联互通,优化工作流程与效率,ABC公司决定部署一台Samba服务器,满足部门间可快速共享数据的需求,从而实现流水线办公流程。
1. 创建目录结构
共享数据首先需要创建用于共享的目录。根据ABC公司的情况,可以为该例创建五个一级目录和四个部门共享目录,共享目录仅对部门内部员工共享数据,每个部门员工可以在相应的部门共享目录下创建自己的个人目录与文件;另一个公共共享目录,用于所有的部门之间相互访问彼此的数据使用,在公共共享目录下为每个部门创建每个部门的共享子目录。
/ABC/sales目录为商务部共享目录,/ABC/design目录为设计部共享目录,/ABC/develop目录为开发部共享目录,/ABC/ops目录为运维部共享目录。另外,/ABC/share目录为整个公司的公共共享目录,用于部门间的数据共享,会在该目录下为每个部门创建对应的子目录。
mkdir -p /ABC/{sales,design,develop,ops,share/{sales,design,develop,ops}}
tree /ABC/
2. 添加账户
为了提升安全性,公司要求所有的员工访问共享时都必须使用账户名和密码。初始状态下,为每个部门创建两个账户,并创建所有共享目录的管理员,以便后期管理员可以根据公司发展情况添加或删除账户信息。下面通过脚本创建部门初始账户。
#!/bin/bash
#Add users for share
DEPART=(sales design develop ops)
for g in ${DEPART[@]}
do
groupadd $g
for u in $(seq 1 2)
do
useradd -M -s /sbin/nologin -g ${g} ${g}$u
done
done
chmod +x user.sh
./user.sh
smbpasswd -a sales1
smbpasswd -a sales2
其他账户按照此模板逐个添加即可
3. 配置文件
创建完共享目录及系统账户后,还需要修改Samba主配置文件,在配置文件中加入需要共享的目录信息以及相应权限的设置。下面是 /etc/samba/smb.conf 文件修改后的具体配置清单。
[global]
workgroup = SAMBA
security = user
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
[home]
comment = Home Directories
browseable = no
writable = yes
[sales]
comment = sales share
path = /ABC/sales
browseable = yes
guest ok = no
writable = no
write list = @sales
[design]
comment = design share
path = /ABC/design
browseable = yes
guest ok = no
writable = no
write list = @design
[develop]
comment = develop share
path = /ABC/develop
browseable = yes
guest ok = no
writable = no
write list = @develop
[ops]
comment = ops share
path = /ABC/ops
browseable = yes
guest ok = no
writable = no
write list = @ops
[share]
comment = common share
path = /ABC/share
browseable = yes
guest ok = no
writable = yes
4. 修改权限
为了使员工访问服务器共享资料后,可以在属于自己的对应目录下创建文件与目录,除了要在Samba主配置文件中定义权限设置外,还需要为系统目录修改正确的权限。
chmod 1770 /ABC/{design,develop,ops,sales} # 添加了sticky权限
chmod 1777 /ABC/share
chown :design /ABC/design
chown :develop /ABC/develop
chown :ops /ABC/ops
chown :sales /ABC/sales
5. 重启Samba服务
systemctl restart smb
在配置Samba时,需要在Windows连接测试,而一个账号输入一遍后就记住了,想更换用户时,需要在cmd下清除 Windows Samba 登录帐号记录,命令如下:
net use # 显示当前正在使用的网络服务
net use * /del # 删除所有连接的网路服务
本文参考自:丁明一 编著 《Linux运维之道》