linux SAMBA文件服务器 用途 SAMBA包部署方法 不需要密码的SAMBA共享的部署 需要密码的SAMBA共享的部署 客户端使用SAMBA的方法

提供linux和Windows系统的互相文件分享。

SAMBA包部署方法

yum -y install samba samba-client  samba-common
# SMABA服务器的状态观察,主要的目的是查阅目前 SAMBA 有多少人来联机, 且哪些资源共享已经被使用等等的信息。
[root@www ~]# smbstatus [-pS] [-u username]
选项与参数:
-p :列出已经使用 SAMBA 联机的程序 PID ;
-S :列出已经被使用的资源共享状态;
-u :只列出某个用户相关的分享数据
  • samba: 这个软件主要提供了 SMB 服务器所需的各项服务程序 (smbd 及 nmbd)、 的文件档、以及其他与 SAMBA 相关的 logrotate 配置文件及开机默认选项档案等;
  • samba-client: 这个软件则提供了当 Linux 做为 SAMBA Client 端时,所需要的工具指令,例如挂载 SAMBA 文件格式的 mount.cifs、 取得类似网上邻居相关树形图的 smbtree 等等;
  • samba-common: 这个软件提供的则是服务器与客户端都会使用到的数据,包括 SAMBA 的主要配置文件 (smb.conf)、语法检验指令 (testparm) 等等;

不需要密码的SAMBA共享的部署

[root@www ~]# cat /etc/sysconfig/i18n
LANG="zh_TW.UTF-8"  <==检查linux系统的语系!
[root@www ~]# cd /etc/samba
[root@www samba]# cp smb.conf smb.conf.raw  <==先备份!
[root@www samba]# vim smb.conf

# 1. 先设定好服务器整体环境方面的参数
[global]
        # 与主机名有关的设定信息
        workgroup     = study_linux     #工作组的名称
        netbios name  = jet_server    #主机的 NetBIOS 名称
        server string = This is jet's samba server  #主机的简易说明

        # 与语系方面有关的设定项目,在新版的samba中语系部分可以忽略。
        unix charset    = utf8        #在 Linux 服务器上面所使用的编码,就是刚查看的 i18n 的编码
        display charset = utf8        #自己服务器上面的显示编码, 与unix charset相同
        dos charset     = cp950    #就是 Windows 客户端的编码,使用的是big5编码

        # 与登录文件有关的设定项目,注意变量 (%m)
        log file = /var/log/samba/log.%m   #登录日志放置的目录,这里使用了变量
        max log size = 50        #登录日志最大能使用多少空间,单位是KB,超出则被rotate掉。

        #变量解释:
            # %m:代表 Client 端的 NetBIOS 主机名喔!
            # %M:代表 Client 端的 Internet 主机名喔!就是 HOSTNAME。
            # %L:代表 SAMBA 主机的 NetBIOS 主机名。
            # %H:代表用户的家目录。
            # %U:代表目前登入的使用者的使用者名称
            # %g:代表登入的使用者的组名。
            # %h:代表目前这部 SAMBA 主机的 HOSTNAME 喔!注意是 hostname 不是 NetBIOS name 喔!
            # %I:代表 Client 的 IP 咯。
            # %T:代表目前的日期与时间

        # 与密码有关的设定项目
        security = share        #share, user, domain,三选一,share不需要密码,user使用SMABA服务器本身账户密码,domain使用外部密码

        # 修改一下打印机的加载方式
        load printers	= no        #不需要打印服务

# 2. 分享的资源设定方面:

[temp]                                     #<==分享资源名称
        comment    = Temporary file space  #<==简单的解释此资源
        path       = /tmp                  #<==实际 Linux 分享的目录
        writable   = yes                   #<==是否可写入?在此例为是的
        browseable = yes                   #<==能不能被浏览到资源名称
        guest ok   = yes                   #<==单纯分享时,让用户随意登入的设定值
[root@www ~]# testparm        #启动服务之前通过这个命令检查smb.conf的语法配置是否正确
选项与参数:
-v :查阅完整的参数设定,连同默认值也会显示出来!
[root@www ~]# /etc/init.d/smb start  
[root@www ~]# /etc/init.d/nmb start
#记得服务开机启动也要打开,这个方法省略。
# linux下查看samba共享的资源并挂载使用的方法
[root@www ~]# smbclient -L [//主机或IP] [-U 使用者账号]
选项与参数:
-L :仅查阅后面接的主机所提供分享的目录资源;
-U :以后面接的这个账号来尝试取得该主机的可使用资源
[root@www ~]# mount -t cifs //127.0.0.1/temp /mnt

# windows下使用的方法简单,所以省略。

需要密码的SAMBA共享的部署

# 1. 开始配置重要的 smb.conf !
[root@www ~]# vim /etc/samba/smb.conf
[global]
        workgroup       = study_linux
        netbios name    = jet_server
        server string   = This is jet's samba server
        unix charset    = utf8
        display charset = utf8
        dos charset     = cp950
        log file        = /var/log/samba/log.%m
        max log size    = 50
        load printers	= no
        security = user          #<==这行就是重点,改成 user .
        passdb backend = tdbsam  #<==使用的是 TDB 数据库格式!

# 2. 分享的资源设定方面:注释 temp  加入 homes 与 project

[homes]                                   #<==分享的资源名称
        comment        = Home Directories
        browseable     = no               #<==除了使用者自己外,不可被其他人浏览
        writable       = yes              #<==挂载后可擦写此分享
        create mode    = 0664             #<==建立档案的权限为 664
        directory mode = 0775             #<==建立目录的权限为 775

[project]                                #<==就是那三位使用者的共享资源
        comment    = smbuser's project
        path       = /home/project        #<==实际的 Linux 上面的目录位置
        browseable = yes                  #<==可被其他人所浏览到资源名称(非内容)
        writable   = yes                  #<==可以被写入
        write list = @users               #<==写入者有哪些人的意思,开放给users群组。
# 2. 每次改完 smb.conf 你都需要重新检查一下语法正确否!
[root@www ~]# testparm  
# 3. 设定目录实际权限
[root@www ~]# mkdir /home/project
[root@www ~]# chgrp users /home/project
[root@www ~]# chmod 2770 /home/project
[root@www ~]# ll -d /home/project
drwxrws---. 2 root users 4096 Jul 13 13:15 /home/project
# 4. 设定samba的使用者账号,这个账号必须存在于/etc/passwd

# 4.1 先来建立所需要的各个账号,但假设 student 已经存在了!
[root@www ~]# useradd -G users smb1
[root@www ~]# useradd -G users smb2
[root@www ~]# useradd -G users smb3
[root@www ~]# echo 1234 | passwd --stdin smb1
[root@www ~]# echo 1234 | passwd --stdin smb2
[root@www ~]# echo 1234 | passwd --stdin smb3

# 4.2 使用 pdbedit 指令功能增加samba账号
[root@www ~]# pdbedit -L [-vw]            #<==单纯的察看帐户信息
[root@www ~]# pdbedit -a|-r|-x -u 账号    #<==新增/修改/删除账号
[root@www ~]# pdbedit -a -m -u 机器账号   #<==与 PDC 有关的机器码
#选项与参数:
# -L :列出目前在数据库当中的账号与 UID 等相关信息;
# -v :需要搭配 -L 来执行,可列出更多的讯息,包括家目录等数据;
# -w :需要搭配 -L 来执行,使用旧版的 smbpasswd 格式来显示数据;
# -a :新增一个可使用 Samba 的账号,后面的账号需要在 /etc/passwd 内存在者;
# -r :修改一个账号的相关信息,需搭配很多特殊参数,请 man pdbedit;
# -x :删除一个可使用 Samba 的账号,可先用 -L 找到账号后再删除;
# -m :后面接的是机器的代码 (machine account),与 domain model 有关!

# 实际操作如下:
# 4.3 创建samba账户:
[root@www ~]# pdbedit -a -u smb1
new password: <==输入 1234 这个密码
retype new password: <==再输入一次!
Unix username:        smb1   <==底下为输入正确后的显示结果!
……(更多省略)……

[root@www ~]# pdbedit -a -u smb2
[root@www ~]# pdbedit -a -u smb3
[root@www ~]# pdbedit -a -u student

# 4.4 查询目前已经存在的 Samba 账号
[root@www ~]# pdbedit -L
smb1:2004:
smb3:2006:
smb2:2005:
student:505:
# 仅会列出账号与 UID 而已

#  4.5 尝试修改与删除 smb3 这个账号看看
[root@www ~]# smbpasswd smb3
New SMB password: 
Retype new SMB password:
# 修改密码比较特殊,管理密码参数是使用 pdbedit,修改密码得要用 smbpasswd 

# 4.6 删除smb3账户,此时你就看不到 smb3 这个用户!
[root@www ~]# pdbedit -x -u smb3
[root@www ~]# pdbedit -Lw
# 5.  启动samba服务,开机启动的方法省略。
[root@www ~]# /etc/init.d/smb restart
[root@www ~]# /etc/init.d/nmb restart
# 6. 测试samba服务
#Windows的客户端很简单,所以省略;
#linux客户端测试方法如下:

# 1. 先用匿名登录试看看!
[root@www ~]# smbclient -L //127.0.0.1
Enter root's password:      <==直接按下 [Enter] 即可。
Anonymous login successful  <==有看到匿名的字样了!
Domain=[study_linux] OS=[Unix] Server=[Samba 3.5.4-68.el6_0.2]
        Sharename       Type      Comment
        ---------       ----      -------
        project         Disk      smbuser's project
        IPC$            IPC       IPC Service (This is vbird's samba server)
....(底下省略)....

# 2. 再使用 smb1 这个账号登入试看看
[root@www ~]# smbclient -L //127.0.0.1 -U smb1
Enter smb1's password:  <==输入 smb1 在 pdbedit 所建立的密码!
Domain=[study_linux] OS=[Unix] Server=[Samba 3.5.4-68.el6_0.2]
        Sharename       Type      Comment
        ---------       ----      -------
        project         Disk      smbuser's project
        IPC$            IPC       IPC Service (This is vbird's samba server)
        smb1            Disk      Home Directories <==多了这玩意儿!
....(底下省略)....

[root@www ~]# mount -t cifs //127.0.0.1/smb1 /mnt -o username=smb1
Password: <==确定是输入正确的密码喔!
# 此时 /home/smb1/ 与 /mnt 应该拥有相同的档名,如果不同,记得关闭selinux。

客户端使用SAMBA的方法

# windows客户端使用网上邻居和增加网络磁盘的方法非常直观,这里就不再演示。
# linux使用SAMBA的方法如下
# smbclient:查询网上邻居分享的资源,以及使用类似 FTP 的方式上传/下载网上邻居
咱们的 Samba 有提供 Linux 网上邻居的客户端功能!也就是说 Linux 可以挂载 Samba 服务器也能挂载 Windows 提供的网上邻居!主要是透过 smbclient 来观察,再以 mount 来挂载文件系统。先来介绍一下 smbclient 这个指令吧:

# 1. 关于查询的功能,例如查出 192.168.100.254 的网上邻居数据
[root@clientlinux ~]# smbclient -L //[IP|hostname] [-U username]
[root@clientlinux ~]# smbclient -L //192.168.100.254 -U smb1

# 2. 利用类似 FTP 的方式登入远程主机 , 了解下即可,实际不会这么用。
[root@clientlinux ~]# smbclient '//[IP|hostname]/资源名称' [-U username]
# 意思是使用某个账号来直接登入某部主机的某个分享资源,举例如下:
[root@clientlinux ~]# smbclient '//192.168.100.254/smb1' -U smb1
Enter smb1's password:
Domain=[study_linux] OS=[Unix] Server=[Samba 3.5.4-68.el6_0.2]
smb: > dir
# 在 smb: > 底下其实就是在 //192.168.100.254/dmtsai 这个目录底下!所以,
# 我们可以使用 dir, get, put 等常用的 ftp 指令来进行数据传输了!
?   :列出所有可以用的指令,常用!
cd  :变换到远程主机的目录
del :杀掉某个档案
lcd :变换本机端的目录
ls  :察看目前所在目录的档案
dir :与 ls 相同
get :下载单一档案
mget:下载大量档案
mput:上传大量档案
put :上传单一档案
rm  :删除档案
exit:离开 smbclient 的软件功能
# 其他的指令用法请参考 man smbclient 。

# 3. 类似于Windows建立网络磁盘的方式使用,常用这种方法。
[root@clientlinux ~]# mount -t cifs //IP/分享资源 /挂载点 [-o options]
选项与参数:
-o 后面接的参数 (options) 常用的有底下这些:
   username=你的登入账号:例如 username=smb1
   password=你的登入密码:需要与上面 username 相对应啊!
   iocharset=本机的语系编码方式,如 big5 或 utf8 等等;=
   codepage=远程主机的语系编码方式,例如繁体中文为cp950
# 范例一:以 smb1 的身份将其家目录挂载至 /mnt/samba 中
[root@clientlinux ~]# mkdir /mnt/samba
[root@clientlinux ~]# mount -t cifs //192.168.100.254/smb1 /mnt/samba 
> -o username=smb1,password=4321,codepage=cp950

# 显示网上邻居的方法
[root@clientlinux ~]# smbtree [-bDS]
选项与参数:
-b :以广播的方式取代主要浏览器的查询
-D :仅列出工作组,不包括分享的资源
-S :列出工作组与该工作组下的计算机名称 (NetBIOS) 不包括各项资源目录