一、samba知识点
1、samba做什么的?
samba是在 Linux系统上实现 SMB / CIFS 协议的免费软件,由服务器及客户端程序构成,主要用于局域网内实现文件、打印机等资源的共享服务。
2、samba特性
使用smb/cifs协议,可跨平台、可实现文件系统的挂载。
3、工作模式
- share 匿名验证
- user本地用户验证(默认方式)
通过tdbsam方式建立用户数据库文件passdb.tdb来进行验证登入。首先先要用本地在通过pdbedit命令将本地用户映射成samba用户。
- 别名用户访问(虚拟用户)
4、samba软件包,服务端口,配置文件
|
主服务包:samba |
进程名:smb |
服务端口: SMB(TCP 139)、CIFS(TCP 445)
|
445端口:负责文件传输 控制发布共享的目录与权限 |
配置文件(/etc/samba)
|
主配置文件:smb.conf |
别名配置文件:smbusers |
5、samba的用户创建
1、使用pdbedit 命令来创建samba共享用户
- 新建 Samba 账户。
pdbedit –a username
- 删除 Samba 账户。
pdbedit –x username
- 暂停该 Samba 用户的账号。
pdbedit –c “[D]” –u username
- 恢复该 Samba 用户的账号。
pdbedit –c “[]” –u username:
- 列出 Samba 用户列表,读取 passdb.tdb 数据库文件。
- 列出 Samba 用户列表的详细信息。
pdbedit –L:pdbedit –Lv:列出 Samba 用户列表的详细信息。

2、使用smbclient 命令来创建用户
- 新建 Samba 账户。
smbpasswd–a username
- 删除 Samba 账户。
smbpasswd–x username
- 暂停该 Samba 用户的账号。
smbpasswd -d -U username
- 恢复该 Samba 用户的账号。
smbpasswd -e -U username:
- 列出 Samba 用户列表,读取 passdb.tdb 数据库文件。
- 列出 Samba 用户列表的详细信息。

6、samba客户端登入
1、Linux 端:
1、查看服务器的共享资源
格式: smbclient -L //服务器IP
[root@pxe ~]# smbclient -L //192.168.75.253
Enter SAMBA\root's password:
Anonymous login successful
Sharename Type Comment
--------- ---- -------
homes Disk Project Development Department
public Disk PUBLIC Project Development
IPC$ IPC IPC Service (Samba Server Version 4.7.1)
Reconnecting with SMB1 for workgroup listing.
Anonymous login successful
Server Comment
--------- -------
Workgroup Master
--------- -------
[root@pxe ~]#
2、登入服务器的共享资源
格式: smbclient -U 指定用户 //服务器IP
[root@pxe ~]# smbclient -U admin //192.168.75.253/public
Enter SAMBA\admin's password:
Try "help" to get a list of possible commands.
smb: \> dir
. D 0 Wed Nov 26 12:26:44 2025
.. DR 0 Wed Nov 19 22:33:47 2025
readme.txt N 17 Wed Nov 26 12:26:44 2025
20936704 blocks of size 1024. 20903372 blocks available
smb: \>
1、挂载使用
临时:
[root@pxe ~]# mount -t cifs -o username=dev,password=123456 //192.168.75.253/public /smbshare
永久: 写入/etc/fstab
//服务器 ip/服务器共享 /本地挂载目录 cifs defaults,_netdev,username=xxx,password=xxx 0 0
[root@pxe ~]# echo "//192.168.75.253/public /smbshare cifs defaults,_netdev,username=dev,password=123456 0 0 " >> /etc/fstab
2、SMB客户端的 multiuser 挂载技术,管理员只需要作一次挂载,客户端在访问挂载点时,若需要不同权限,可以临时切换为新的共享用户(无需重新挂载)
[root@pxe smbshare]# echo "my name is dev " >> readme.txt
-bash: readme.txt: Permission denied
[root@pxe ~]# mount -t cifs -o multiuser,sec=ntlmssp,username=admin //192.168.75.253/public /smbshare
[root@pxe ~]# cd /smbshare/
[root@pxe smbshare]# echo "my name is admin " >> readme.txt
[root@pxe smbshare]# cat readme.txt
this is pex test
my name is admin
2、Window 端
1、地址栏输入:\\服务器IP\共享名
2、windows查看网络连接

二、功能模块
1、网络访问控制
拒绝某个网段 hosts deny = 192.168.75.
允许某个IP hosts allow = 192.168.75.3
拒绝所有 hosts deny = all
允许某个网段但拒绝某个单个IP hosts allow = 172.38.40. EXCEPT 172.38.40.254
deny和allow同时存在,allow优先
2、共享目录读写控制
1、资源权限
当执行smbclient命令时是否可以查看看到共享资源
browseable = yes/no
2、是否可匿名登入
public = yes/no 或者 guest ok = yes/no
3、是否可写
writable = yes/no
4、只读权限
read only = yes/no
5、部分可写权限
read only = yes/no
write list = 用户名,@组名
6、访问对象控制
允许那些用户可以登入samba服务器
valid users = 用户名,@组名
三、实验
场景一、特殊(家)目录共享
要求:成立一个研发部门Project Development Department,运维组dev和开发组ops再加上一个项目经理op,搭建一个samba服务给dev组提供operation共享目录,给ops组提供develop共享目录,两个组的资源组员之间不能相互访问,op对两个组的目录都有读写权限。各自的资源信息不可查看,不能匿名登入。dev组在192.168.88网段,ops组在192.168.100网段,op在192.168.75网段,资源不允许192.168.75网段访问
dev组成员有zhangsan,ops组成员有lisi,op成员admin
1、创建用户信息和组信息
用户创建
[root@public ~]# useradd -s /bin/bash admin
[root@public ~]# echo "123456" | passwd --stdin admin
Changing password for user admin.
passwd: all authentication tokens updated successfully.
[root@public ~]# useradd -s /sbin/nologin -d /home/operation dev
[root@public ~]# useradd -s /sbin/nologin -d /home/develop ops
添加admin在dev和ops组里面
[root@public ~]# groupmems -g dev -a admin
[root@public ~]# groupmems -g ops -a admin
[root@public ~]# cat /etc/group | grep -E "dev|ops"
dev:x:1001:admin
ops:x:1002:admin
2、 搭建samba服务器,安装samba服务包
[root@public ~]# yum -y install samba samba-common
启动samba服务,设置开机自启
[root@public ~]# systemctl start smb
[root@public ~]# systemctl enable smb
Created symlink from /etc/systemd/system/multi-user.target.wants/smb.service to /usr/lib/systemd/system/smb.service.
[root@public ~]#
3、修改/etc/samba/smb.conf配置
添加smb用户
[root@public ~]# pdbedit -a admin
[root@public ~]# pdbedit -a dev
[root@public ~]# pdbedit -a ops
[root@public ~]# pdbedit -L
dev:1001:
ops:1002:
admin:1000:
修改配置
[global]
workgroup = MYGROUP
server string = Samba Server Version %v
;监控的网卡
interfaces = lo 192.168.75.253
;允许192.168.{88,100}网段访问
hosts allow = 192.168.88. 192.168.100.
;拒绝192.168.75网段的访问,这个192.168.75.252地址除外
hosts deny = 192.168.75. EXCEPT 192.168.75.252
log file = /var/log/samba/log.%m
max log size = 50
;认证模式
security = user
passdb backend = tdbsam
[homes]
comment = Project Development Department
browseable = yes
guest ok = no
writable = yes
valid users = %S,admin
修改完成后重启服务
[root@public ~]# systemctl restart smb
4、测试登入
[root@pxe ~]# smbclient -L //192.168.75.253
Enter SAMBA\root's password:
Anonymous login successful
Sharename Type Comment
--------- ---- -------
homes Disk Project Development Department
IPC$ IPC IPC Service (Samba Server Version 4.7.1)
Reconnecting with SMB1 for workgroup listing.
Anonymous login successful
Server Comment
--------- -------
Workgroup Master
--------- -------
[root@pxe ~]#
使用admin登入dev组
[root@pxe ~]# smbclient -U admin //192.168.75.253/dev
Enter SAMBA\admin's password:
Try "help" to get a list of possible commands.
smb: \> dir
NT_STATUS_ACCESS_DENIED listing \*
smb: \>
smb对admin有访问权限,但是dev的目录对admin没有访问权限,要加上特殊权限,上面已经设置admin在dev和ops组中,给组设置对dev或者ops目录有读写访问权限
[root@public home]# getfacl develop/
# file: develop/
# owner: ops
# group: ops
user::rwx
group::---
other::---
[root@public home]# setfacl -m g:ops:rwx develop/
[root@public home]# setfacl -m g:dev:rwx operation/
[root@public home]# getfacl operation/
# file: operation/
# owner: dev
# group: dev
user::rwx
group::---
group:dev:rwx
mask::rwx
other::---
[root@public home]#
[root@pxe ~]# smbclient -U admin //192.168.75.253/dev
Enter SAMBA\admin's password:
Try "help" to get a list of possible commands.
smb: \> dir
. D 0 Wed Nov 26 10:13:22 2025
.. D 0 Wed Nov 26 10:13:42 2025
.bash_logout H 18 Wed Apr 11 08:53:01 2018
.bash_profile H 193 Wed Apr 11 08:53:01 2018
.bashrc H 231 Wed Apr 11 08:53:01 2018
18597888 blocks of size 1024. 17323764 blocks available
smb: \>
不能相互访问
[root@pxe ~]# smbclient -U ops //192.168.75.253/dev
Enter SAMBA\ops's password:
tree connect failed: NT_STATUS_ACCESS_DENIED
场景二、公共目录共享
根据场景一、添加一个公共共享目录/common, 设置admin有读写权限,dev\ops组成员对/common只读权限
资源可见,不可匿名访问
1、在/etc/samba/smb.conf ,上添加后,保存重启smb服务
;共享名
[public]
;说明
comment = PUBLIC Project Development
;共享的目录
path = /common
browseable = yes
public = no
;对部分用户只读权限
read only = yes
write list = @admin
valid users = @admin,@dev,@ops
对/common设置特殊访问权限
[root@public samba]# ll -d /common/
drwxr-xr-x. 2 root root 6 Nov 19 22:29 /common/
[root@public samba]# setfacl -m g:admin:rwx /common/
2、测试
[root@pxe ~]# smbclient -L //192.168.75.253
Enter SAMBA\root's password:
Anonymous login successful
Sharename Type Comment
--------- ---- -------
homes Disk Project Development Department
public Disk PUBLIC Project Development
IPC$ IPC IPC Service (Samba Server Version 4.7.1)
Reconnecting with SMB1 for workgroup listing.
Anonymous login successful
Server Comment
--------- -------
Workgroup Master
--------- -------
[root@pxe ~]#
使用admin用户登入测试可以写入成功

使用dev\用户或者ops用户拒绝写入

3、在linux服务器上挂载
[root@pxe ~]# echo "//192.168.75.253/public /smbshare cifs defaults,_netdev,username=dev,password=123456 0 0 " >> /etc/fstab
[root@pxe ~]# mount -a
[root@pxe ~]# df -h | grep smbshare
//192.168.75.253/public 20G 33M 20G 1% /smbshare
[root@pxe ~]#

801

被折叠的 条评论
为什么被折叠?



