欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

马哥 29_03 _samba之一【攻城狮论坛の免费分享】 有大用

image.png

image.png


CIFS/SMB

CIFS: Common Internet File System # 通用Internet文件系统  (通用英特网文件系统)

SMB: Service Message Block  # 服务信息块

NetBIOS: 网络基本输入输出系统


image.png

windows 也可以映射网络驱动器

image.png

  image.png    image.png

windows 是基于 CIFS/SMB协议的,基于主机名称访问,显示对方的资源名称,基于 NetBIOS的工作机制


image.png



samba 跨windows 与 linux 平台 共享文件

image.png

CIFS 是一个协议,也是一个文件系统,是Linux和Windows都支持的网络共享文件系统


netbios 

    137/udp(netbios )    138/udp(netbios )  

    139/tcp(netbios )       445/tcp(共享文件的)


iptables  要开放这几个端口


samba 要关掉  Selinux


SMB 灵机一动,改成了 samba (桑巴舞跟它名字一样)



Winbind 能够让linux主机(samba)加入 windows 的AD域当中的 进程

基于 NetBIOS,CIFS/SMB,Winbind 能够将Linux 做成 Windows 的域控制器的


image.png





coups


image.png


image.png


image.png


image.png


image.png



image.png




一般安装完系统后 samba 都会安装的


[root@mail ~]# yum list all samba*

Loaded plugins: product-id, security, subscription-manager

This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.

file:///media/cdrom/Server/repodata/repomd.xml: [Errno 5] OSError: [Errno 2] 没有那个文件或目录: '/media/cdrom/Server/repodata/repomd.xml'

Trying other mirror.

Installed Packages

samba-client.i386                       3.0.33-3.39.el5_8              installed

samba-common.i386                       3.0.33-3.39.el5_8              installed

Available Packages

samba.i386                              3.0.33-3.39.el5_8              cdrom

samba-swat.i386                         3.0.33-3.39.el5_8              cdrom

samba3x.i386                            3.6.6-0.136.el5                cdrom

samba3x-client.i386                     3.6.6-0.136.el5                cdrom

samba3x-common.i386                     3.6.6-0.136.el5                cdrom

samba3x-doc.i386                        3.6.6-0.136.el5                cdrom

samba3x-domainjoin-gui.i386             3.6.6-0.136.el5                cdrom

samba3x-swat.i386                       3.6.6-0.136.el5                cdrom

samba3x-winbind.i386                    3.6.6-0.136.el5                cdrom

samba3x-winbind-devel.i386              3.6.6-0.136.el5                cdrom

[root@mail ~]#


先卸掉 samba 3.0 的    # samba-client  是客户端 ,samba-common 是客户端和服务端都要用到的通用组件 (可以不用卸载,直接用 3.0的,马哥使用3x (samba 3.5)的目的,是为了 演示)

[root@mail ~]# rpm -e samba-client samba-common


samba3x-swat 是 samba的 web服务器访问工具 swat (samba web access tools)


 # samba3x  是服务器端 samba3x-client  是客户端 ,samba3x-common 是客户端和服务端都要用到的通用组件


[root@mail yum.repos.d]# mount /dev/cdrom /media/cdrom/

mount: block device /dev/cdrom is write-protected, mounting read-only

[root@mail ~]# yum -y install samba3x samba3x-client samba3x-common

image.png



启动 samba 后,会启动两个进程

nmbd:提供 NetBIOS                         137 138 139 端口 

smbd:提供 可以理解成Share (文件共享协议) service message block 的简写?   445端口 


winbindd: (加入域的话,还要启动这个进程,跟windows域结合起来工作的)(一般情况下,默认不启动它)


服务脚本

/etc/rc.d/init.d/smb   不是init.d/smbd,因为它会控制 nmbd,smbd 及更多进程的启动


配置文件

/etc/samba 下面

    smb.conf  主配置文件



[root@mail ~]# ls /etc/samba

lmhosts  smb.conf  smbusers

# lmhosts 就是 local machine hosts 


#  windows 下  hosts->wins ->dns->lmhosts 查名称解析的顺序 

#  smbusers 就是把 linux 用户映射成 windows 用户 ( 比如 root 映射成 administrator )


# samba 用户首先是系统用户,然后密码(不是系统密码)在samba自身文件里面存放,在第一次创建用户后自动生成到这个目录里面

[root@mail ~]#

[root@mail ~]# cd /etc/samba/

[root@mail samba]# ls

lmhosts  smb.conf  smbusers

[root@mail samba]# cp smb.conf smb.conf.bak

[root@mail samba]#


[root@mail samba]# vim smb.conf   #它的配置风格类似于windows的 ini 的配置风格; windows 注册表之前就是INI文件,但INI追溯不容易,才出现注册表的

# 井号开头注释,纯注释 分号开头也是注释,分号开头的是可以启用的参数(或指令)(或选项)


# 下面的等号前后通常都有空格 

======Global Settings===========

[global]

        -------- Network Related Options ------

                  workgroup = MYGROUP  # 工作组  (windows的工作组,默认是 WORKGROUP ?)

                  server string  =  Samba Server Version %v #鼠标悬于网上连接的电脑,显示的描述内        容  %v 就是宏,,仅供这个软件使用,可以看作变量(常量)  这是v是version,是版本的意思

                  netbios name = MYSERVER  #就是主机名,若未启用,就是本主机名的第一段,(比如  www.magedu.com 主机名就是 www  )


        --------- Logging Options -----------

                  log file = /var/log/samba/log.%m  # %m (machine)也是宏表示客户端主机名称(IP)

                   max log size = 50        # 日志文件最大为多大


        ---- Standalone Server Options --

                security = user  # 这里指的是安全级别 可选值 user,share(遭反对),server(遭反对),

                passdb backend = tdbsam  # 密码存放的形式, tdb格式存储的sam文件


----- Printing Options -------

load printers = yes  # 默认是加载打印机的

cups options = raw  #哪种驱动程序 cups (common unix print server (system) 通用unix打印服务)    raw 机制是什么意思



======Shared Definitions=========

          [homes]             #定义每一个用户可以访问自己的家目录的,不同的用户显示的结果不一样

              comment = Home Directory         #  纯注释信息,表示自己的家目录

              browseable = no         #  是否能够被看到,被浏览到,(在网上邻居,(即网络共享中)中是否可以被看到?),,no 除了自己,别人看不到

              writable = yes        #  是否具有写权限

          [printers]  # 这是共享打印机

              comment = All Printers        #  纯注释信息,这里表示所有打印机

              path = /var/spool/samba         #  打印在什么地方,这是一个缓冲池    

              browseable = no       #  是否能够被看到, no 打印机不需要被浏览到的,不需要在网络共享中看到,直接在打印机中找就可以了

              guest ok = no        #  不能被访问,是否允许来宾账号访问的(匿名可以直接访问,当然指定了user级别就不允许匿名了???),guest ok = no 跟 public=no是一个道理

              writable = no     #  是否可写,打印机不可能往里面建文件的

              printable = yes         #  是否可打印


    [print$]  #这是共享打印机驱动

        comment = Printer Drivers

        path = /var/lib/samba/drivers

        write list = @printadmin root

        force group = @printadmin

        create mask = 0664

        directory mask = 0775

              


共享目录的时候,用到的指令有下面这些  这些选项的 等于号(=) 左右 有空格

[shared_name]       :共享名称

         comment = :注释   

         path = :共享的路径

         browseable = :是否可以被浏览

         public (guest ok) = :是否能够被所有用户访问(读)的

         read only = : 是否是只读的  ( read only  与 writable  只要用一个就行了吧 )

         writable = : 是否可写

         write list = :具有写权限的用户列表 user1,user2    @group(+group)组内用户都可写

         valid users =:这个共享允许哪些用户访问,白名单  (valid_users invalid_users  一般不同时使用,若同时使用,则白名单生效 )

         invalid users =: 黑名单




我们想把 linux 上的 /share/test 目录共享出去

[tools]






下图是 windows 工作组

image.pngimage.png

image.png




[root@mail samba]# mkdir /share/test -pv

mkdir: 已创建目录 “/share”

mkdir: 已创建目录 “/share/test”

[root@mail samba]#

[root@mail samba]# pwd

/etc/samba

[root@mail samba]# vim smb.conf

#结尾添加

[tools]

        comment = Share Testing

        path = /share/test

        public =  yes

        writable = yes


[root@mail samba]# testparm  # 专门测试 /etc/samba/smb.conf 有没有语法问题

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 "[tools]"

Loaded services file OK.  

Server role: ROLE_STANDALONE          #这是一个独立运行的服务器

Press enter to see a dump of your service definitions


[global]

        workgroup = MYGROUP

        server string = Samba Server Version %v

        log file = /var/log/samba/log.%m

        max log size = 50

        idmap config * : backend = tdb

        cups options = raw


[homes]

        comment = Home Directories

        read only = No

        browseable = No


[printers]

        comment = All Printers

        path = /var/spool/samba

        printable = Yes

        print ok = Yes

        browseable = No


[tools]

        comment = Share Testing

        path = /share/test

        read only = No

        guest ok = Yes

[root@mail samba]#


启动 smb 服务

[root@mail samba]# service smb start

启动 SMB 服务:                                            [确定]

[root@mail samba]#


启动 nmb 服务 ? ( 也不懂了,难道不要启动 nmb 服务 )  #似乎 smb 包含了 smbd,nmbd等服务,所以不需要启动nmb(nmbd)服务

[root@mail samba]# service nmb start   

启动 NMB 服务:                                            [确定]

[root@mail samba]#


selinux 没开启

[root@mail samba]# getenforce

Permissive

[root@mail samba]#


[root@mail samba]# netstat -tunlp      # 137 138端口没看到  只看到了 139 445 端口,,难道137,138都特定到了 139 端口上

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name

tcp        0      0 127.0.0.1:2208              0.0.0.0:*                   LISTEN      3856/./hpiod

tcp        0      0 0.0.0.0:2049                0.0.0.0:*                   LISTEN      -

tcp        0      0 0.0.0.0:32803               0.0.0.0:*                   LISTEN      -

tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      3869/php-fpm

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      4221/mysqld

tcp        0      0 0.0.0.0:139                 0.0.0.0:*                   LISTEN      15271/smbd

tcp        0      0 0.0.0.0:875                 0.0.0.0:*                   LISTEN      7276/rpc.rquotad

tcp        0      0 0.0.0.0:685                 0.0.0.0:*                   LISTEN      3471/rpc.statd

tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      3421/portmap

tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      4109/vsftpd

tcp        0      0 192.168.1.85:53             0.0.0.0:*                   LISTEN      3796/named

tcp        0      0 127.0.0.1:53                0.0.0.0:*                   LISTEN      3796/named

tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      3890/sshd

tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      3904/cupsd

tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN      4394/master

tcp        0      0 127.0.0.1:953               0.0.0.0:*                   LISTEN      3796/named

tcp        0      0 0.0.0.0:892                 0.0.0.0:*                   LISTEN      7292/rpc.mountd

tcp        0      0 0.0.0.0:445                 0.0.0.0:*                   LISTEN      15271/smbd

tcp        0      0 127.0.0.1:2207              0.0.0.0:*                   LISTEN      3861/python

tcp        0      0 :::995                      :::*                        LISTEN      4258/dovecot

tcp        0      0 :::139                      :::*                        LISTEN      15271/smbd

tcp        0      0 :::110                      :::*                        LISTEN      4258/dovecot

tcp        0      0 :::80                       :::*                        LISTEN      4434/httpd

tcp        0      0 :::22                       :::*                        LISTEN      3890/sshd

tcp        0      0 ::1:953                     :::*                        LISTEN      3796/named

tcp        0      0 :::445                      :::*                        LISTEN      15271/smbd

udp        0      0 0.0.0.0:32769               0.0.0.0:*                               -

udp        0      0 0.0.0.0:2049                0.0.0.0:*                               -

udp        0      0 0.0.0.0:51487               0.0.0.0:*                               4662/avahi-daemon

udp        0      0 0.0.0.0:679                 0.0.0.0:*                               3471/rpc.statd

udp        0      0 0.0.0.0:682                 0.0.0.0:*                               3471/rpc.statd

udp        0      0 192.168.1.85:53             0.0.0.0:*                               3796/named

udp        0      0 127.0.0.1:53                0.0.0.0:*                               3796/named

udp        0      0 0.0.0.0:5353                0.0.0.0:*                               4662/avahi-daemon

udp        0      0 0.0.0.0:875                 0.0.0.0:*                               7276/rpc.rquotad

udp        0      0 0.0.0.0:111                 0.0.0.0:*                               3421/portmap

udp        0      0 0.0.0.0:631                 0.0.0.0:*                               3904/cupsd

udp        0      0 0.0.0.0:892                 0.0.0.0:*                               7292/rpc.mountd

udp        0      0 :::58429                    :::*                                    4662/avahi-daemon

udp        0      0 :::5353                     :::*                                    4662/avahi-daemon

[root@mail samba]#


windows 下

# netstat -an    #可以看到 137(udp) 138(udp) 139(tcp) 445(tcp)(马哥说没共享,应该看不到445端口,但是我看到了 445  端口,是因为我的windows电脑上共享了某个目录)

image.png


增加个用户账号

[root@mail samba]# useradd eucalyptus  #建用户的时候 ,会同时创建同名的组?

[root@mail samba]# id eucalyptus

uid=2533(eucalyptus) gid=2533(eucalyptus) groups=2533(eucalyptus) context=root:system_r:unconfined_t:SystemLow-SystemHigh

[root@mail samba]#



[root@mail samba]# man smbpasswd

            smbpasswd - change a user´s SMB password

image.png

-a  (add) 添加为samba的用户账号

-d  (disabled) 禁用 samba的用户账号

-e  (enable) 启用 samba的用户账号

-x                 删除 samba的用户账号


刚刚建立的 eucalyptus  用户要加为 samba帐号

[root@mail samba]# smbpasswd -a eucalyptus            

New SMB password:            #为了安全,密码最好不要与系统账号的密码一样

Retype new SMB password:

Added user eucalyptus.

[root@mail samba]#


[root@mail samba]# ll

总计 48

-rw-r--r-- 1 root root   20 2013-08-06 lmhosts

-rw-r--r-- 1 root root 9863 08-07 15:35 smb.conf

-rw-r--r-- 1 root root 9778 08-07 13:45 smb.conf.bak

-rw-r--r-- 1 root root   97 2013-08-06 smbusers

[root@mail samba]#


在windows下访问看看

image.png

image.png



我自家的 windows 电脑上没有问题 

我公司的 windows 电脑上 会出现资源管理器崩溃的情况 (可能是因为公司的电脑里有蓝牙驱动吧 见  /node-admin/15404 )


感觉打开很慢 (至少第一次打开很慢) 不行的话,重启电脑看看


家目录和共享的tools 

image.png


新建文件 abc.txt

image.png

[root@mail samba]# su - eucalyptus

看到了 abc.txt

[eucalyptus@mail ~]$ ls

abc.txt

[eucalyptus@mail ~]$



在 tools 目录下不能写文件

image.png




[eucalyptus@mail ~]$ exit

logout


由下面可见   eucalyptus 对 tools(/share/test/) 没有写权限

[root@mail samba]# ll -d /share/test/

drwxr-xr-x 2 root root 4096 06-22 10:50 /share/test/

[root@mail samba]#


给 eucalyptus 读写执行权限

[root@mail samba]# setfacl -m u:eucalyptus:rwx /share/test/

[root@mail samba]#


此时 就可以写文件了

image.png



可以看到 abc.txt 了

[root@mail samba]# ls /share/test/

abc.txt

[root@mail samba]#


windows 下建的文件属主默认就有执行权限

[root@mail samba]# ls -l /share/test/

总计 4

-rwxr--r--  1 eucalyptus eucalyptus 0 06-22 11:27 abc.txt

[root@mail samba]#


当然可以使用 umask 让它没有执行权限

我们可以 映射网络驱动器了

image.png


可看到盘符了

image.png

普通分类: