samba

一、概念

1.SMB

SMB 是一个协议 (Server Messages Block) Samba是一个它的使用软件,默认是一种在局域网上共享文件系统和打印机的一种通信协议,它为局域网内的不同操作系统的计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba能够在广域网上使用。

说明:

  (1)FTP不仅能在局域网工作,还能在广域网上工作。  而SMB默认情况下,只能工作在局域网~

  (2)FTP只能共享文件,不能共享打印机。          而SMB不仅能共享文件,还可以共享打印设备~

  (3)早期打印机无法直接工作在Linux或Windows上,必须要通过线缆物理直连到打印机,你的电脑才能使用打印机。不能通过局域网直接访问使用打印机!

    补充:现在打印机当作一个主机,给他连上网线配上IP;自己的电脑只要装上驱动,就能使用打印机了~

 

2.FTP和SMB

  FTP

    优点:文件传输、应用层协议、可跨平台

    缺点:只能实现文件传输、无法实现文件系统挂载、无法直接修改服务器端文件

  SMB

    优点:使用SMB/CIFS协议、同样可跨平台、可以实现文件系统挂载可以直接修改服务器端文件

    缺点:文件传输没有FTP快,且主要用在局域网内的文件共享

  Example:将A主机的存储空间映射到B主机上

    (1)使用B主机的人把电影存在"本地"上班偷偷看,殊不知电影其实是存在A主机上,使用A的老板已经发现你在划水了~~

    (2)使用B主机的人不需要主动用FTP来上传文件了,保存到B主机"本地"其实是保存到A主机上,对于不懂技术的人很省事

    (3)不需要把文件拿出来,修改完,再上传覆盖,因为修改B主机"本地"其实就可以相当于修改A主机了~

3.CIFS和SMB

  CIFS :Common Internet File System

  SMB: Server Messages Block

  先有SMB协议,经过Microsoft对技术文档的归纳总结,才有CIFS协议,CIFS协议可以使程序访问远程Internet计算机上的文件并要求此计算机提供服务。客户程序请求远在服务器上的服务器程序为他提供服务,服务器获得请求并返回相应。总而言之,CIFS协议是公开的或开放的SMB协议版本,并有Microsoft使用;SMB协议是局域网上用于服务器文件访问和打印的协议。然而,FTP普及率吊打它俩~.~!

4.NFS

在Unix Like 上面可以分享档案数据的 file system 是 NFS,那么在 Windows 上面使用的『网络邻居』所使用的档案系统则称为Common Internet File System, CIFS 

   

二、Samba基本实验

1.Samba软件相关信息

  1.1.  协议:

      SMB/CIFS

  1.2.  服务:

      smb是服务名    实现资源共享、权限验证      

       TCP:139端口、445端口(TCP端口对应的服务是smbd服务,其作用是提供服务器中文件、打印资源的共享访问)

  1.3.  配置文件目录:

      /etc/samba/  

     主配置文件:

      /etc/samba/smb.conf  

   别名配置文件:

      /etc/smaba/smbusers  

  1.4.  如何在在Windows查看、打开或关闭SMB/CIFS协议?

  1.5.  公司内网可以发现主机,并共享文件

2.登录验证模式(又叫做安全级别)

1  share  匿名验证    和ftp不同的是,samba不仅不需要密码,还不需要账号

2  user   本地用户验证  默认的登录验证模式(安全级别)

3  alias  别名用户验证  虚拟用户,减少对Linux用户管理的负担

扩展:tdbsam是一种本地用户验证,它使用一个数据库文件来验证账户和密码,数据库文件叫passdb.tdb。可以通过pdbedit -a向数据库中添加新用户,不过要建立的samba新用户必须先是本地用户(即赋予本地用户以samba权限)

   (1)pdbedit -a username  赋予linux本地用户以samba权限,同时设置独立的samba密码(该密码存于/etc/samba/passdb.tdb)

   (2)pdbedit -X username    删除samaba账户。这个账户就变成了1个普通的Linux账户了

   (3)pdbedit -L        列出samba用户列表,读取passdb.tdb数据库文件

对比:FTP  密码来自/etc/shadow         账号来自/etc/passwd  linux账户+linux密码

     SMB  密码来自/etc/samba/passdb.tdb  账号来自/etc/passwd  linux账户+samba密码

3.Windows登陆Linux smb服务器

[root@localhost network-scripts]# yum -y install samba
[root@localhost network-scripts]# systemctl start smb
[root@localhost network-scripts]# systemctl status smb
● smb.service - Samba SMB Daemon
Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; vendor preset: disabled)
Active: active (running) since Sun 2020-05-03 12:12:05 CST; 6s ago

[root@localhost network-scripts]# useradd -s /sbin/nologin zhangsan
[root@localhost network-scripts]# passwd zhangsan
Changing password for user zhangsan.
New password: 123456
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:123456

[root@localhost network-scripts]# pdbedit -a zhangsan
new password:111
retype new password:111
Unix username: zhangsan
NT username: 
Account Flags: [U ]
User SID: S-1-5-21-4156730158-4116294462-2038935887-1000
Primary Group SID: S-1-5-21-4156730158-4116294462-2038935887-513
Full Name: 
Home Directory: \localhostzhangsan
HomeDir Drive: 
Logon Script: 
Profile Path: \localhostzhangsanprofile
Domain: LOCALHOST
Account desc: 
Workstations: 
Munged dial: 
Logon time: 0
Logoff time: Wed, 06 Feb 2036 23:06:39 CST
Kickoff time: Wed, 06 Feb 2036 23:06:39 CST
Password last set: Sun, 03 May 2020 12:14:13 CST
Password can change: Sun, 03 May 2020 12:14:13 CST
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Windows端要开启smb服务,才能连接到smb服务器

4.Windows挂载Linux smb服务器

可以新建、修改、删除文件!

三、Samba配置

1.常见配置参数

[global]  用于定义Samaba服务器的总体特性,配置对全局范围生效
    
server string = smb server version %v #对samba服务器的描述,%v代表版本号
workgroup = DEBIAN_FANS  #samba服务器属于哪个工作组名或域名
hosts allow = 192.168.0. #指定那些主机可以访问
hosts deny =  192.168.8. #指定那些主机不可以访问
bind interface only = yes                    # 如果设置成是,samba只对这几个网络接口服务
interfaces = 192.168.0.100/255.255.255.0     #设置samba将对哪些网络接口进行服务。
username map = /etc/samba/smbusers #用户别名文件。
socket address = 192.168.0.10                #强制samba只在该端口监听
include = /etc/samba/smb.conf.another        #包括另外的samba配置文件
show add printer wizard= yes   # 当用户添加打印机时,显示安装向导.
load printers = yes
log file = /var/log/samba/%m.log             #日志文件,%m表示主机名
max log size = 50                            #日志文件的大小,单位kb,0表示不限制单个日志文件的大小
log level = 3                                #日志级别 0 表示没有,3 一般比较合理
security = user                  #安全级别,默认为本地user,还有匿名share、别名alias
passdb backend = tdbsam             #使用 linux账户+samba密码 的验证模式
load printers = yes/no              #是否允许samba加载打印机和共享
[homes]  用于定义用户宿主目录的共享属性

[homes]                      #共享名(不能被修改,泛指用户对应的家目录)
comment = Home  Dir          #共享描述
browseable = no              #共享是否可看(可以看到其他用户的家目录,browseable与public 效果等同)
writable = yes               #共享是否可写(配置文件+文件系统 共同决定是否可写)
valid users = %S,name,@group #可登陆用户(允许访问该共享的用户,逗号隔开)
read only = no
create mode = 0777
directory mode = 0775
        
[printers]  设置打印机的共享属性
path = /var/spool/samba   #共享设备路径
guest ok = yes         #是否允许匿名访问
browseable = yes        
printable = yes         #是否可以打印
read only = yes        #只可读
[自定义]

[自定义]         #共享名(不是共享出来的目录名)
comment = 
path =      #共享路径(路径要自己检查一下是否存在)
public= yes
browseable = yes
writeable = yes
   
[配置文件检查工具]
testparm  检查配置文件的语法是否正确:Loaded services file OK.
-v        显示samba支持的所有选项
[root@localhost user1]# testparm -v Load smb config files from /etc/samba/smb.conf Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions  按回车键,可以看具体的配置信息

2.访问控制

 3.启动管理

[root@localhost user1]# systemctl enable smb
[root@localhost user1]# systemctl start smb
[root@localhost user1]# systemctl status smb

4.客户端登陆

4.1 Linux端:

[root@localhost user1]# yum -y install samba-client        #安装samba客户端

smbclient -U 用户名 -L //服务器地址

[root@localhost user1]# smbclient -U zhangsan -L //10.0.0.50  #查看服务器共享
Enter SAMBAzhangsan's password: 

    Sharename       Type      Comment
    ---------       ----      -------
    print$          Disk      Printer Drivers
    IPC$            IPC       IPC Service (Samba 4.10.4)
    zhangsan        Disk      Home Directories  
Reconnecting with SMB1 for workgroup listing.

    Server               Comment
    ---------            -------

    Workgroup            Master

smbclient -U 用户名  //服务器地址/共享名

[root@localhost user1]# smbclient -U zhangsan //10.0.0.50/zhangsan    #登陆服务器共享
Enter SAMBAzhangsan's password: 
Try "help" to get a list of possible commands.
smb: > 

4.2 Windows端:

Win+R ——> \服务器地址用户名

Win+R ——> cmd ——> net use * /del ——>清空缓存

四、Samba部署实验

 1.本地验证(登陆、上传/下载、删除、覆盖)

[root@localhost zhangsan]# vim /etc/samba/smb.conf
        comment = share dir
        path = /atguigu
public = Yes
        writable = Yes
        browseable = Yes
[root@localhost zhangsan]# mkdir /atguigu
[root@localhost zhangsan]# systemctl restart smb
[root@localhost user1]# smbclient -U zhangsan -L  //10.0.0.50
Enter SAMBAzhangsan's password: 

    Sharename       Type      Comment
    ---------       ----      -------
    atguigu         Disk      share dir
    print$          Disk      Printer Drivers
    IPC$            IPC       IPC Service (Samba 4.10.4)
    zhangsan        Disk      Home Directories
Reconnecting with SMB1 for workgroup listing.

    Server               Comment
    ---------            -------

    Workgroup            Master
    ---------            -------

服务端:

[root@localhost ~]# ls -ld /atguigu        #配置文件和文件系统共同决定写权限!
drwxr-xr-x 2 root root 6 May  6 23:29 /atguigu
[root@localhost ~]# chmod o+w /atguigu      #可以上传、删除自己和别人的文件、覆盖自己的文件(不能覆盖别人的文件)
[root@localhost ~]# ls -ld /atguigu/
drwxr-xrwx 2 root root 6 May  6 23:29 /atguigu/

客户端:

[root@localhost user1]# smbclient -U zhangsan //10.0.0.50/atguigu
Enter SAMBAzhangsan's password: 
Current directory is \10.0.0.50atguigu
smb: > ls  
  .                                   D        0  Wed May  6 23:44:16 2020
  ..                                  D        0  Wed May  6 23:29:38 2020
  guiguserver                         N       16  Wed May  6 23:44:16 2020

        27245572 blocks of size 1024. 23557296 blocks available
smb: > get guiguserver 
getting file guiguserver of size 16 as guiguserver (0.1 KiloBytes/sec) (average 0.1 KiloBytes/sec)

smb: > !pwd
/home/user1
smb: > !ls
client    Desktop  Documents  Downloads  guiguserver  io    Music  Pictures  Public  Templates  Videos
smb: > put client 
putting file client as client (0.2 kb/s) (average 0.2 kb/s)

2.访问控制

2.1用户登录限制

服务端:

[root@localhost atguigu]# vim /etc/samba/smb.conf
[atguigu]
        comment = share dir
        path = /atguigu
        public = Yes
        writable = Yes
        browseable = Yes
        valid users = zhangsan
[root@localhost atguigu]# systemctl restart smb

客户端:

[root@localhost user1]# smbclient -U lisi //10.0.0.50/atguigu
Enter SAMBAlisi's password: 
tree connect failed: NT_STATUS_ACCESS_DENIED
[root@localhost user1]# smbclient -U zhangsan //10.0.0.50/atguigu
Enter SAMBAzhangsan's password: 
Try "help" to get a list of possible commands.
smb: > 

2.2用户写权限限制

服务端:

[root@localhost atguigu]# vim /etc/samba/smb.conf
[atguigu]
        comment = share dir
        path = /atguigu
        public = Yes
        writable = Yes
        browseable = Yes
;       valid users = zhangsan
        read only = yes
        write list = zhangsan            #只允许zhangsan有写权限
[root@localhost atguigu]# systemctl restart smb

客户端:

[root@localhost user1]# smbclient -U lisi //10.0.0.50/atguigu
Enter SAMBAlisi's password: 
Try "help" to get a list of possible commands.
smb: > ls
  .                                   D        0  Wed May  6 23:52:54 2020
  ..                                  D        0  Wed May  6 23:29:38 2020
  guiguserver                         N       16  Wed May  6 23:44:16 2020
  lisiclient                          A       11  Wed May  6 23:52:37 2020
  client                              A       29  Wed May  6 23:54:52 2020

        27245572 blocks of size 1024. 23557024 blocks available
smb: > rm client 
NT_STATUS_ACCESS_DENIED deleting remote file client

[root@localhost user1]# smbclient -U zhangsan //10.0.0.50/atguigu
Enter SAMBAzhangsan's password: 
Try "help" to get a list of possible commands.
smb: > rm client 
smb: > ls
  .                                   D        0  Thu May  7 00:36:21 2020
  ..                                  D        0  Wed May  6 23:29:38 2020
  guiguserver                         N       16  Wed May  6 23:44:16 2020
  lisiclient                          A       11  Wed May  6 23:52:37 2020

        27245572 blocks of size 1024. 23557028 blocks available

2.3文件上传默认权限

服务端:

[root@localhost atguigu]# vim /etc/samba/smb.conf
[atguigu]
        comment = share dir
        path = /atguigu
        public = Yes
        writable = Yes
        browseable = Yes
;       valid users = zhangsan
        read only = yes
        write list = zhangsan            #只允许zhangsan有写权限
        creat mask = 0644
[root@localhost atguigu]# systemctl restart smb

客户端:

[root@localhost user1]# smbclient -U zhangsan //10.0.0.50/atguigu
Enter SAMBAzhangsan's password: 
Try "help" to get a list of possible commands.
smb: > put client 
putting file client as client (1.1 kb/s) (average 1.1 kb/s)
smb: > put io
putting file io as io (4.2 kb/s) (average 1.8 kb/s)

服务端:

[root@localhost atguigu]# ll
total 8
-rw-r--r-- 1 zhangsan zhangsan 29 May  7 00:42 client
-rw-r--r-- 1 zhangsan zhangsan 34 May  7 00:43 io

3.用户别名(虚拟用户)

服务端:

[root@localhost atguigu]# vim /etc/samba/smb.conf
[global]
        workgroup = SAMBA
        security = user

        passdb backend = tdbsam

        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw

        username map = /etc/samba/smbusers
[root@localhost samba]# vim smbusers
zhangsan = zs
[root@localhost atguigu]# systemctl restart smb

客户端:

[root@localhost user1]# smbclient -U zs //10.0.0.50/atguigu
Enter SAMBAzs's password: 
Try "help" to get a list of possible commands.
smb: > 

4.映射网络驱动器

4.1Linux客户端:

  1.临时挂载

  mount   -t   文件类型   -o   username=xxx,password=xxx   //服务端地址/共享名   客户端挂载点

[root@localhost user1]# mkdir /mnt/sharedir                  #先创建、检查挂载点
[root@localhost user1]# mount -t cifs -o username=zhangsan,password=123 //10.0.0.50/atguigu /mnt/sharedir/
[root@localhost user1]# df -h
Filesystem             Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root   26G  3.6G   23G  14% /
devtmpfs               1.4G     0  1.4G   0% /dev
tmpfs                  1.4G     0  1.4G   0% /dev/shm
tmpfs                  1.4G   11M  1.4G   1% /run
tmpfs                  1.4G     0  1.4G   0% /sys/fs/cgroup
/dev/sda1             1014M  170M  845M  17% /boot
tmpfs                  283M  4.0K  283M   1% /run/user/42
tmpfs                  283M   32K  283M   1% /run/user/1000
/dev/sr0               4.4G  4.4G     0 100% /run/media/user1/RHEL-7.5 Server.x86_64
//10.0.0.50/atguigu     26G  3.6G   23G  14% /mnt/sharedir

  2.永久挂载:/etc/fstab

[root@localhost user1]# mkdir /mnt/sharedir                  #先创建、检查挂载点
[root@localhost user1]# vim /etc/fstab 
/dev/mapper/rhel-root   /                       xfs     defaults        0 0
UUID=4582ad72-805b-4be8-9ffc-5135a287918e /boot                   xfs     defaults        0 0
/dev/mapper/rhel-swap   swap                    swap    defaults        0 0
//10.0.0.50/atguigu     /mnt/sharedir           cifs    defaults,username=zhangsan,password=123 0 0
[root@localhost user1]# mount -a
[root@localhost user1]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/rhel-root 26G 3.6G 23G 14% / devtmpfs 1.4G 0 1.4G 0% /dev tmpfs 1.4G 0 1.4G 0% /dev/shm tmpfs 1.4G 11M 1.4G 1% /run tmpfs 1.4G 0 1.4G 0% /sys/fs/cgroup /dev/sda1 1014M 170M 845M 17% /boot tmpfs 283M 4.0K 283M 1% /run/user/42 tmpfs 283M 32K 283M 1% /run/user/1000 /dev/sr0 4.4G 4.4G 0 100% /run/media/user1/RHEL-7.5 Server.x86_64 //10.0.0.50/atguigu 26G 3.6G 23G 14% /mnt/sharedir
[root@localhost mnt]# cd /mnt/sharedir/ [root@localhost sharedir]# vim client.txt    #在客户端创建文件,等会儿到服务端检查有没有。
this is a client's file

服务端:可以实时检查到创建的文件

[root@localhost atguigu]# cd /atguigu/    #这是atguigu共享名的共享路径
[root@localhost atguigu]# cat client.txt 
this is a client's file
[root@localhost atguigu]# rm client.txt rm: remove regular file ‘client.txt’? y

4.2Windows客户端:

 注意使用反斜杠\

ctrl + w     往回删除一个单词,光标放在最末尾

ctrl + u      删除光标以前的字符 

ctrl + k      删除光标以后的字符 

ctrl + a      移动光标至的字符头

ctrl + e      移动光标至的字符尾

ctrl + l       清屏

1.

  interfaces = 192.168.0.100/255.255.255.0     #设置samba将对哪些网络接口进行服务。

原文地址:https://www.cnblogs.com/ytdyz/p/12726422.html