samba概述
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。
在此之前我们已经了解了NFS,NFS与samba一样,也是在网络中实现文件共享的一种实现,但不幸的是,其不支持windows平台,而本章要提到的samba是能够在任何支持SMB协议的主机之间共享文件的一种实现,当然也包括windows。
SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。
SMB协议是C/S型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。
Samba监听端口有:
| TCP | UDP |
|---|---|
| 139 445 | 137 138 |
tcp端口相对应的服务是smbd服务,其作用是提供对服务器中文件、打印资源的共享访问。
udp端口相对应的服务是nmbd服务,其作用是提供基于NetBIOS主机名称的解析。
samba进程:
| 进程 | 对应 |
|---|---|
| nmbd | 对应netbios |
| smbd | 对应cifs协议 |
| winbindd + ldap | 对应Windows AD活动目录 |
samba用户:
| 帐号 | 密码 |
|---|---|
| 都是系统用户 /etc/passwd | Samba服务自有密码文件 通过smbpasswd -a USERNAME命令设置 |
//smbpasswd命令:
-a Sys_User //添加系统用户为samba用户并为其设置密码
-d //禁用用户帐号
-e //启用用户帐号
-x //删除用户帐号
[root@localhost ~]# yum -y install samba-*
[root@localhost ~]# useradd tom
[root@localhost ~]# smbpasswd -a tom
New SMB password:
Retype new SMB password:
Added user tom.
Samba安全级别:
Samba服务器的安全级别有三个,分别是user,server,domain
| 安全级别 | 作用 |
|---|---|
| user | 基于本地的验证 |
| server | 由另一台指定的服务器对用户身份进行认证 |
| domain | 由域控进行身份验证 |
以前的samba版本支持的安全级别有四个,分别是share,user,server,domain
share是用来设置匿名访问的,但现在的版本已经不支持share了,但是还是可以实现匿名访问的
只是配置方式变了
samba配置文件:
/etc/samba/smb.conf(主配置文件)
| samba三大组成 | 作用 |
|---|---|
| [global] | 全局配置,此处的设置项对整个samba服务器都有效 |
| [homes] | 宿主目录共享设置,此处用来设置Linux用户的默认共享,对应用户的宿主目录。 当用户访问服务器中与自己用户名同名的共享目录时,通过验证后将会自动映射到该用户的宿主目录中 |
| [printers] | 打印机共享设置 |
常用配置文件参数:
| 参数 | 作用 |
|---|---|
| workgroup | 表示设置工作组名称 |
| server string | 表示描述samba服务器 |
| security | 表示设置安全级别,其值可为share、user、server、domain |
| passdb backend | 表示设置共享帐户文件的类型,其值可为tdbsam(tdb数据库文件)、ldapsam(LDAP目录认证)、 smbpasswd(兼容旧版本samba密码文件) |
| comment | 表示设置对应共享目录的注释,说明信息,即文件共享名 |
| browseable | 表示设置共享是否可见 |
| writable | 表示设置目录是否可写 |
| path | 表示共享目录的路径 |
| guest ok | 表示设置是否所有人均可访问共享目录 |
| public | 表示设置是否允许匿名用户访问 |
| write list | 表示设置允许写的用户和组,组要用@表示,例如 write list = root,@root |
| valid users | 设置可以访问的用户和组,例如 valid users = root,@root |
| hosts deny | 设置拒绝哪台主机访问,例如 hosts deny = 192.168.72.1 |
| hosts allow | 设置允许哪台主机访问,例如 hosts allow = 192.168.72.2 |
| printable | 表示设置是否为打印机 |
//测试配置文件是否有语法错误,以及显示最终生效的配置:使用testparm命令
[root@localhost ~]# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[homes]"
Processing section "[printers]"
Processing section "[print$]"
Loaded services file OK.
Server role: ROLE_STANDALONE
[root@node01-linux ~]# systemctl status smb 查看服务状态
[root@node01-linux ~]# systemctl status nmb
samba访问
环境说明:
| 服务端 | 客户端 |
|---|---|
| node01 192.168.67.131 | node02 192.168.67.132 |
[root@node01-linux ~]# yum -y install samba* #安装所有的包
[root@node01-linux ~]# systemctl stop firewalld
[root@node02-linux ~]# yum -y install samba-client #安装客户端包
[root@node01-linux ~]# useradd -r -M -s /sbin/nologin tom #创建一个系统用户
[root@node01-linux ~]# smbpasswd -a tom #添加tom系统用户为samba用户并为其设置密码
[root@node01-linux samba]# useradd zhangshan
[root@node01-linux samba]# smbpasswd -a zhangshan
[root@node01-linux ~]# systemctl enable --now smb nmb #启动smb,nmb服务
[root@node01-linux samba]# vim 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 #表示设置工作组名称
security = user #表示设置安全级别,其值可为share、user、server、domain
passdb backend = tdbsam #表示设置共享帐户文件的类型,其值可为tdbsam(tdb数据库文件)、ldapsam(LDAP目录认证)、smbpasswd(兼容旧版本samba密码文件)
printing = cups #打印
printcap name = cups #打印名称
load printers = yes #加载打印机
cups options = raw #选项
[runtime]
comment = runtime #表示设置对应共享目录的注释,说明信息,即文件共享名
browseable = yes #表示设置共享是否可见
writable = no #表示设置目录是否可写
valid users = jerry,zhangshan #设置可以访问的用户和组,例如 valid users = root,@root
write list = zhangshan #表示设置允许写的用户和组,组要用@表示,例如 write list = root,@root
path = /opt #表示共享目录的路径
hosts deny = 192.168.67.133 #设置拒绝哪台主机访问,例如 hosts deny = 192.168.72.1
hosts allow = 192.168.67.132 #设置允许哪台主机访问,例如 hosts allow = 192.168.72.2
[root@node01-linux samba]# systemctl restart smb nmb #重启smb nmb服务
[root@node01-linux samba]# echo 'hello world' > /opt/abc
[root@node01-linux samba]# ls /opt/
abc
[root@node01-linux samba]# setfacl -m u:zhangshan:rwx /opt/ #设置zhangshan用户对opt目录有rwx权限
`//查看samba服务器有哪些共享资源`
[root@node02-linux ~]# smbclient -L 192.168.67.131 -U zhangshan
Enter SAMBA\zhangshan's password:
Sharename Type Comment
--------- ---- -------
runtime Disk runtime
IPC$ IPC IPC Service (Samba 4.10.4)
Reconnecting with SMB1 for workgroup listing.
Server Comment
--------- -------
Workgroup Master
--------- -------
SAMBA NODE01-LINUX
WORKGROUP LAPTOP-6AKE6Q6L
`//交互式访问某共享资源`
[root@node02-linux ~]# smbclient //192.168.67.131/runtime -U tom
Enter SAMBA\tom's password:
tree connect failed: NT_STATUS_ACCESS_DENIED
[root@node02-linux ~]# smbclient //192.168.67.131/runtime -U zhangshan
Enter SAMBA\zhangshan's password:
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Fri May 15 11:44:20 2020
.. D 0 Tue May 12 11:46:52 2020
abc N 12 Fri May 15 11:44:20 2020
8374272 blocks of size 1024. 7131200 blocks available
smb: \> exit
[root@node02-linux ~]#
`//基于挂载的方式访问`
[root@node02-linux ~]# mkdir /opt/smb
[root@node02-linux ~]# mount -t cifs //192.168.67.131/runtime /opt/smb -o username=zhangshan,password=123456
[root@node02-linux ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 8.0G 1.2G 6.9G 15% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.6M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 1014M 130M 885M 13% /boot
tmpfs 98M 0 98M 0% /run/user/0
//192.168.67.131/runtime 8.0G 1.2G 6.9G 15% /opt/smb
[root@node02-linux ~]# cd /opt/smb/
[root@node02-linux smb]# ls
abc
[root@node02-linux smb]# rm -f abc
[root@node02-linux smb]# touch 111
[root@node02-linux smb]# ll
total 0
-rw-r--r--. 1 1001 1001 0 May 15 16:10 111
[root@node01-linux opt]# ll
total 0
-rw-r--r-- 1 zhangshan zhangshan 0 May 15 16:10 111
`永久挂载`
[root@node02-linux ~]# umount /opt/smb/
[root@node02-linux ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 8.0G 1.2G 6.9G 15% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.6M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 1014M 130M 885M 13% /boot
tmpfs 98M 0 98M 0% /run/user/0
[root@node02-linux ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue May 12 11:40:49 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=b81f2ae0-a658-4c1f-bd24-90d9c7f28bcc /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
//192.168.67.131/runtime /opt/smb cifs defaults,username=zhangshan,password=123456 0 0
[root@node02-linux ~]# mount -a
[root@node02-linux ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 8.0G 1.2G 6.9G 15% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.6M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 1014M 130M 885M 13% /boot
tmpfs 98M 0 98M 0% /run/user/0
//192.168.67.131/runtime 8.0G 1.2G 6.9G 15% /opt/smb
实例
配置用户认证共享
`//使用yum命令安装samba服务器`
[root@localhost ~]# yum -y install samba-*
`//映射共享目录`
`//创建用户zhang`
[root@node01-linux ~]# useradd -M zhang
`//为zhang用户创建smb共享密码`
[root@node01-linux ~]# smbpasswd -a zhang
New SMB password:
Retype new SMB password:
Added user zhang.
`//假设这里映射zhang用户为share用户,那么就要在/etc/samba/smbusers文件中添加如下内容`
[root@node01-linux ~]# echo 'zhang = share' > /etc/samba/smbusers
[root@node01-linux samba]# ls
lmhosts smb.conf smb.conf.example smbusers
[root@node01-linux samba]# mv smbusers .smbusers #隐藏映射映射文件
[root@node01-linux samba]# ls
lmhosts smb.conf smb.conf.example
`//在全局配置中添加如下内容`
[root@node01-linux samba]# vim smb.conf
[global]
workgroup = SAMBA
security = user
username map = /etc/samba/.smbusers #添加此行内容
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
[runtime]
comment = runtime
browseable = yes
writable = no
valid users = jerry,zhangshan
write list = zhangshan
path = /opt
`//创建一个共享目录zhang`
[root@node01-linux samba]# mkdir /opt/runtime
[root@node01-linux samba]# chown -R zhang.zhang /opt/runtime/
[root@node01-linux samba]# ll /opt/
total 0
-rw-r--r-- 1 zhangshan zhangshan 0 May 15 16:10 111
-rw-r--r-- 1 root root 0 May 15 16:07 abc
drwxr-xr-x 2 zhang zhang 6 May 15 16:44 runtime
`//配置共享`
[root@node01-linux samba]# vim 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
security = user
username map = /etc/samba/.smbusers
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
[runtime]
comment = runtime
browseable = yes
writable = no
valid users = zhang
write list = zhang
path = /opt/runtime
`//重启smb nmb服务`
[root@node01-linux samba]# systemctl restart smb nmb
`//启动smb服务`
[root@node01-linux samba]# systemctl start smb
`//重启smb服务`
[root@node01-linux samba]# systemctl restart smb
`//重新加载smb服务`
[root@node01-linux samba]# systemctl reload smb
`//设置smb服务随系统启动而启动`
[root@node01-linux samba]# systemctl enable smb
`//客户端查看samba服务器有哪些共享资源`
[root@node02-linux ~]# smbclient -L 192.168.67.131 -U share
Enter SAMBA\share's password:
Sharename Type Comment
--------- ---- -------
runtime Disk runtime
IPC$ IPC IPC Service (Samba 4.10.4)
Reconnecting with SMB1 for workgroup listing.
Server Comment
--------- -------
Workgroup Master
--------- -------
SAMBA NODE01-LINUX
[root@node02-linux ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue May 12 11:40:49 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=b81f2ae0-a658-4c1f-bd24-90d9c7f28bcc /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
//192.168.67.131/runtime /media cifs defaults,username=share,password=123456 0 0
[root@node02-linux ~]# mount -a
[root@node02-linux ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 8.0G 1.2G 6.9G 15% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.6M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 1014M 130M 885M 13% /boot
tmpfs 98M 0 98M 0% /run/user/0
//192.168.67.131/runtime 8.0G 1.2G 6.9G 15% /media
`//验证`
[root@node02-linux ~]# cd /media/
[root@node02-linux media]# ls
[root@node02-linux media]# touch runtime
[root@node02-linux media]# ll
total 0
-rw-r--r--. 1 1002 1002 0 May 15 17:16 runtime
[root@node01-linux ~]# cd /opt/runtime/
[root@node01-linux runtime]# ls
runtime
[root@node01-linux ~]# id zhang
uid=1002(zhang) gid=1002(zhang) groups=1002(zhang)
配置匿名共享
`//使用yum命令安装samba服务器`
[root@localhost ~]# yum -y install samba-*
`//在全局配置中添加如下内容`
[root@node01-linux samba]# vim smb.conf
[global]
workgroup = SAMBA
security = user
map to guest = Bad User
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
[runtime]
comment = runtime
browseable = yes
path = /opt/anon
public = yes
guest = yes
writable = yes
[root@node01-linux samba]# mkdir /opt/anon #创建匿名共享目录/opt/anon
[root@node01-linux samba]# chmod 777 /opt/anon/ #权限777 所有人都能写
[root@node01-linux samba]# systemctl restart smb nmb
[root@node02-linux ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 8.0G 1.2G 6.9G 15% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.6M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 1014M 130M 885M 13% /boot
tmpfs 98M 0 98M 0% /run/user/0
//192.168.67.131/runtime 8.0G 1.2G 6.8G 15% /opt/smb
//192.168.67.131/runtime 8.0G 1.2G 6.8G 15% /media
[root@node02-linux ~]# umount /media #先卸载
[root@node02-linux ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue May 12 11:40:49 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=b81f2ae0-a658-4c1f-bd24-90d9c7f28bcc /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
//192.168.67.131/runtime /media cifs defaults,username=BadUser 0 0
[root@node02-linux ~]# mount -a
Password for BadUser@//192.168.67.131/runtime:
[root@node02-linux ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 8.0G 1.2G 6.9G 15% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.6M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 1014M 130M 885M 13% /boot
tmpfs 98M 0 98M 0% /run/user/0
//192.168.67.131/runtime 8.0G 1.2G 6.8G 15% /opt/smb
//192.168.67.131/runtime 8.0G 1.2G 6.8G 15% /media
`//验证`
[root@node02-linux ~]# cd
[root@node02-linux ~]# cd /media/
[root@node02-linux media]# ls
[root@node02-linux media]# touch abc
[root@node02-linux media]# ll
total 0
-rw-r--r--. 1 nobody nobody 0 May 15 17:40 abc
[root@node01-linux ~]# cd /opt/anon/
[root@node01-linux anon]# ll
total 0
-rw-r--r-- 1 nobody nobody 0 May 15 17:40 abc
[root@node01-linux anon]# id nobody #匿名用户
uid=99(nobody) gid=99(nobody) groups=99(nobody)
Samba是一个在Linux和UNIX系统上实现SMB协议的免费软件,允许不同平台间的文件和打印机共享,尤其支持Windows。SMB协议用于局域网内的资源共享,Samba服务包括smbd(TCP,文件共享)和nmbd(UDP,NetBIOS名称解析)。Samba有user、server和domain三种安全级别,配置文件主要位于/etc/samba/smb.conf。

4903

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



