Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。
文章目录
一、安装samba
以管理员身份运行:
[user@localhost ~]$ sudo yum install samba
输出:
[sudo] user 的密码:
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.tuna.tsinghua.edu.cn
* extras: mirrors.tuna.tsinghua.edu.cn
* updates: mirrors.tuna.tsinghua.edu.cn
base | 3.6 kB 00:00
extras | 2.9 kB 00:00
updates | 2.9 kB 00:00
正在解决依赖关系
--> 正在检查事务
---> 软件包 samba.x86_64.0.4.10.16-18.el7_9 将被 安装
--> 正在处理依赖关系 samba-libs = 4.10.16-18.el7_9,它被软件包 samba-4.10.16-18.el7_9.x86_64 需要
--> 正在处理依赖关系 samba-common-tools = 4.10.16-18.el7_9,它被软件包 samba-4.10.16-18.el7_9.x86_64 需要
--> 正在处理依赖关系 samba-common-libs = 4.10.16-18.el7_9,它被软件包 samba-4.10.16-18.el7_9.x86_64 需要
--> 正在处理依赖关系 samba-common = 4.10.16-18.el7_9,它被软件包 samba-4.10.16-18.el7_9.x86_64 需要
--> 正在处理依赖关系 samba-common = 4.10.16-18.el7_9,它被软件包 samba-4.10.16-18.el7_9.x86_64 需要
--> 正在处理依赖关系 samba-client-libs = 4.10.16-18.el7_9,它被软件包 samba-4.10.16-18.el7_9.x86_64 需要
--> 正在处理依赖关系 libwbclient = 4.10.16-18.el7_9,它被软件包 samba-4.10.16-18.el7_9.x86_64 需要
--> 正在处理依赖关系 libwbclient = 4.10.16-18.el7_9,它被软件包 samba-4.10.16-18.el7_9.x86_64 需要
--> 正在处理依赖关系 libxattr-tdb-samba4.so(SAMBA_4.10.16)(64bit),它被软件包 samba-4.10.16-18.el7_9.x86_64 需要
--> 正在处理依赖关系 libxattr-tdb-samba4.so()(64bit),它被软件包 samba-4.10.16-18.el7_9.x86_64 需要
--> 正在检查事务
---> 软件包 libwbclient.x86_64.0.4.10.16-5.el7 将被 升级
--> 正在处理依赖关系 libwbclient = 4.10.16-5.el7,它被软件包 libsmbclient-4.10.16-5.el7.x86_64 需要
--> 正在处理依赖关系 libwbclient = 4.10.16-5.el7,它被软件包 samba-client-4.10.16-5.el7.x86_64 需要
---> 软件包 libwbclient.x86_64.0.4.10.16-18.el7_9 将被 更新
---> 软件包 samba-client-libs.x86_64.0.4.10.16-5.el7 将被 升级
---> 软件包 samba-client-libs.x86_64.0.4.10.16-18.el7_9 将被 更新
---> 软件包 samba-common.noarch.0.4.10.16-5.el7 将被 升级
---> 软件包 samba-common.noarch.0.4.10.16-18.el7_9 将被 更新
---> 软件包 samba-common-libs.x86_64.0.4.10.16-5.el7 将被 升级
---> 软件包 samba-common-libs.x86_64.0.4.10.16-18.el7_9 将被 更新
---> 软件包 samba-common-tools.x86_64.0.4.10.16-18.el7_9 将被 安装
---> 软件包 samba-libs.x86_64.0.4.10.16-18.el7_9 将被 安装
--> 正在处理依赖关系 libpytalloc-util.so.2(PYTALLOC_UTIL_2.1.9)(64bit),它被软件包 samba-libs-4.10.16-18.el7_9.x86_64 需要
--> 正在处理依赖关系 libpytalloc-util.so.2(PYTALLOC_UTIL_2.1.6)(64bit),它被软件包 samba-libs-4.10.16-18.el7_9.x86_64 需要
--> 正在处理依赖关系 libpytalloc-util.so.2(PYTALLOC_UTIL_2.0.6)(64bit),它被软件包 samba-libs-4.10.16-18.el7_9.x86_64 需要
--> 正在处理依赖关系 libpytalloc-util.so.2()(64bit),它被软件包 samba-libs-4.10.16-18.el7_9.x86_64 需要
--> 正在处理依赖关系 libpyldb-util.so.1()(64bit),它被软件包 samba-libs-4.10.16-18.el7_9.x86_64 需要
--> 正在检查事务
---> 软件包 libsmbclient.x86_64.0.4.10.16-5.el7 将被 升级
---> 软件包 libsmbclient.x86_64.0.4.10.16-18.el7_9 将被 更新
---> 软件包 pyldb.x86_64.0.1.5.4-2.el7 将被 安装
--> 正在处理依赖关系 libldb(x86-64) = 1.5.4-2.el7,它被软件包 pyldb-1.5.4-2.el7.x86_64 需要
--> 正在处理依赖关系 python-tdb(x86-64) >= 1.3.18,它被软件包 pyldb-1.5.4-2.el7.x86_64 需要
---> 软件包 pytalloc.x86_64.0.2.1.16-1.el7 将被 安装
---> 软件包 samba-client.x86_64.0.4.10.16-5.el7 将被 升级
---> 软件包 samba-client.x86_64.0.4.10.16-18.el7_9 将被 更新
--> 正在检查事务
---> 软件包 libldb.x86_64.0.1.5.4-1.el7 将被 升级
---> 软件包 libldb.x86_64.0.1.5.4-2.el7 将被 更新
---> 软件包 python-tdb.x86_64.0.1.3.18-1.el7 将被 安装
--> 解决依赖关系完成
依赖关系解决
================================================================================
Package 架构 版本 源 大小
================================================================================
正在安装:
samba x86_64 4.10.16-18.el7_9 updates 720 k
为依赖而安装:
pyldb x86_64 1.5.4-2.el7 updates 49 k
pytalloc x86_64 2.1.16-1.el7 base 18 k
python-tdb x86_64 1.3.18-1.el7 base 20 k
samba-common-tools x86_64 4.10.16-18.el7_9 updates 466 k
samba-libs x86_64 4.10.16-18.el7_9 updates 271 k
为依赖而更新:
libldb x86_64 1.5.4-2.el7 updates 149 k
libsmbclient x86_64 4.10.16-18.el7_9 updates 146 k
libwbclient x86_64 4.10.16-18.el7_9 updates 116 k
samba-client x86_64 4.10.16-18.el7_9 updates 646 k
samba-client-libs x86_64 4.10.16-18.el7_9 updates 5.0 M
samba-common noarch 4.10.16-18.el7_9 updates 216 k
samba-common-libs x86_64 4.10.16-18.el7_9 updates 182 k
事务概要
================================================================================
安装 1 软件包 (+5 依赖软件包)
升级 ( 7 依赖软件包)
总计:7.9 M
总下载量:1.5 M
Is this ok [y/d/N]: y
Downloading packages:
(1/6): pyldb-1.5.4-2.el7.x86_64.rpm | 49 kB 00:00
(2/6): python-tdb-1.3.18-1.el7.x86_64.rpm | 20 kB 00:00
(3/6): pytalloc-2.1.16-1.el7.x86_64.rpm | 18 kB 00:00
(4/6): samba-4.10.16-18.el7_9.x86_64.rpm | 720 kB 00:00
(5/6): samba-common-tools-4.10.16-18.el7_9.x86_64.rpm | 466 kB 00:00
(6/6): samba-libs-4.10.16-18.el7_9.x86_64.rpm | 271 kB 00:00
--------------------------------------------------------------------------------
总计 9.3 MB/s | 1.5 MB 00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在更新 : libldb-1.5.4-2.el7.x86_64 1/20
正在更新 : samba-common-4.10.16-18.el7_9.noarch 2/20
正在更新 : libwbclient-4.10.16-18.el7_9.x86_64 3/20
正在更新 : samba-client-libs-4.10.16-18.el7_9.x86_64 4/20
正在更新 : samba-common-libs-4.10.16-18.el7_9.x86_64 5/20
正在更新 : libsmbclient-4.10.16-18.el7_9.x86_64 6/20
正在安装 : python-tdb-1.3.18-1.el7.x86_64 7/20
正在安装 : pyldb-1.5.4-2.el7.x86_64 8/20
正在安装 : pytalloc-2.1.16-1.el7.x86_64 9/20
正在安装 : samba-libs-4.10.16-18.el7_9.x86_64 10/20
正在安装 : samba-common-tools-4.10.16-18.el7_9.x86_64 11/20
正在安装 : samba-4.10.16-18.el7_9.x86_64 12/20
正在更新 : samba-client-4.10.16-18.el7_9.x86_64 13/20
清理 : samba-client-4.10.16-5.el7.x86_64 14/20
清理 : libsmbclient-4.10.16-5.el7.x86_64 15/20
清理 : libwbclient-4.10.16-5.el7.x86_64 16/20
清理 : samba-client-libs-4.10.16-5.el7.x86_64 17/20
清理 : samba-common-libs-4.10.16-5.el7.x86_64 18/20
清理 : samba-common-4.10.16-5.el7.noarch 19/20
清理 : libldb-1.5.4-1.el7.x86_64 20/20
验证中 : samba-common-libs-4.10.16-18.el7_9.x86_64 1/20
验证中 : samba-client-4.10.16-18.el7_9.x86_64 2/20
验证中 : libldb-1.5.4-2.el7.x86_64 3/20
验证中 : samba-4.10.16-18.el7_9.x86_64 4/20
验证中 : samba-client-libs-4.10.16-18.el7_9.x86_64 5/20
验证中 : libsmbclient-4.10.16-18.el7_9.x86_64 6/20
验证中 : pyldb-1.5.4-2.el7.x86_64 7/20
验证中 : samba-common-tools-4.10.16-18.el7_9.x86_64 8/20
验证中 : samba-common-4.10.16-18.el7_9.noarch 9/20
验证中 : pytalloc-2.1.16-1.el7.x86_64 10/20
验证中 : samba-libs-4.10.16-18.el7_9.x86_64 11/20
验证中 : libwbclient-4.10.16-18.el7_9.x86_64 12/20
验证中 : python-tdb-1.3.18-1.el7.x86_64 13/20
验证中 : samba-client-libs-4.10.16-5.el7.x86_64 14/20
验证中 : libldb-1.5.4-1.el7.x86_64 15/20
验证中 : libsmbclient-4.10.16-5.el7.x86_64 16/20
验证中 : samba-common-4.10.16-5.el7.noarch 17/20
验证中 : libwbclient-4.10.16-5.el7.x86_64 18/20
验证中 : samba-client-4.10.16-5.el7.x86_64 19/20
验证中 : samba-common-libs-4.10.16-5.el7.x86_64 20/20
已安装:
samba.x86_64 0:4.10.16-18.el7_9
作为依赖被安装:
pyldb.x86_64 0:1.5.4-2.el7
pytalloc.x86_64 0:2.1.16-1.el7
python-tdb.x86_64 0:1.3.18-1.el7
samba-common-tools.x86_64 0:4.10.16-18.el7_9
samba-libs.x86_64 0:4.10.16-18.el7_9
作为依赖被升级:
libldb.x86_64 0:1.5.4-2.el7
libsmbclient.x86_64 0:4.10.16-18.el7_9
libwbclient.x86_64 0:4.10.16-18.el7_9
samba-client.x86_64 0:4.10.16-18.el7_9
samba-client-libs.x86_64 0:4.10.16-18.el7_9
samba-common.noarch 0:4.10.16-18.el7_9
samba-common-libs.x86_64 0:4.10.16-18.el7_9
完毕!
二、配置samba
samba配置文件位于/etc/samba/smb.conf
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的工作组,设置成 Windows 的工作组
security = user #安全选项,可以是 share|user|server|domain,安全级别递增
passdb backend = tdbsam #定义口令类型,存在如下3中口令校验
#smbpasswd:使用smbpasswd命令为系统用户设置Samba服务程序的密码
#tdbsam:创建数据库文件并使用pdbedit命令建立Samba服务程序的用户
#ldapsam:基于LDAP服务进行账户验证
printing = cups
printcap name = cups
load printers = yes #设置在Samba服务启动时是否共享打印机设备
cups options = raw #打印机的选项
[homes] #共享默认会将用户的主目录共享, 这是不安全的, 可以将其注释
comment = Home Directories
valid users = %S, %D%w%S
browseable = no #指定共享信息是否在"网上邻居"中可见
writable = yes #定义是否可以执行写入操作,与"read only"相反
inherit acls = yes
[printers] #打印机共享
comment = All Printers
path = /var/tmp #共享文件的实际路径(重要)
printable = yes
create mask = 0600
browseable = no
guest ok = no #是否所有人可见,等同于"public"参数
[print$]
comment = Printer Drivers
path = /var/lib/samba/drivers
write list = root
create mask = 0664
directory mask = 0775
[rootdir] #自定义的共享文件夹
comment = share some files
path = /home/samba/ #共享的路径
public = no #关闭"所有人可见"
writable = yes #允许写入操作
根据需要修改配置文件对应项(修改时去掉#
及其后面的注释)。
三、samba命令
pdbedit命令用于管理SMB服务程序的账户信息数据库,格式为pdbedit [选项] 账户
。pdbedit命令中使用的参数以及作用如下所示:
命令 | 作用 |
---|---|
pdbedit -a 用户名 | 新建Samba账户。 |
pdbedit -r 用户名 | 修改Samba账户。 |
pdbedit -x 用户名 | 删除Samba账户。 |
pdbedit -L | 列出Samba用户列表,读取passdb.tdb数据库文件。 |
pdbedit -Lv | 列出Samba用户列表详细信息。 |
pdbedit -c “[D]” -u 用户名 | 暂停该Samba用户账号。 |
pdbedit -c “[]” -u 用户名 | 恢复该Samba用户账号。 |
详细命令如下:
参数 | 详细参数 | 作用 |
---|---|---|
-a | –create | 新建samba用户 |
-r | –modify | 修改samba用户 |
-x | –delete | 删除samba用户 |
-L | –list | 列出全部samba用户,读取passdb.tdb数据库文件 |
-v | –verbose | 显示详细信息 |
-c | –account-control=STRING | 账户控制值 |
-w | –smbpasswd-style | 以smbpasswd格式输出 |
-u | –user=USER | 使用的用户 |
-N | –account-desc=STRING | 设置账户描述 |
-f | –fullname=STRING | 设置全名 |
-h | –homedir=STRING | 设置家目录 |
-D | –drive=STRING | 设置家设备 |
-S | –script=STRING | 设置登陆脚本 |
-p | –profile=STRING | 设置配置文件路径 |
-I | –domain=STRING | 设置用户域名 |
-U | –user SID=STRING | 设置用户SID或RID |
-M | –machine SID=STRING | 设置设备SID或RID |
-m | –machine | 账户是一个设备账户 |
-b | –backend=STRING | 使用不同的passdb作为默认后端 |
-i | –import=STRING | 指定后段导入用户账户 |
-e | –export=STRING | 导出用户账户到指定后端 |
–policies-reset | 恢复默认策略 | |
-P | –account-policy=STRING | 帐户策略的值(如最大密码有效期) |
-C | –value=LONG | 设置账号策略值 |
–force-initialized-passwords | 强制初始化passdb后端 | |
-z | –bad-password-count-reset | 重置错误密码 |
-Z | –logon-hours-reset | 重置登陆时间 |
–time-format=STRING | 时间参数的格式 | |
-t | –password-from-stdin | 从标准输入获取密码 |
-K | –kickoff-time=STRING | 设置开始时间 |
–set-nt-hash=STRING | 从nt-hash设置密码 | |
-d | –debuglevel=DEBUGLEVEL | 设置debug级别 |
-s | –configfile=CONFIGFILE | 使用备用配置文件 |
-l | –log-basename=LOGFILEBASE | 设置日志文件的基本名称 |
-V | –version | 输出版本号 |
–option=name=value | 从命令行设置smb.conf选项 | |
-? | –help | 显示帮助信息 |
–usage | 显示简要的使用信息 |
四、创建用户
例:创建名为user
的samba用户。
需用root账户运行以下命令:
[root@localhost user]# useradd user
[root@localhost user]# pdbedit -a user
设置完密码之后,输出:
new password:
retype new password:
Unix username: user
NT username:
Account Flags: [U ]
User SID: S-1-5-21-3493698449-1122089174-3843279965-1001
Primary Group SID: S-1-5-21-3493698449-1122089174-3843279965-513
Full Name: user
Home Directory: \\localhost\user
HomeDir Drive:
Logon Script:
Profile Path: \\localhost\user\profile
Domain: LOCALHOST
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: 三, 06 2月 2036 23:06:39 CST
Kickoff time: 三, 06 2月 2036 23:06:39 CST
Password last set: 五, 03 6月 2022 12:15:23 CST
Password can change: 五, 03 6月 2022 12:15:23 CST
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
五、设置SELinux安全上下文
创建用于共享资源的文件目录不仅要考虑到文件读写权限的问题,而且由于/home目录是系统中普通用户的家目录, 因此还需要考虑应用于该目录的SELinux安全上下文所带来的限制。 Samba服务程序配置文件中的注释就有关于SELinux安全上下文策略的说明, 我们只需按照过滤信息中有关SELinux安全上下文策略中的说明中给的值进行修改即可。 修改完毕后执行restorecon命令,让应用于目录的新SELinux安全上下文立即生效。
[root@localhost user]# semanage fcontext -a -t samba_share_t /home/user
[root@localhost user]# restorecon -Rv /home/user
输出:
restorecon reset /home/user context unconfined_u:object_r:user_home_dir_t:s0->unconfined_u:object_r:samba_share_t:s0
设置SELinux服务与策略,使其允许通过Samba服务程序访问普通用户家目录。执行getsebool命令, 筛选出所有与Samba服务程序相关的SELinux域策略。
[root@localhost user]# getsebool -a | grep samba
输出:
samba_create_home_dirs --> off
samba_domain_controller --> off
samba_enable_home_dirs --> on
samba_export_all_ro --> off
samba_export_all_rw --> off
samba_load_libgfapi --> off
samba_portmapper --> off
samba_run_unconfined --> off
samba_share_fusefs --> off
samba_share_nfs --> off
sanlock_use_samba --> off
tmpreaper_use_samba --> off
use_samba_home_dirs --> off
virt_use_samba --> off
根据策略的名称(和经验)选择出正确的策略条目进行开启。
[root@localhost user]# setsebool -P samba_enable_home_dirs on
六、关闭防火墙
1、打开“防火墙”。
2、在“配置”处选择“永久”。
3勾选"samba",重启系统。
七、Samba 服务管理
1、启动Samba服务
[root@localhost user]# systemctl start smb
2、停止Samba服务
[root@localhost user]# systemctl stop smb
3、查看Samba服务
[root@localhost user]# systemctl status smb
4、开机自启Samba服务
[root@localhost user]# systemctl enable smb
5、停止开机自启Samba服务
[root@localhost user]# systemctl disable smb
八、Windows 访问共享目录
直接Win + R
,或者在此电脑
的地址栏里,输入\192.168.100.100,也就是你的 CentOS 主机地址,会弹出登陆窗口,输入刚刚设置的用户名密码就可以访问。注意这里输入的密码是samba设置的密码,不是登录 CentOS 系统的密码。因为在CentOS 7系统中,Samba服务程序使用的果然是独立的账户信息数据库。 所以,即便在 CentOS 系统中有一个samba账户,Samba服务程序使用的账户信息数据库中也有一个同名的samba账户, 大家也一定要弄清楚它们各自所对应的密码。
如果 Windows 下访问 Linux 下共享目录 , 提示没有权限或一直没有弹出登录窗口。
- 确保 CentOS 防火墙配置正确或者是开放共享目录权限
- 确保 Samba 服务器配置文件 smb.conf 设置没有问题
- 确保 SELinux配置正确