当我们需要windows和linux更好的进行文件交互时,使用Samba服务是一个不错的选择,本文介绍如何在linux中搭建Samba服务和怎样在windows下访问linux共享文件。
一、理论知识
1.SAMBA服务简介
SAMBA是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。
2.SAMBA工作原理
协议协商
客户端在访问Samba服务器时,发送negprot指令数据包,告知目标计算机其支持的SMB类型。Samba 服务器根据客户端的情况,选择优的SMB类型,并做出回应。
建立连接
当SMB类型确认后,客户端会发送session setup指令数据包,提交帐号和密码,请求与Samba服务器建 立连接,如果客户端通过身份验证,Samba服务器会对session setup报文作出回应,并为用户分配唯一 的UID,在客户端与其通信时使用。
访问共享资源
客户端访问Samba共享资源时,发送tree connect指令数据包,通知服务器需要访问的共享资源名,如 果设置允许,Samba服务器会为每个客户端与共享资源连接分配TID,客户端即可访问需要的共享资源。
断开连接
共享使用完毕,客户端向服务器发送tree disconnect报文关闭共享,与服务器断开连接 。
3.SAMBA工作协议
Samba服务功能强大,这与其通信基于SMB协议有关。SMB不仅提供目录和打印机共享,还支持认证、权限 设置。
Samba在windows下使用的是NetBIOS协议,如果你要使用Linux下共享出来的文件,请确认你的windows系 统下是否安装了NetBIOS协议 。
4. SAMBA端口 :TCP 139/445;UDP 137/138
二、samba服务命令知识
samba用户
管理samba用户
添加samba用户
smbpasswd -a
pdbedit -a -u
修改用户密码
smbpasswd
删除用户和密码
smbpasswd –x
pdbedit –x –u
查看samba用户列表
/var/lib/samba/private/passdb.tdb
pdbedit –L –v
查看samba服务器状态
smbstatus
SAMBA主配置文件
SAMBA服务器全局配置
– workgroup 指定工作组名称
– server string 主机注释信息
– netbios name 指定NetBIOS名
– interface 指定服务侦听接口和ip
– hosts allow 可用 “ , ” ,空格,或tab风格,默认允许所有主机访问,也可在每个共享独立配置
– hosts deny 拒绝指定主机访问
– config file =/etc/samba/conf.d/%U 用户独立的配置文件
– Log level =2 日志级别,默认为0,不记录日志
– max log size = 50 日志文件达到50k,将轮循rotate,单位KB
– pasdb backend = tdbsam 密码数据库格式
SAMBA服务共享目录配置
– 每个共享目录应该有独立的 [] 部分
– [共享名称] 远程网络看到的共享名称
– comment 注释信息
– path 所共享的目录绝对路径
– public 能否被guest访问的共享,默认为no,和guest ok类似
– browsable 是否允许所有用户浏览此共享,默认为yes,no为隐藏
– writable = yes 可以被所有用户读写,默认为no
– read only = no 和 writable = yes 等价,如与以上设置发生冲突,放在后面的设置生效,默认为只读
– write list 三种形式:用户,@组名
– valid users 特定用户才能访问该共享,如为空,将允许所有用户访问,用户名之间用空格分隔
三、实际操作
1.安装SAMBA服务器及客户端
[root@c74 ~]# yum install samba -y #服务器端安装
[root@c66 ~]# yum install samba-client -y #客户端安装
2.关闭防火墙&Selinux
[root@c74 ~]# systemctl stop firewalld
[root@c74 ~]# setenforce 0
3.服务端配置
/etc/samba/smb.conf #SAMBA主配置文件
1) 配置共享资源
创建共享资源的账户
#Samba服务程序默认使用的是用户口令认证模式。
#不同之处,只有建立账户信息数据库之后,才能使用用户口令认证模式。
#pdbedit命令用于管理SMB服务程序的账户信息数据库。在第一次把账户信息写入到数据库时需要使用-a参数,以后在执行修改密码、删除账户等操作时就不再需要该参数了。
[root@c74 ~]# useradd u1
[root@c74 ~]# id u1
uid=1000(u1) gid=1000(u1) groups=1000(u1) #查看用户u1的id
[root@c74 ~]# pdbedit -a -u u1 #设置密码
new password:
retype new password:
Unix username: u1
NT username:
Account Flags: [U ]
User SID: S-1-5-21-879942754-2335623176-2780471471-1000
Primary Group SID: S-1-5-21-879942754-2335623176-2780471471-513
Full Name:
Home Directory: \\c74\u1
HomeDir Drive:
Logon Script:
Profile Path: \\c74\u1\profile
Domain: C74
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: Tue, 27 Nov 2018 20:25:05 CST
Password can change: Tue, 27 Nov 2018 20:25:05 CST
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
创建共享资源文件目录
#注意文件读写权限问题
[root@c74 ~]# mkdir /share
[root@c74 ~]# chown -Rf u1:u1 /share/
[root@c74 ~]# ll /
drwxrwxrwx. 2 u1 u1 6 Nov 18 15:39 share
修改SAMBA主配置文件,修改共享信息
[root@c74 ~]# vi /etc/samba/smb.conf
[global] #全局配置名称
workgroup = MYGROUP #工作组名称
server string = Samba Server Version %v #samba信息,参数%v为显示SMB版本号
log file = /var/log/samba/log.%m #日志存放位置与>名称,%m为来访的主机名
max log size = 50 #日志大容量50kb
security = user #安全验证方式,见下介绍
passdb backend = tdbsam #用户后台的类型,见下介>绍
load printers = yes #共享打印机设备
cups options = raw #打印机的选项
[share1] #局部共享配置名称
comment = share info… #提示信息
path = /share #共享目录
public = no #关闭所有人可见
writable = yes #可写
#安全验证方式介绍:
#share:来访主机无需验证口令;比较方便,但安全性很差
#user:需验证来访主机提供的口令后才可以访问;提升了安全性 #server:使用独立的远程主机验证来访主机提供的口令(集中管理账户)
#domain:使用域控制器进行身份验证 #用户后台的类型介绍:
#smbpasswd:使用smbpasswd命令为系统用户设置Samba服务程序的密码
#tdbsam:创建数据库文件并使用pdbedit命令建立Samba服务程序的用户
#ldapsam:基于LDAP服务进行账户验证
重启SAMBA服务并且开机自启
[root@c74 ~]# systemctl restart smb && systemctl enable smb
4.windows测试共享
开始—>运行—>\192.168.192.133—>输入用户名密码—>登录成功 (用户为服务端设置的共享用户),此时出现的共享文件名是我们在SAMBA主配置文件里面区域配置的文件名,并不是我们在服务器端创建的共享文件,但二者是有联系的。
创建一个文本文件,写入信息并保存测试
#由于Windows系统的缓存原因,下次在登陆时仍保存上一次的用户名,可在cmd模式下清除Samba登陆信息,命令如下 net use * /del /y
在window中的共享目录里新建一个目录:windowsset
去服务器里面的共享目录/share查看:
[root@c74 share]# ls
windowsset服务器端存在windowsset目录
可以做更多的测试,如删除目录,创建、写入、删除文件。结果发现这些操作都可以实现。
5.Linux测试共享
#linux连接samba smbclient //192.168.192.133/share1 -U u1
#//192.168.192.133/share1 此处文件名为并不是服务端共享的文件名,而是服务端SAMBA主配置文件中的局部共享配置名称
[root@c66 sharemnt]# smbclient //192.168.192.133/share1 -U u1
Enter SAMBA\u1’s password:
Domain=[C74] OS=[Windows 6.1] Server=[Samba 4.7.1]
smb: \> pwd
Current directory is \\192.168.192.133\share1\
#此时所处路径为服务端的/share1,操作结果可以去服务端的共享目录/share查看
smb: \> mkdir 11
smb: \> cd 11
smb: \11\> cd ..
smb: \> rm -rf 11
NT_STATUS_NO_SUCH_FILE listing \-rf
#可进入该目录下的所有目录,也可以创建目录,但不能删除目录
#可以删除文件,但不能创建、写入、修改文件
解决以上问题的方法
SAMBA挂载
#客户端安装支持文件共享服务的软件包cifs-utils yum install cifs-utils -y
#Samba的用户名、密码、共享域的顺序将相关信息写入到一个认证文件中
[root@c66 ~]# vi /etc/samba/shareuser.smb #这个文件没有,需要创建
username=u1
password=123456
domain=MYGROUP
[root@c66 ~]# chmod -Rf 600 /etc/samba/shareuser.smb
[root@c66 ~]# mkdir /sharemnt #创建挂载目录
[root@c66 ~]# vi /etc/fstab #自动挂载
//192.168.192.133/share1 /sharemnt cifs credentials=/etc/samba/shareuser.smb 0 0
#//192.168.192.133/share1 此处文件名为并不是服务端共享的文件名,而是服务端SAMBA主配置文件中的局部共享配置名称
[root@c66 ~]# mount -a
#此时Linux客户端即可在共享文件里进行任何操作
四、练习题
现有一个工作组WG,并发布共享目录/share,此共享目录允许所有员工访问
[root@c74 ~]# vi /etc/samba/smb.conf
[global]
workgroup = WG
security = user
passdb backend = tdbsam
map to guest = bad user
dns proxy = no
[share]
comment = Share Directories
path = /share
read only = yes
guest ok = yes
[root@c74 ~]# systemctl restart smb mkdir -p /share
[root@c74 ~]# mkdir -p /share
在windows中测试,开始运行并输入\\192.168.5.129\share,根据结果查看是否正确
#在测试中一旦用Windows登陆Samba,下次在登陆时仍保持上一次的用户名,可使用 net use * /del /y 清除Samba登陆信息
现有多个部门,因工作需要,将TS部的资料存放/TS录中集中管理,以便TS人员浏览,并且该目录只允许TS部员工访
[root@c74 ~]# mkdir -p /ts
[root@c74 ~]# useradd ts_user1 -g ts -s /sbin/nologin
[root@c74 ~]# chown -R ts_user1:ts /ts
[root@c74 ~]# chmd 660 /ts smbpasswd -a ts_user1
#进行测试;在创建一个其它用户测试可否访问?
[root@c74 ~]# vi /etc/samba/smb.conf
[global]
workgroup = WG
security = user
passdb backend = tdbsam
map to guest = bad user
dns proxy = no
[share]
comment = Share Directories
path = /share
read only = yes
guest ok = yes
[TS]
comment = ts
path = /ts
writable = yes
write list = +ts
[root@c74 ~]# systemctl restart smb
实现不同的用户访问同一个共享目录具有不同的权限,便于管理和维护。
a. 某公司有5个部门,分别为:人事行政部(HR)、财务部(FM)、技术支持部(TS)、项目部(PD)、客服部(CS)
b. 各部门的文件夹只允许本部门员工有权访问;各部门之间交流性质的文件放到公用文件夹中(SHARE)
c. 每个部门都有一个管理本部门文件夹的管理员账号和一个只能新建和查看文件的普通用户权限的账号
d. 公用文件夹中存放各部门共享文件的文件夹
e. 对于各部门自己的文件夹,各部门管理员具有完全控制权限,而各部门普通用户可以在该部门文件夹下新建文件及文 件夹,并且对于自己新建的文件及文件夹有完全控制权限,对于管理员新建及上传的文件和文件夹只能访问,不能更改 和删除。不是本部门用户不能访问本部门文件夹
f. 对于公用文件夹中的各部门共享文件夹,各部门管理员具有完全控制权限,而各部门普通用户可以在该部门文件夹下 新建文件及文件夹,并且对于自己新建的文件及文件夹有完全控制权限,对于管理员新建及上传的文件和文件夹只能访 问,不能更改和删除。本部门用户(包括管理员和普通用户)在访问其他部门共享文件夹时,只能查看不能修改删除新建
名称要求:(可忽略大小写)
各文件夹名称,HR、FM、TS、PD、CS、SHARE
HR管理员HR_ADMIN,普通用户HR_USER
FM管理员FM_ADMIN,普通用户FM_USER
TS管理员TS_ADMIN,普通用户TS_USER
PD管理员PD_ADMIN,普通用户PD_USER
CS管事员CS_ADMIN,普通用户CS_USER
#HR
[root@c74 ~]# useradd hr_admin hr_user -s /sbin/nologin
[root@c74 ~]# smbpasswd -a hr_admin
[root@c74 ~]# smbpasswd -a hr_user
[root@c74 ~]# mkdir -p /company/HR
[root@c74 ~]# chmod 1775 /company/HR
[root@c74 ~]# chown hr_admin:hr_admin /company/HR
#SHARE
[root@c74 ~]# mkdir -p /company/share
[root@c74 ~]# mkdir -p /company/share/HR
#smb
[root@c74 ~]# vi /etc/samba/smb.conf
[global]
workgroup = WORKGROUP
security = user
passdb backend = tdbsam
map to guest = bad user
dns proxy = no
[share]
comment = Share
path = /share
browseable = yes
read only = yes
guest ok = yes
[hr]
comment = HR
path = /company/HR
browseable = yes
writable = yes
admin users = hr_admin
valid users = hr_user,hr_admin
create mask = 0750
directory mask = 0750
[share_hr]
comment = share_hr
path = /company/share/HR
writable = yes
admin users = hr_admin
valid users = hr_user,hr_admin
#重启服务并进行测试
[root@c74 ~]# systemctl restart smb
评论前必须登录!
立即登录 注册