Samba

Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,有服务端和客户端程序构成。随着Linux的普及,如何共享Linux下的文件成为用户关心的问题。其实,几乎所有的Linux发行套件都提供了一个很好的工具Samba——通过它可以轻松实现文件共享。

一、SMB文件共享

通用lnternet文件系统(CIFS)也称为服务器信息块(SMB),是适用于MicrosoftWindows服务器和客户端的标准文件和打印机共享系统。
Samba服务可用于将Linux文件系统作为CIFS/SMB网络文件共享进行共享,并将Linux打印机作为CIFS/SMB打印机共享进行共享。

[root@shareserver ~]# ———————服务端     ip:172.25.254.227
[root@client ~]#       ——————客户端     ip:172.25.254.127
1、安装以及启动服务
在服务端:
[root@shareserver ~]# yum install samba samba-client samba-common -y
          #samba        —— 提供samba服务的主命令;
          #samba-client —— 提供测试服务
          #samba-common —— 提供管理命令;
[root@shareserver ~]# systemctl start smb       #启动smb服务
[root@shareserver ~]# systemctl enable smb.service   #开机启动smb服务
[root@shareserver ~]# systemctl stop firewalld       #关闭火墙
[root@shareserver ~]# systemctl disable firewalld    #关闭火墙并且开机不启动
[root@shareserver ~]# netstat -antlp | grep smb  # 查看samba的端口

samba共享缓存 samba共享怎么用_服务端

客户端进行测试:
[root@client ~]# yum install samba-client -y     #安装

匿名登陆
因为在服务端未设置,所以不用输入密码,直接回车,登陆成功

[root@client ~]# smbclient -L //172.25.254.227    #匿名登陆服务端,并查看信息,-L表示查看共享列表

samba共享缓存 samba共享怎么用_服务端_02

2、添加smb用户(在服务端)
smb用户必须是本地用户!!!

添加用户student、tom

[root@shareserver ~]# smbpasswd -a student    # 把本机用户student添加到sam服务器上
New SMB password:         # 设置samba用户的密码,此密码与本机用户的密码无关
Retype new SMB password:  # 确认samba用户的密码
Added user student.       # 成功
[root@shareserver ~]# smbpasswd -a tom
New SMB password:
Retype new SMB password:
Added user tom.
[root@shareserver ~]# pdbedit -L         # 查看smb中的所有用户
student:1000:Student User
tom:1001:

samba共享缓存 samba共享怎么用_服务端_03

smbpasswd 常用参数:
-a student: 添加用户student为samba用户
    -d student:禁用samba用户student
    -e student: 启用samba用户student
    -x student: 删除samba用户student

可以用 smbpasswd 添加 smb 用户
还可以用 pdbedit 添加 smb 用户

pdbedit 常用参数
    –a student:新建Samba用户。
    –x student:删除Samba用户。
    –L:列出Samba用户列表,读取passdb.tdb数据库文件。
    –Lv:列出Samba用户列表的详细信息。
    –c “[D]” –u student:暂停该Samba用户的账号。
    –c “[]” –u student:恢复该Samba用户的账号。
客户端测试:

[root@client ~]# smbclient -L //172.25.254.227 -U tom # 指定tom用户登陆,-U表示指定用户

samba共享缓存 samba共享怎么用_服务端_04


可能出现的错误:输入密码导致的错误:

samba共享缓存 samba共享怎么用_客户端_05

[root@client ~]# smbclient  //172.25.254.227/tom  -U tom  # 登陆共享服务端,查看共享用户的家目录信息时发现被拒绝

服务端samba_enable_home_dirs布尔值的影响:

samba共享缓存 samba共享怎么用_服务端_06

在服务端排错:
[root@shareserver ~]# getenforce
Enforcing       # selinux与samba服务冲突
[root@shareserver ~]# getsebool -a | grep samba

samba共享缓存 samba共享怎么用_samba共享缓存_07

[root@shareserver ~]# setsebool -P samba_enable_home_dirs on   # 分享home目录即可。

samba共享缓存 samba共享怎么用_客户端_08

在客户端测试:

成功:

samba共享缓存 samba共享怎么用_bc_09

[root@client ~]# mount -o username=tom,password=123 //172.25.254.227/tom  /mnt   # 把用户挂载到/mnt下,方便对共享用户进行管理
[root@client ~]# df

samba共享缓存 samba共享怎么用_bc_10

[root@client ~]# cd /mnt
[root@client mnt]# touch file{1..5}

在服务端tom用户家目录查看:

samba共享缓存 samba共享怎么用_客户端_11

二、samba的访问控制

1、域名的修改

客户端:

[root@client mnt]# smbclient -L //172.25.254.227/tom  -U  tom  # 查看到域名为MYGROUP

samba共享缓存 samba共享怎么用_客户端_12


服务端:

[root@shareserver ~]# vim /etc/samba/smb.conf   # 打开
   89         workgroup = TOM        #更改
[root@shareserver ~]# systemctl restart smb.service     #重启smb服务

samba共享缓存 samba共享怎么用_客户端_13


客户端:

[root@client mnt]# smbclient -L //172.25.254.227/tom  -U  tom  # 再次查看,域名修改成功

samba共享缓存 samba共享怎么用_客户端_14

2、黑白名单(Samba服务器默认对所有用户开放权限)

白名单:

[root@shareserver ~]# vim /etc/samba/smb.conf   # 设定白名单,即改即生效 
95         hosts allow = 172.25.254.227         # ip为172.25.254.227白名单

在主机client(IP=172.25.254.127)为上测试:
失败

samba共享缓存 samba共享怎么用_bc_15


在主机shareserver(IP=172.25.254.227)上访问:
成功

samba共享缓存 samba共享怎么用_samba共享缓存_16


黑名单:

服务端:

[root@shareserver ~]# vim /etc/samba/smb.conf  # 设定黑名单,即改即生效
96         hosts deny = 172.25.254.227         # ip为172.25.254.227黑名单 
                   (如果黑白名单同时存在该ip,则该ip为白名单里)

samba共享缓存 samba共享怎么用_客户端_17

在主机client(IP=172.25.254.127)为上测试:
成功

samba共享缓存 samba共享怎么用_服务端_18


在主机shareserver(IP=172.25.254.227)上访问:
失败

samba共享缓存 samba共享怎么用_samba共享缓存_19


恢复环境

[root@shareserver ~]# vim /etc/samba/smb.conf 
    删除或者注释的黑白名单
3、共享目录

(1)共享自己建立的目录
服务端:

[root@shareserver ~]# mkdir /smbfile
[root@shareserver ~]# touch /smbfile/hello{1..3}
[root@shareserver ~]# vim /etc/samba/smb.conf   # 共享自己建立的目录
321         [smb]          # 这是共享名,可以自己起名字
322         comment = hello  # 共享文件的说明,这个也是自己自定义的
323         path = /smbfile  # 共享文件的绝对路径

samba共享缓存 samba共享怎么用_客户端_20

[root@shareserver ~]# systemctl restart smb.service      #重启smb服务

客户端测试:
端测试

[root@client mnt]# smbclient -L  //172.25.254.227/smb  -U  tom  # 在共享信息里查看到共享目录,smb是自己设定的共享目录名称

samba共享缓存 samba共享怎么用_samba共享缓存_21

[root@client mnt]# smbclient  //172.25.254.227/file  -U  tom  # 在客户端登录查看文件内容时被禁止

samba共享缓存 samba共享怎么用_samba共享缓存_22


在服务端排查原因

[root@shareserver ~]# ls -Zd /smbfile/   # 发现共享目录的安全上下文不是samba共享
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /linuxfile/

samba共享缓存 samba共享怎么用_bc_23

[root@shareserver ~]# semanage fcontext -a -t samba_share_t '/smbfile(/.*)?'   # 修改共享目录的安全上下文	
[root@shareserver ~]# restorecon -RvvF  /smbfile/   # 刷新
[root@shareserver ~]# ls -Zd /smbfile/   # 查看修改成功
drwxr-xr-x. root root system_u:object_r:samba_share_t:s0 /smbfile/

samba共享缓存 samba共享怎么用_客户端_24


再次在客户端查看:

[root@client mnt]# smbclient //172.25.254.227/smb -U tom # 可以查看

samba共享缓存 samba共享怎么用_bc_25

(2)共享系统目录

服务端:

[root@shareserver ~]# vim /etc/samba/smb.conf
323         [mnt]           # 共享系统目录的名称,这个名称也是任意的
324         comment = shiyan smb
325         path = /mnt     # 共享系统目录的绝对路径
[root@shareserver ~]# systemctl restart smb.service	#重启服务

samba共享缓存 samba共享怎么用_服务端_26


客户端:

[root@client mnt]# smbclient -L //172.25.254.227/mnt -U tom

samba共享缓存 samba共享怎么用_客户端_27

[root@client mnt]# smbclient  //172.25.254.227/mnt  -U  tom  # 但是登录上之后,也不能查看内容,这是因为安全上下文不一致

samba共享缓存 samba共享怎么用_bc_28


在服务端:

由于这是系统文件,如果更改安全上下文,会影响其他用户的访问,所以我们让samba服务对读写功能权限不做限制

[root@shareserver ~]# getsebool -a  | grep samba

samba共享缓存 samba共享怎么用_bc_29

[root@shareserver ~]# setsebool -P samba_export_all_ro on # 打开只读访问权限
[root@shareserver ~]# setsebool -P samba_export_all_rw on # 打开读写访问权限
[root@shareserver ~]# getsebool -a  | grep samba

samba共享缓存 samba共享怎么用_服务端_30

查看权限并给该目录加r(是否可以查看目录中有什么子文件或者子目录)权限

chmod +r /mnt        ##给mnt添加r权限

在客户端:

[root@client ~]# smbclient  //172.25.254.227/mnt  -U  tom

samba共享缓存 samba共享怎么用_samba共享缓存_31

4、samba服务的权限管理

(1)所有用户都可写

服务端:

[root@shareserver ~]# vim /etc/samba/smb.conf 
324       writable = yes    # 所有用户都可写

samba共享缓存 samba共享怎么用_bc_32

[root@shareserver ~]# systemctl restart smb     #重启服务

给共享目录加可写权限

[root@shareserver ~]# chmod  o+w /smbfile/   # 修改权限

samba共享缓存 samba共享怎么用_服务端_33


客户端:

[root@client ~]# smbclient //172.25.254.227/smb -U tom

samba共享缓存 samba共享怎么用_服务端_34

(2)指定用户可写

服务端:

[root@shareserver ~]# pdbedit -L # 查看samba服务上的用户

student:1000:Student User

tom:1001:

[root@shareserver ~]# vim /etc/samba/smb.conf

325 write list = tom # 限定只有tom用户可以写

samba共享缓存 samba共享怎么用_samba共享缓存_35


samba共享缓存 samba共享怎么用_bc_36

[root@shareserver ~]# systemctl restart smb    #重启服务

客户端:

[root@client ~]# smbclient  //172.25.254.227/file  -U  linux  # 用linux用户登录,可以删除

samba共享缓存 samba共享怎么用_bc_37

[root@client ~]# smbclient  //172.25.254.227/file  -U  student    # 用其他用户登录不能删除

samba共享缓存 samba共享怎么用_samba共享缓存_38

(3)指定用户组可写

服务端:

[root@shareserver ~]# vim /etc/samba/smb.conf 
    325         write list = @tom

samba共享缓存 samba共享怎么用_客户端_39

[root@shareserver ~]# systemctl restart smb.service
[root@shareserver ~]# id student
uid=1000(student) gid=1000(student) groups=1000(student),10(wheel)
[root@shareserver ~]# usermod -G tom student   # 把student用户添加到tom组中
[root@shareserver ~]# id student
uid=1000(student) gid=1000(student) groups=1000(student),1001(tom)

samba共享缓存 samba共享怎么用_samba共享缓存_40


客户端测试:

[root@client ~]# smbclient  //172.25.254.227/smb  -U  student

samba共享缓存 samba共享怎么用_bc_41

(4)指定用户登录
[root@shareserver ~]# vim /etc/samba/smb.conf 
326         valid users = tom   # 指定只有tom用户可以登陆

samba共享缓存 samba共享怎么用_samba共享缓存_42

[root@shareserver ~]# systemctl restart smb.service

客户端测试:

[root@client mnt]# smbclient  //172.25.254.227/smb -U  student # 用student用户登录

samba共享缓存 samba共享怎么用_服务端_43

[root@client mnt]# smbclient  //172.25.254.227/smb  -U  tom   # 用其他用户登录

samba共享缓存 samba共享怎么用_客户端_44

(5)指定用户组登录

服务端:

[root@shareserver ~]# vim /etc/samba/smb.conf
325         valid users  = +student

samba共享缓存 samba共享怎么用_服务端_45

[root@shareserver ~]# systemctl restart smb     #重启
[root@shareserver ~]# id tom
uid=1001(tom) gid=1001(tom) groups=1001(tom)
[root@shareserver ~]# usermod -G student tom       # 把tom用户加入到student组中
[root@shareserver ~]# id tom
uid=1001(tom) gid=1001(tom) groups=1001(tom),1000(student)

samba共享缓存 samba共享怎么用_samba共享缓存_46


客户端测试:

[root@client ~]# smbclient //172.25.254.227/smb -U tom

samba共享缓存 samba共享怎么用_服务端_47

(6)隐藏共享目录

在客户端查看共享目录:
[root@client ~]# smbclient -L //172.25.254./smb -U tom # 默认共享目录时可以看见的

samba共享缓存 samba共享怎么用_samba共享缓存_48


在服务端:

[root@shareserver ~]# vim /etc/samba/smb.conf
327         browseable = no

samba共享缓存 samba共享怎么用_samba共享缓存_49

[root@shareserver ~]# systemctl restart smb.service

在客户端查看共享目录:

[root@client ~]# smbclient -L  //172.25.254.227/smb  -U  tom

与前面在客户端查看共享目录,该目录已被隐藏

samba共享缓存 samba共享怎么用_服务端_50

(7)匿名用户登录

客户端:

[root@client ~]# smbclient //172.25.254.227/smb # 在客户端查看,匿名用户默认不能登录

samba共享缓存 samba共享怎么用_bc_51


服务端:

[root@shareserver ~]# vim /etc/samba/smb.conf
176         map to guest = bad user    # 其他用户(也就是匿名用户)映射到guest
328         guest ok = yes   # 允许其他用户(也就是匿名用户)登陆

samba共享缓存 samba共享怎么用_samba共享缓存_52


samba共享缓存 samba共享怎么用_客户端_53

[root@shareserver ~]# systemctl restart smb.service

客户端测试:

[root@client ~]# smbclient   //172.25.254.227/sam     # 匿名用户成功登录
Enter root's password:    # 匿名用户没有密码,直接按回车即可

samba共享缓存 samba共享怎么用_客户端_54


在服务端查看:

[root@shareserver ~]# ll /smbfile/   # 查看到匿名用户上传的文件

samba共享缓存 samba共享怎么用_客户端_55

(8)指定root用户

服务端:

[root@shareserver ~]# vim /etc/samba/smb.conf  
    330         admin users = tom   # 指定tom用户为超级用户

samba共享缓存 samba共享怎么用_samba共享缓存_56

[root@shareserver ~]# systemctl restart smb.service

客户端测试:

[root@client ~]# smbclient  //172.25.254.227/smb  -U  tom

samba共享缓存 samba共享怎么用_服务端_57


在服务端查看:

[root@shareserver ~]# ll /smbfile/

samba共享缓存 samba共享怎么用_samba共享缓存_58


在服务端还原环境:

[root@shareserver ~]# vim /etc/samba/smb.conf

samba共享缓存 samba共享怎么用_服务端_59

[root@shareserver ~]# systemctl restart smb.service

writable=no/yes

所有用户对目录是否可写

write list = @tom 或者 +tom

对指定用户组tom可写

write list = tom

对tom用户可写

valid users = student

指定用户登陆

valid users = +student

指定用户组登陆

browseable=no/yes

隐藏目录是否共享

guest ok = yes

允许其他用户(也就是匿名用户)登陆

admin users =tom

指定tom用户超级用户