如何在Linux下部署Samba服务?
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如何在Linux下部署Samba服务?
Samba简介
Samba是在Linux和UNIX系统上实现SMB协议的⼀个免费软件,由服务器及客户端程序构成。
SMB(Server Messages Block,信息服务块)是⼀种在局域⽹上共享⽂件和打印机的⼀种通信协议,它为局域⽹内的不同计算机之间提供⽂件及打印机等资源的共享服务。
SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享⽂件系统、打印机及其他资源。
通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域⽹络主机分享资源,还能与全世界的电脑分享资源。
Samba最⼤的功能就是可以⽤于Linux与windows系统直接的⽂件共享和打印共享,Samba既可以⽤于windows与Linux之间的⽂件共享,也可以⽤于Linux与Linux之间的资源共享。
Samba由两个主要程序组成,它们是smbd和nmbd。
这两个守护进程在服务器启动到停⽌期间持续运⾏,功能各异。
Smbd和nmbd使⽤的全部配置信息全都保存在smb.conf⽂件中。
Smb.conf向smbd和nmbd两个守护进程说明输出什么以便共享,共享输出给谁及如何进⾏输出。
nmbd :这个 daemon 是⽤来管理⼯作组啦、NetBIOS name 啦等等的解析。
主要利⽤ UDP 协议开启 port 137, 138 来负责名称解析的任务;
smbd :这个 daemon 的主要功能就是⽤来管理 SAMBA 主机分享的⽬录、档案与打印机等等。
主要利⽤可靠的 TCP 协议来传输数据,开放的端⼝为 139 及 445(不⼀定存在) 。
Samba提供了基于CIFS的四个服务:⽂件和打印服务、授权与被授权、名称解析、浏览服务。
前两项服务由smbd提供,后两项服务则由nmbd提供。
简单地说,smbd进程的作⽤是处理到来的SMB软件包,为使⽤该软件包的资源与Linux进⾏协商,nmbd进程使主机(或⼯作站)能浏览Linux服务器。
在本教程中,将展⽰如何在CentOS 7上安装Samba并将其配置为独⽴服务器,以通过⽹络在不同操作系统之间提供⽂件共享。
环境准备
属性Samba服务端Samba客户端
节点wencheng-smb windows10
系统CentOS Linux release 7.5.1804 (Minimal)windows10 企业版
内核 3.10.0-862.el7.x86_64windows10 企业版2019 x64
IP地址172.16.70.185172.16.70.50
SELinux setenforce 0 | disabled
Samba按照步骤如下。
检查安装Samba。
[root@wencheng-smb ~]# rpm -qa | grep samba
[root@wencheng-smb ~]# yum install -y samba
[root@wencheng-smb ~]# smbd -V
Version 4.10.16
设置防⽕墙允许Samba策略。
[root@wencheng-smb ~]# firewall-cmd --add-service samba --permanent
[root@wencheng-smb ~]# firewall-cmd --zone=public --add-port=137/udp --permanent
[root@wencheng-smb ~]# firewall-cmd --zone=public --add-port=138/udpp --permanent
[root@wencheng-smb ~]# firewall-cmd --zone=public --add-port=139/tcp --permanent
[root@wencheng-smb ~]# firewall-cmd --zone=public --add-port=445/tcp --permanent
[root@wencheng-smb ~]# firewall-cmd --reload
[root@wencheng-smb ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: ssh dhcpv6-client samba
ports: 139/tcp 137/tcp 138/tcp 445/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
上传、删除、修改⽂件)。
允许上传、删除、修改⽂件
情景⼀:配置匿名访问, 任何⼈都可以访问的共享⽬录(允许
配置Samba服务⽂件/etc/samba/smb.conf,其他配置详见官⽅。
[root@wencheng-smb ~]# mv /etc/samba/smb.conf /etc/samba/smb.conf_bak
[root@wencheng-smb ~]# vim /etc/samba/smb.conf
# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.
[global]
workgroup = SAMBA # 设定Samba Server所要加⼊的⼯作组或者域
security = user # 安全性等级share<user<domain
map to guest = Bad User # 允许匿名⽤户访问
log file = /var/log/samba/log.%m # ⽇志⽂件路径,宏%m表⽰客户端主机的Netbios名 max log size = 50 # 每个log⽇志的最⼤容量为50K ,单位是kb ,0代表不做限制 display charset = UTF8
[public]
comment = Share Directories # 共享的描述
path = /data/samba/shares/public # 共享⽬录的路径
public = yes # 开启共享
writeable = yes # 开启写权限,默认只读权限
create mask = 0640
directory mask = 0755
[root@wencheng-smb ~]# testparm # 测试smb.conf语法的正确性
Load smb config files from /etc/samba/smb.conf
Unknown parameter encountered: "max log siza"
Ignoring unknown parameter "max log siza"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions # 直接回车
# Global parameters
[global]
log file = /var/log/samba/log.%m
map to guest = Bad User
max log size = 50
security = USER
workgroup = SAMBA
idmap config * : backend = tdb
[public]
comment = Public Directories
create mask = 0640
writeable = yes
path = /data/samba/shares/public
read only = No
创建共享⽂件夹,并设置权限。
[root@wencheng-smb ~]# mkdir -p /data/samba/shares/public
[root@wencheng-smb ~]# mkdir /data/samba/shares/public/public{1..3}
[root@wencheng-smb ~]# touch /data/samba/shares/public/public{4..6}
[root@wencheng-smb ~]# ls /data/samba/shares/public/
public1 public2 public3 public4 public5 public6
[root@wencheng-smb ~]# chown nobody.nobody /data/samba/shares/public/
[root@wencheng-smb ~]# ls -ld /data/samba/shares/public/
drwxr-xr-x. 5 nobody nobody 96 May 25 16:07 /data/samba/shares/public/
启动Samba服务。
[root@wencheng-smb ~]# systemctl start smb.service nmb.service
[root@wencheng-smb ~]# systemctl enable smb.service nmb.service
[root@wencheng-smb ~]# netstat -nutpl | grep -E 'smbd|nmbd'
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 130587/smbd
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 130587/smbd
tcp6 0 0 :::445 :::* LISTEN 130587/smbd
tcp6 0 0 :::139 :::* LISTEN 130587/smbd
udp 0 0 172.16.70.255:137 0.0.0.0:* 130591/nmbd
udp 0 0 172.16.70.185:137 0.0.0.0:* 130591/nmbd
udp 0 0 0.0.0.0:137 0.0.0.0:* 130591/nmbd
udp 0 0 172.16.70.255:138 0.0.0.0:* 130591/nmbd
udp 0 0 172.16.70.185:138 0.0.0.0:* 130591/nmbd
udp 0 0 0.0.0.0:138 0.0.0.0:* 130591/nmbd
Win10客户端测试连接。
Win + R 组合键,调出运⾏窗⼝。
输⼊Samba服务器IP。
再次按 Win + R 组合键,调出运⾏窗⼝,并输⼊:gpedit.msc 命令,确定或回车,可以快速打开本地组策略编辑器。
本地组策略编辑器窗⼝中,依次展开到:计算机配置 - 管理模板 - ⽹络 - Lanman ⼯作站,找到并双击打开“启⽤不安全的来宾登录”选项,并启⽤。
再次访问Samba服务器IP。
可执⾏写⼊,删除操作。
情景⼆:配置⽤户可以访问多个部门的共享⽬录。
配置Samba服务⽂件/etc/samba/smb.conf,其他配置详见官⽅。
[root@wencheng-smb samba]# cat smb.conf
# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.
[global]
workgroup = SAMBA
server string = WenCheng Samba Server Version %v
netbios name = WenChengSamba
security = user
log file = /var/log/samba/log.%m
max log size = 50
map to guest = Bad User
display charset = UTF8
[public]
comment = Public Directories
path = /data/samba/shares/public
public = yes
writeable = no # 关闭匿名⽤户写权限
create mask = 0644
directory mask = 0755
write list = samba # 只允许samba管理员⽤户写
[devops]
comment = Devops Directories
path = /data/samba/shares/devops
public = no
writable = yes
create mask = 0640
directory mask = 0750
admin users = devops
valid users = @devops,samba
write list = @devops,samba
[market]
comment = Market Directories
path = /data/samba/shares/market
public = no
writable = yes
create make = 0640
directory mask = 0750
admin users = market
valid users = @market,samba
write list = @market,samba
共享⽬录说明:
public :所有匿名⽤户只可读,samba管理员⽤户可读可写
devops : 只允许@devops,@samba组⽤户可读可写
market : 只允许@devops,@samba组⽤户可读可写
验证smb.conf配置⽂件,并重启smb和nmb服务。
[root@wencheng-smb samba]# testparm
Load smb config files from /etc/samba/smb.conf
Unknown parameter encountered: "display charset"
Ignoring unknown parameter "display charset"
Unknown parameter encountered: "create make"
Ignoring unknown parameter "create make"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
# Global parameters
[global]
log file = /var/log/samba/log.%m
map to guest = Bad User
max log size = 50
netbios name = WENCHENGSAMBA
security = USER
server string = WenCheng Samba Server Version %v
workgroup = SAMBA
idmap config * : backend = tdb
[public]
comment = Public Directories
create mask = 0640
guest ok = Yes
path = /data/samba/shares/public
write list = samba
[devops]
admin users = devops
comment = Devops Directories
create mask = 0644
path = /data/samba/shares/devops
read only = No
valid users = @devops @samba
write list = @devops @samba
[market]
admin users = market
comment = Market Directories
path = /data/samba/shares/market
read only = No
valid users = @market @samb
[root@wencheng-smb ~]# systemctl restart smb nmb
创建普通⽤户及管理员账号;创建共享⽬录;并分配给⽬录相关权限。
[root@wencheng-smb ~]# useradd -M -s /sbin/nologin samba # Samba管理员[root@wencheng-smb ~]# useradd -M -s /sbin/nologin devops # devops部门管理员[root@wencheng-smb ~]# useradd -M -s /sbin/nologin market # market部门管理员[root@wencheng-smb ~]# useradd -M -s /sbin/nologin -g devops user1 # devops部门⽤户[root@wencheng-smb ~]# useradd -M -s /sbin/nologin -g market user2 # market部门⽤户
[root@wencheng-smb ~]# id samba
uid=1000(samba) gid=1000(samba) groups=1000(samba)
[root@wencheng-smb ~]# id devops
uid=1001(devops) gid=1001(devops) groups=1001(devops)
[root@wencheng-smb ~]# id market
uid=1002(market) gid=1002(market) groups=1002(market)
[root@wencheng-smb ~]# id user1
uid=1003(user1) gid=1001(devops) groups=1001(devops)
[root@wencheng-smb ~]# id user2
uid=1004(user2) gid=1002(market) groups=1002(market)
[root@wencheng-smb ~]# mkdir -p /data/samba/shares/{public,devops,market}
[root@wencheng-smb ~]# mkdir /data/samba/shares/public/public{1..3}
[root@wencheng-smb ~]# mkdir /data/samba/shares/devops/devops{1..3}
[root@wencheng-smb ~]# mkdir /data/samba/shares/market/market{1..3}
[root@wencheng-smb ~]# touch /data/samba/shares/market/market{4..6}
[root@wencheng-smb ~]# touch /data/samba/shares/devops/devops{4..6}
[root@wencheng-smb ~]# touch /data/samba/shares/public/public{4..6}
[root@wencheng-smb ~]# ls /data/samba/shares/*
/data/samba/shares/devops:
devops1 devops2 devops3 devops4 devops5 devops6
/data/samba/shares/market:
market1 market2 market3 market4 market5 market6
/data/samba/shares/public:
public1 public2 public3 public4 public5 public6
# 修改属主属组⼏权限
[root@wencheng-smb ~]# chown samba.samba /data/samba/shares/
[root@wencheng-smb ~]# chown devops.devops /data/samba/shares/devops/
[root@wencheng-smb ~]# chmod 775 /data/samba/shares/devops/
[root@wencheng-smb ~]# chown market.market /data/samba/shares/market/
[root@wencheng-smb ~]# chmod 775 /data/samba/shares/market/
[root@wencheng-smb ~]# chown nobody.nobody /data/samba/shares/public/
[root@wencheng-smb ~]# chmod 775 /data/samba/shares/public/
[root@wencheng-smb ~]# setfacl -m u:samba:rwx /data/samba/shares/*
[[root@wencheng-smb ~]# ls -ld /data/samba/shares/
drwxr-xr-x. 5 samba samba 48 May 28 10:09 /data/samba/shares/
[root@wencheng-smb ~]# ls -ld /data/samba/shares/*
drwxrwxr-x+ 5 devops devops 143 May 28 17:02 /data/samba/shares/devops
drwxrwxr-x+ 5 market market 143 May 28 17:02 /data/samba/shares/market
drwxrwxr-x+ 5 nobody nobody 96 May 28 10:06 /data/samba/shares/public
[root@wencheng-smb ~]# getfacl /data/samba/shares/*
getfacl: Removing leading '/' from absolute path names
# file: data/samba/shares/devops
# owner: devops
# group: devops
user::rwx
user:samba:rwx
group::rwx
mask::rwx
other::r-x
# file: data/samba/shares/market
# owner: market
# group: market
user::rwx
user:samba:rwx
group::rwx
mask::rwx
other::r-x
# file: data/samba/shares/public
# owner: nobody
# group: nobody
user::rwx
user:samba:rwx
group::rwx
mask::rwx
other::r-x
将现有的⽤户添加到组。
usermod [-G] [GroupName] [UserName]
将现有的⽤户添加到多个组
usermod [-G] [GroupName1,GroupName2] [UserName]
将现有⽤户从组中移除。
gpasswd [-d] [UserName] [GroupName]
将现有多个⽤户添加到组。
gpasswd [-M] [UserName1,UserName2] [GroupName]
pdbedit命令解析。
pdbedit 命令⽤于管理Samba服务的帐户信息数据库,格式为:"pdbedit [选项] 帐户"
第⼀次把⽤户信息写⼊到数据库时需要使⽤-a参数,以后修改⽤户密码、删除⽤户等等操作就不再需要了。
pdbedit -L :查看samba⽤户
pdbedit -a -u user:添加samba⽤户
pdbedit -r -u user:修改samba⽤户信息
pdbedit -x -u user:删除samba⽤户
samba服务数据库的密码也可以⽤ smbpasswd 命令操作
smbpasswd -a user:添加⼀个samba⽤户
smbpasswd -d user:禁⽤⼀个samba⽤户
smbpasswd -e user:恢复⼀个samba⽤户
smbpasswd -x user:删除⼀个samba⽤户
将⽤户添加为Samba⽤户,这⾥以samba⽤户为例,其他⽤户类同,不再赘述。
[root@wencheng-smb ~]# pdbedit -a -u samba
Unknown parameter encountered: "display charset"
Ignoring unknown parameter "display charset"
new password: # 登录samba密码
retype new password: # 再次确认输⼊
Unix username: samba
NT username:
Account Flags: [U ]
User SID: S-1-5-21-2219792021-1567261761-1612575661-1000
Primary Group SID: S-1-5-21-2219792021-1567261761-1612575661-513
Full Name:
Home Directory: \\wenchengsamba\samba
HomeDir Drive:
Logon Script:
Profile Path: \\wenchengsamba\samba\profile
Domain: WENCHENGSAMBA
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: Wed, 06 Feb 2036 23:06:39 CST
Kickoff time: Wed, 06 Feb 2036 23:06:39 CST
Password last set: Fri, 28 May 2021 12:24:14 CST
Password can change: Fri, 28 May 2021 12:24:14 CST
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
[root@wencheng-smb ~]# pdbedit -L # 查看samba⽤户
Unknown parameter encountered: "display charset"
Ignoring unknown parameter "display charset"
samba:1000:
devops:1001:
market:1002:
user1:1003:
user2:1004:
Win10测试连接Samba共享⽬录。
“public”⽂件夹允许所有⽤户可直接打开,但⽆法上传,删除操作。
访问“devops”⽂件夹需账号密码。
Win10本机访问samba时⽤切换另⼀个⽤户登录。
⽅法如下:
1)按键ctrl+r,打开"运⾏",输⼊"cmd"
2)输⼊命令"net use * /delete",接着输⼊"Y",即先取消所有的net 连接
“devops”⽂件夹只允许devops⽤户及其组的⽤户(user1),samba管理员上传,删除操作。
“market”⽂件夹只允许market⽤户及其组的⽤户(user2),samba管理员上传,删除操作。
“pbulic”⽂件夹只允许samba管理员上传,删除操作。
⾄此,已实现Samba + Windows ⽂件共享。