目录
1、Samba介绍
1.1、Samba概述
1.2、Samba服务器的主要组成部分
1.3、Samba的工作原理
2、Samab服务器的安装与配置
2.1、安装samba
2.2、Samba主配置文件
2.2.1、全局设置段[global]
2.2.2、用户目录段[homes]
2.2.3、配置文件检查工具
3、示例
3.1、需要用户验证的共享
3.2、用户映射及访问地址限制
3.2.1、共享账号映射(别名)
3.2.2、访问地址限制
3.3、访问共享文件夹
3.3.1、smbclient 命令,查看及登录使用共享
3.3.2、使用mount 挂载共享文件夹
1、Samba介绍
Samba的核心是SMB协议,它是Microsoft和Intel在1987年联合制定的协议,主要用于实现Microsoft网络通信的协议。而Samba被认为是一套软件,使Linux系统可以应用于Microsoft网络通信协议。
1.1、Samba概述
服务器信息块(Server Message Block,SMB)协议是一种Client/Server(客户端/服务器)、请求响应协议,主要用于在计算机之间共享文件、打印机、串行端口等。
通过SMB协议,应用程序可以访问远程服务器端的文件、以及打印机、命名管道(named pipe)。同样,客户端应用程序可以使用SMB协议,在各种网络环境下读、写服务器上的文件,以及对服务器程序提出服务请求。
在SMB协议中,它为系统提供了两种安全保护,分别是共享级保护(Share Level Protection)和用户级保护(User Level Protection)。
共享级保护(Share-Level Security)
在共享级保护模式下,访问控制是基于每个共享资源的。这意味着每个共享文件夹或打印机可以设置一个密码,而任何知道这个密码的用户都可以访问该共享资源,不管这个用户是谁。这种方式简单易用,但提供的安全性较低,因为它不区分不同的用户,只要知道密码,任何人都可以访问。
用户级保护(User-Level Security)
用户级保护提供了更高级别的安全性。在这种模式下,网络上的每个用户都需要有一个账户和密码,这些账户信息通常由网络上的服务器(如Windows域控制器)管理。当用户尝试访问共享资源时,他们必须提供有效的用户名和密码,服务器将验证这些凭据并决定该用户是否有权访问该资源。这种方式允许对不同用户进行更细粒度的访问控制,可以设置哪些用户可以访问哪些资源,以及他们可以进行哪些操作(如读取、写入、修改等)。
1.2、Samba服务器的主要组成部分
在Linux系统中,Samba服务实际上就是一个软件程序集,通过该程序集来实现SMB协议。Samba程序集的主要组件如下所示:
smbd 使用SMB协议与客户端进行连接,主要完成用户认证、权限管理和文件共享的任务。当用户访问服务器,需要查找共享文件就是依靠该进程对数据传输进行管理。
nmbd提供NetBIOS名称服务器的守护进程,帮助客户端计算机定位服务器和域。另外,还提供浏览服务以显示网络上的共享资源列表。
使用netstat命令可以验证服务进程状态,其中smbd程序负责监听TCP协议的139端口(SMB协议)、445端口(CIFS协议),而nmbd服务程序负责监听UDP协议的137-138端口(NetBIOS协议)
netstat -anupt |grep “mbd”
smb.conf Samba服务器的主配置文件。
swat Samba服务器专用的WWW服务器,主要用于通过客户端计算机的浏览器配置Samba服务器,提供了Samba服务器的图形化配置界面。
smbclient 一个简单的SMB客户端程序,主要用于访问其他SMB计算机共享的文件或打印资源。
smbprint 一个Shell脚本,使用smbprint程序可以向Windows操作系统下共享的打印机发送需要打印的文档。
smblookup 一个查询工具,用于查询NetBIOS名称服务器的命令行程序。
1.3、Samba的工作原理
在Linux系统中,使用Samba服务架设的Samba服务器,可以使Linux客户能够查看到服务器上的共享资源;同时,Windows用户也可以查看到Linux服务器中共享的资源,它具体的工作过程如下:
(1)协议协商,在Samba服务架设完成后,如果客户端要访问Samba服务器时,客户端会向Samba服务器发送一个SMB negprot请求数据报,并列出它所支持的所有SMB协议版本。当服务器接收到客户端的请求信息后,会开始响应请求并列出希望使用的协议版本。如果没有可以使用的协议版本,则返回0XFFFFH通信结束信息。
(2)建立连接,在客户端与Samba服务器协议协商确定SMB协议版本后,客户端通过发送SesssetupX请求数据报向服务器发起一个用户或共享认证,包括一对用户名和密码或一个简单密码。当服务器接收到认证后,会向客户端发送一个SesssetupX应答数据报,表示允许或拒绝本次连接。
(3)访问共享资源,当客户端和服务器建立连接完成后,客户端会向服务器发送一个Tcon或SMB TconX数据报列出想要访问网络资源的名称;然后,服务器会发送一个SMB TconX应答数据报,表示该访问是否被接受或拒绝。
(4)断开连接,当访问被允许后,客户端会连接到服务器的相应资源。这时,客户端可以通过SMB协议提供的命令,对文件进行打开、读取、修改和关闭等操作。
2、Samab服务器的安装与配置
2.1、安装samba
在CentOS系统中,Samba服务器在默认情况下是没有被安装的;因此,需要用户手动安装。如果用户想要查看系统中是否已安装了该软件包,可以使用“rpm-q samba”命令,具体步骤如下:
[root@192 ~]# rpm -q samba
未安装软件包 samab
[root@192 ~]# yum -y install samba
2.2、Samba主配置文件
Samba主配置文件位于/etc/samba目录下,名称为smb.conf。
smb.conf文件主要包括全局设置段[global]、用户目录段[homes]和打印机[printers]段。smb.conf.example为模板文件,其中,“#”则表示是系统注释用于解析说明,“;”则表示可以由用户来修改或设置的部分。
2.2.1、全局设置段[global]
“全局”部分包含了适用于整个服务器的设置。下面是一些常见的全局配置项及其含义:
workgroup:所在工作组名称
server string:服务器描述信息
security:安全级别
– user
– 含义:这是最常用的安全模式。在此模式下,客户端必须为每个想要访问的Samba共享提供有效的用户名和密码。
– 适用场景:适用于大多数环境,特别是需要对不同用户或组进行访问控制的场
– domain
– 含义:在域安全模式下,Samba服务器成为Windows域的一部分,并且所有用户认证请求都由域控制器处理。
– 适用场景:适用于已经存在Windows域控制器的企业网络环境,可以实现集中管理用户账户和密码。
– ads
– 含义:在Active Directory安全模式下,Samba服务器加入到Active Directory域中,并使用Kerberos进行认证。
– 适用场景:适用于使用Active Directory作为中央认证服务的环境,特别是在大型企业或教育机构中。
– auto
– 含义:Samba会根据环境自动选择最合适的安全模式。
– 适用场景:当您不确定使用哪种安全模式或希望Samba自动选择最优选项时使用。
– log file:日志文件位置,默认为/var/log/samba/log.%m,“%m” 变量表示客户机地址
– max log size:设置日志文件的最大大小(KB)。
– log level:设置日志详细等级。
– passdb backend:指定用户密码数据库的后端存储方式,如tdbsam、ldapsam
– interfaces:指定Samba绑定的网络接口和/或IP地址。
– bind interfaces only:当设置为yes时,Samba只服务于interfaces指令指定的接口。
– hosts allow / hosts deny:控制哪些IP地址允许或拒绝访问Samba服务。
2.2.2、用户目录段[homes]
除了全局配置部分外,还可以为每个共享目录单独配置一系列选项。这些配置项定义了共享目录的访问权限、行为和其他特性。以下是一些常见的共享目录配置项及其含义:
[sharename]
含义:这不是一个配置项,而是共享名称的标识符,用于定义一个新的共享。所有在这个标识符下面的配置项都将应用于名为sharename的共享。
示例:
[documents]
path
含义:指定共享目录在服务器上的文件系统路径。
示例:
path = /srv/samba/documents
comment
含义:为共享设置一个描述性的注释或说明。
示例:
comment = Shared documents folder
read only
含义:指定共享是否为只读。默认值通常是yes。
示例:
read only = no
writeable
含义:与read only相反,指定共享是否可写。设置为yes等同于将read only设置为no。
示例:
writeable = yes
Samba服务设置的读写权限优先级要低于文件系统中设置的权限
browseable
含义:决定共享是否在网络邻居或类似工具中可见。如果设置为no,则用户必须知道共享的确切名称才能访问。
示例:
browseable = yes
guest ok
含义:指定是否允许未经认证的访问(即访客访问)。如果设置为yes,则不需要密码即可访问共享。
示例:
guest ok = no
valid users
含义:指定哪些用户或用户组有权限访问共享。可以是单个用户、多个用户(用空格分隔)或用户组(前面加@符号)。
示例:
valid users = @staff alice bob
create mask 和 directory mask
含义:分别指定新创建的文件和目录的默认权限掩码。
示例:
create mask = 0644
directory mask = 0755
2.2.3、配置文件检查工具
Samba服务器提供了一个配置文件检查工具——testparm程序,使用testparm工具可以对smb.cof配置文件的正确性进行检查,如果发现有错误将会进行提醒。
3、示例
3.1、需要用户验证的共享
建立 Samba 用户数据库文件
默认数据库文件位/var/lib/samba/private/passdb.tdb设置用户访问授权
新建共享目录与共享用户
修改 smb.conf 配置文件,添加名为 tools 的共享目录
重新加载 smb.conf 文件,或重启 smb 服务
确定用户访问权限
设置目录权限
设置上传文件和目录的默认权限
通过samba服务器共享本地目录时,用户最终是否拥有读写权限,除了需要设置用户授权以外,还要满足一个前提条件——在服务器本机中,与共享用户同名的系统用户对发布为共享的本地目录(如/opt/tools)必须既有相应的读写权限
另外,当通过共享目录上传文档时,对于共享用户所上传的文件,创建子目录的默认权限,可以分别使用配置项”directory mask“、”create mask“进行指定。(directory mask = 0755、create mask = 0644)
案例:将本地目录/opt/tools发布为共享文件夹,共享名为tools,要求tom、jerry能够访问,其中tom用户具有写入权限
1、添加系统用户
[root@samba ~]# useradd -s /sbin/nologin tom
[root@samba ~]# useradd -s /sbin/nologin jerry
2、将用户添加为共享用户
[root@samba ~]# pdbedit -a -u tom
new password: //输入密码
retype new password: //确认密码
[root@samba ~]# pdbedit -a -u jerry
new password: //输入密码
retype new password: //确认密码
3、列出samba密码数据库中的用户
[root@samba ~]# pdbedit -L
jerry:1001:
tom:1000:
4、修改配置文件
[root@samba samba]# vim /etc/samba/smb.conf
#[homes]
# comment = Home Directories
# valid users = %S, %D%w%S
# browseable = No
# read only = No
# inherit acls = Yes
[tools]
comment = mytools
path = /opt/tools
guest ok = no
read only = yes
valid users = tom,jerry
write list = tom
4、创建一个用作共享的目录并创建测试文件
[root@samba ~]# mkdir /opt/tools
[root@samba ~]# touch /opt/tools/test_samba.txt
5、检查配置文件,并重新加载
[root@samba ~]# testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
.....忽略....
[root@samba ~]# systemctl reload nmb 通过系统命令加载
[root@samba ~]# smbcontrol all reload-config 通过smb服务命令加载,与上一个命令二选一
分别使用两个两个用户登录都可以看到共享目录中的文件,但是tom用户没有办法写入
[root@samba ~]# ll /opt/tools/
总用量 0
-rw-r--r-- 1 root root 0 5月 12 03:14 test_samba.txt
文件没有写入权限,修改权限
[root@samba samba]# chmod 777 /opt/tools/
此时尝试写入,还是没有权限。
需要在配置文件中添加
directory mask = 0755
create mask = 0644
完整配置文件如下(用户目录段)
[tools]
comment = mytools
path = /opt/tools
guest ok = no
read only = yes
valid users = tom,jerry
write list = tom
directory mask = 0755
create mask = 0644
再次测试tom用户可以修改文件。可创建文件
3.2、用户映射及访问地址限制
3.2.1、共享账号映射(别名)
为了进一步提高Samba共享服务的安全性,除了可以对指定的共享目录设置用户授权外,还可以采取用户映射、访问地址限制等措施
在使用Samba共享账号时,通常情况下,一个共享用户都有一个同名的系统用户账号
Samba服务器提供了“用户名称映射”(username map)机制,可以将一个共享用户映射为多个不同的名称(别名)
Samba共享账号的映射文件默认位于/etc/samba/smbusers
设置好共享用户的别名记录以后,若要正常启用账号映射功能,需要修改著配置文件/etc/samba/smb.conf,添加全局配置项“username map = /etc/samba/smbusers”,然后重新加载配置即可生效
1、新建用户名映射文件
[root@samba]# cat /etc/samba/smbusers
tom = xiaoqiang
jerry = xiaoming
2、编辑配置文件,在全局配置项中添加username map
username map = /etc/samba/smbusers
3、重新加载配置文件
[root@samba]# smbcontrol all reload-config
此时使用xiaoqiang就可以访问共享文件,权限等同与tom
3.2.2、访问地址限制
一般用在全局配置[global]部分
hosts allow配置项:仅允许特定的客户机
hosts deny配置项:仅拒绝特定的客户机
客户机地址表示形式:
以空格分割多个地址
主机名或IP地址:例如:192.168.168.11 或者 prtsvr
网络地址,例如:173.17. 或者 173.17.0.0/255.255.0.0
编辑配置文件在全局配置项[global]添加
hosts allow = 192.168.
此时,172.16.网段不能访问
3.3、访问共享文件夹
3.3.1、smbclient 命令,查看及登录使用共享
smbclient是一个在Linux系统中用于访问SMB/CIFS资源的命令行工具,类似于Windows中的网络邻居。它可以用来浏览Samba共享、传输文件,甚至可以用作简单的Samba服务器配置和故障排除的工具。要使用此工具需要安装samba-client,安装命令为yum install samba-client。以下是一些基本的smbclient使用方法:
查看共享列表
要查看某个服务器上的共享列表,可以使用以下命令:
smbclient -L <服务器地址> -U <用户名>
-L 参数后面跟服务器的地址(IP或主机名)。
-U 参数用于指定用户名。如果需要匿名访问,可以使用-N 参数。
例如,想要查看服务器192.168.1.100上的共享列表,并且使用用户名user:
smbclient -L 192.168.1.100 -U user
系统会提示输入用户user的密码。
登录并使用共享
要连接到特定的共享并进行交互式操作,可以使用:
smbclient //<服务器地址>/<共享名> -U <用户名>
这会启动一个类似FTP的命令行界面,你可以使用各种命令来操作共享中的文件,如ls列出文件,get下载文件,put上传文件等。
例如,连接到服务器192.168.1.100上名为share的共享,使用用户名user:
smbclient //192.168.1.100/share -U user
再次,系统会提示输入密码。
传输文件
smbclient也可以在非交互模式下使用,直接从命令行传输文件。例如,要从共享下载文件:
smbclient //192.168.1.100/share -U user -c ‘get remote-file.txt local-file.txt’
或者上传文件到共享:
smbclient //192.168.1.100/share -U user -c ‘put local-file.txt remote-file.txt’
-c 参数后面可以跟一个或多个要在连接成功后立即执行的命令,命令之间用分号分隔。
这些是smbclient最基本的使用方法。根据你的具体需求,smbclient还有很多其他功能和选项,可以通过查看其手册页(运行man smbclient)来获取更多信息。
3.3.2、使用mount 挂载共享文件夹
[root@samba ~]# yum -y install cifs-utils
[root@samba ~]# mount -o username=tom //192.168.48.139/tools /data
Password for tom@//192.168.48.139/tools: ******
[root@samba ~]# cd /data
[root@samba data]# ls
1111.txt install.sh test_samba.txt
[root@samba ~]# mount |grep data
//192.168.48.139/tools on /data type cifs (rw,relatime,vers=default,cache=strict,username=tom,domain=192,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.48.139,file_mode=0755,dir_mode=0755,soft,nounix,serverino,mapposix,rsize=1048576,wsize=1048576,echo_interval=60,actimeo=1)
[root@samba ~]# vim /etc/samba/user
username=tom
password=123456
[root@samba ~]# chmod 600 /etc/samba/user
[root@samba ~]# mount -t cifs //192.168.48.139/tools /data -o credentials=/etc/samba/user

















暂无评论内容