samba小计

samba能干什么?什么场合用到它?

samba 是基于SMB协议(ServerMessage Block,信息服务块)的开源软件,samba也可以是SMB协议的商标。SMB是一种Linux、UNIX系统上可用于共享文件和打印机等资源的协议,这种协议是基于Client\Server型的协议,Client端可以通过SMB访问到Server(服务器)上的共享资源。当Windows是 Client,CentOS是服务器时,通过Samba就可以实现window访问Linux的资源,实现两个系统间的数据交互。

Linux对于开发来说是一个非常好的系统,但是人机友好不如windows,我就通常在windows上用sourceinsight编辑代码,然后在Linux端编译运行,而且经常需要把音视频从Linux和windows端互相拷贝,这时候Samba就显得很方便了

Samba部署

  1. 安装debain

    1
    2
    3
    4
    #debain  
    apt install -y samba
    #centos
    yum install -y samba
  2. 创建共享资源账户并配置密码

    1
    2
    3
    4
    #在Samba服务器上新建一个专用访问Samba服务账户 (eg:smbuser)
    useradd -s /sbin/nologin smbuser
    #设置密码
    smbpasswd -a smbuser
  3. 创建共享资源文件目录

    1
    2
    3
    4
       # 创建共享资源目录
    mkdir /opt/share/
    # 将文件归属设置为samba服务器中存在的专用来访问共享资源的用户
    chown -R smbuser.smbuser share/
  4. 配置文件解析( vim /etc/samba/smb.conf)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
        [global]
    # 设定 Samba Server 所要加入的工作组或者域。
    workgroup = SAMBA

    # 设置用户访问Samba Server的验证方式
    security = user

    # passdb backend就是用户后台的意思。
    passdb backend = tdbsam

    #设置Samba共享打印机的类型
    printing = cups

    #设置共享打印机的配置文件。
    printcap name = cups

    # 设置是否在启动Samba时就共享打印机
    load printers = yes

    # 共享打印机的属性为原来的
    cups options = raw

    [homes]
    # comment是对该共享的描述,可以是任意字符串。
    comment = Home Directories

    # 允许访问该共享的用户
    valid users = %S, %D%w%S

    # 用来指定该共享是否可以浏览,yes为可以,no为不可以
    browseable = No
    # 设置是否只读
    read only = No
    #
    inherit acls = Yes

    [printers]
    # 提供共享打印的参数设置

    #共享描述
    comment = All Printers

    # 共享的目录
    path = /var/tmp
    printable = Yes
    create mask = 0600
    browseable = No

    [print$]
    # 共享打印机驱动参数的设置
    #共享描述
    comment = Printer Drivers
    path = /var/lib/samba/drivers
    write list = @printadmin root
    force group = @printadmin
    create mask = 0664
    directory mask = 0775

    [smbuser]
    # 自定义的共享设置

    #共享描述
    comment = smbuser guest share

    #共享目录-也就是前面创建的共享目录
    path = /opt/share

    #允许guest用户访问
    public = yes

    #允许smbuser 在共享目录下写入
    writable = yes

    #默认创建目录权限 rwxrwxr_x
    directory mask = 0775

    #默认创建文件权限 rwxrwxr_x
    create mask = 0775

    #允许访问该共享的用户
    valid users = smbuser,root

    #可写入共享的用户列表
    write list = smbuser,root

    #该指定共享目录可浏览
    browseable = yes

    #该指定共享资源可使用
    available = yes

    # 设置共享目录的管理员,具有完全权限-一般如非必要不要开启管理员权限
    admin users = smbuser

  5. 共享配置完整示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    # 自定义共享名
    [cherry]
    # 描述符,是给系统管理员看的
    comment = Home Directories
    # 共享的路径
    path = /home/cherry
    # 是否公开,也就是是否能在网上邻居看到该共享
    public = yes
    # 共享的目录是否让所有人可见
    browseable = yes
    # 是否可写
    writable = yes
    # 是否拒绝匿名访问,仅当安全级别为 share 时才生效
    guest ok = no
    # 工作组,要设置成跟 Windows 的工作组一致
    workgroup = WORKGROUP
    # 其他 Linux 主机查看共享时的提示符
    server string = Samba Server Version %v
    # 用于在 Windows 网上邻居上显示的主机名
    netbios name = MYSERVER
    # 指定允许访问samba服务器的主机
    hosts allow = 127. 192.168.12. 192.168.13. EXCEPT 192.168.13.13 # 定义安全级别
    security = share
    # 定义日志文件,每个访问的主机会产生独立的日志文件,%m 是客户端主机名
    log file = /var/log/samba/log.%m
    # 定义单个日志的最大容量(KB)
    max log size = 50
    # Samba 用户的存储方式,smbpasswd 表示明文存储,tdbsam 表示密文存储
    passdb backend = tdbsam
    #客户端在10分钟内没有打开任何 Samba 资源,服务器将自动关闭会话,在大量的并发访 问环境中,这样的设置可以提高服务器性能
    deadtime = 10
    # 设置显示的字符集
    display charset = UTF8
    # 设置最大连接数,0表示无限制,如果超过最大连接数则拒绝连接
    max connections = 0
    # 设置匿名账户为nobody
    guest account = nobody
    # 是否在启动 Samba 时就共享打印机
    load printers = yes
    # 设置打印机使用的方式
    cups options = raw
    # 指定哪些用户可以访问,如果不指定则所有用户都可访问
    valid users = user1 user2 user3
    # 指定哪些用户不可以访问
    invalid users = user1 user2
    # 客户端上传文件的默认权限
    create mask = 0775
    # 客户端创建目录的默认权限
    directory mask = 0775
    # 设置可对文件进行写操作的用户
    write list = user1 user2 user3
    # 设置共享目录的管理员,具有完全权限
    admin users = user1
  6. 重启samba服务

    1
    2
    sudo systemctl restart smbd  
    sudo systemctl restart nmbd
  7. 设置开机挂起磁盘3种方式

    1. 使用 /etc/fstab 文件

      1
      2
      3
      4
      5
      #打开 /etc/fstab 文件:
      sudo nano /etc/fstab
      #添加一行,其中包含以下信息:
      #(设备 挂载点 文件系统 类型 选项 转储 检验)
      /dev/sda1 /mnt/mydisk ext4 defaults 0 0
    2. 使用 systemd

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      #创建一个 systemd 单元文件,例如 /etc/systemd/system/mydisk.mount:
      [Unit]
      Description=Mount mydisk
      [Mount]
      What=/dev/sda1
      Where=/mnt/mydisk
      Type=ext4
      Options=defaults
      [Install]
      WantedBy=multi-user.target
      #启用并启动该单元:
      sudo systemctl enable mydisk.mount
      sudo systemctl start mydisk.moun
    3. 使用 cron 守护进程

      1
      2
      3
      4
      #只需在 /etc/crontab 文件中添加一行即可设置开机启动挂载
      crontab -e
      #重启后挂载硬盘
      @reboot mount /dev/sda /mnt/ssd/