LX-SVS-INFO-samba-client
Updated sep/23/10 7:00

samba client - debian

Samba is de linux naam voor windows file en printer sharing. SMB staat voor Server Message Block. Voor de uitspraak heeft Andrew Tridgell, de bedenker en developper van samba, daar in de jaren negentig klinkers aan toegevoegd.

Netbios, SMB en CIFS behoren alle tot dezelfde protocolfamilie.

Nuttige Links:

wikipedia:
http://en.wikipedia.org/wiki/Samba_software

http://en.wikipedia.org/wiki/Server_Message_Block

http://en.wikipedia.org/wiki/Netbios

http://en.wikipedia.org/wiki/LAN_Manager

http://en.wikipedia.org/wiki/Andrew_Tridgell

samba.org: http://www.samba.org/

  1. smbclient

    smbclient is een softwarepakket dat ikzelf voornamelijk gebruik om samba te debuggen. Dat is dikwijls nodig zowel bij microsoft als linux servers. Vaak zijn er problemen met inloggen en/of met gebruikersrechten. smbclient is dan een eerste toevluchtsoord.

    Met smbclient kan je ook snel kijken wat er op een server te vinden is, of iets down-/uploaden, zonder de share te mounten.

    We beginnen met de installatie van smbclient.

    # apt-get install smbclient

    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    The following NEW packages will be installed:
      smbclient
    0 upgraded, 1 newly installed, 0 to remove and 9 not upgraded.
    Need to get 0B/6305kB of archives.
    After this operation, 18.7MB of additional disk space will be used.
    Selecting previously deselected package smbclient.
    (Reading database ... 103845 files and directories currently installed.)
    Unpacking smbclient (from .../smbclient_2%3a3.2.5-4lenny9_i386.deb) ...
    Processing triggers for man-db ...
    Setting up smbclient (2:3.2.5-4lenny9) ...


  2. Beschikbare services

    Toon de beschikbare services op een server met het smbclient -L commando:
    (in dit voorbeeld ben ik onder linux ingelogd als jan)

    $ smbclient -L //172.16.31.2

    Enter jan's password: <ENTER>
    Anonymous login successful
    Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.2.5]

        Sharename       Type      Comment
        ---------       ----      -------
        intec           Disk      
        IPC$            IPC       IPC Service (Samba 3.2.5)

    Anonymous login successful
    Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.2.5]

        Server               Comment
        ---------            -------
        PC3102               Samba 3.2.5
        PC3110               Samba 3.2.5

        Workgroup            Master
        ---------            -------
        WORKGROUP            PC3110


  3. een share testen

    In dit voorbeeld is het ip adres van de server 172.16.31.2, er is een share intec en een user jan wil deze share gebruiken:

    $ smbclient //172.16.31.2/intec -U jan

    Enter jan's password: <ENTER>
    Anonymous login successful
    Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.2.5]
    tree connect failed: NT_STATUS_ACCESS_DENIED


    Inderdaad, de user jan bestaat niet op de server ..., smbclient schakelt over op anonymous en die toegang wordt geweigerd. We proberen opnieuw met user karl:

    $ smbclient //172.16.31.2/brussel -U karl
    Enter karl's password: <ENTER>
    Anonymous login successful
    Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.2.5]
    tree connect failed: NT_STATUS_BAD_NETWORK_NAME


    Er is geen share met de naam brussel ...
    we proberen opnieuw:

    $ smbclient //172.16.31.2/intec -U karl
    Enter karl's password: sdf12345
    Domain=[PC3102] OS=[Unix] Server=[Samba 3.2.5]


    (we zijn nu aangelogd en kunnen de command line interface van smbclient gebruiken; die lijkt erg veel op die van ftp)


    smb: \> ls
      .                                   D        0  Tue Jun  1 11:42:57 2010
      ..                                  D        0  Tue Jun  1 11:42:43 2010
      ytfile                                       0  Tue Jun  1 11:42:57 2010

            45091 blocks of size 131072. 15209 blocks available


    smb: \> ?
    ?              allinfo        altname        archive        blocksize      
    cancel         case_sensitive cd             chmod          chown          
    close          del            dir            du             echo           
    exit           get            getfacl        hardlink       help           
    history        iosize         lcd            link           lock           
    lowercase      ls             l              mask           md             
    mget           mkdir          more           mput           newer          
    open           posix          posix_encrypt  posix_open     posix_mkdir    
    posix_rmdir    posix_unlink   print          prompt         put            
    pwd            q              queue          quit           rd             
    recurse        reget          rename         reput          rm             
    rmdir          showacls       setmode        stat           symlink        
    tar            tarmode        translate      unlock         volume         
    vuid           wdel           logon          listconnect    showconnect    
    ..             !   
    smb: \> quit

  4. mount

    Nu we met succes een share hebben getest, kunnen we deze mounten op onze client.
    We gebruiken cifs (common internet filesystem) Maak eventueel eerst mountpoint met mkdir:


    #
    mkdir /intec

    # mount -t cifs //172.16.31.2/intec /intec
    mount: wrong fs type, bad option, bad superblock on //cassandra/images,
           missing codepage or helper program, or other error
           (for several filesystems (e.g. nfs, cifs) you might
           need a /sbin/mount.<type> helper program)
           In some cases useful info is found in syslog - try
           dmesg | tail  or so


  5. cifs - smbfs installeren

    cifs is nog niet geïnstalleerd, dit doen we met:

    # apt-get install smbfs

    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    The following NEW packages will be installed:
      smbfs
    0 upgraded, 1 newly installed, 0 to remove and 9 not upgraded.
    Need to get 0B/1350kB of archives.
    After this operation, 4190kB of additional disk space will be used.
    Selecting previously deselected package smbfs.
    (Reading database ... 103790 files and directories currently installed.)
    Unpacking smbfs (from .../smbfs_2%3a3.2.5-4lenny9_i386.deb) ...
    Processing triggers for man-db ...
    Setting up smbfs (2:3.2.5-4lenny9) ...


  6. en opnieuw mount

    # mount -t cifs //172.16.31.2/intec /intec
    Password: sdf12345
    mount error(13): Permission denied
    Refer to the mount.cifs(8) manual page (e.g.man mount.cifs)


    We zijn vergeten een user mee te geven, en mount vraagt geen username. Wij zijn trouwens ingelogd als root, en met eerder ingelogde user jan lukte het ook al niet.

    We voegen dan maar de optie voor user karl toe:


    # mount -t cifs -o user=karl //172.16.31.2/intec /intec
    Password: sdf12345

    Er is nu geen error message. Is de mount ook werkelijk gelukt? Dit kunnen we testen met het commando mount zonder opties:

    # mount
    /dev/sda3 on / type ext3 (rw,relatime,errors=remount-ro)
    tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
    proc on /proc type proc (rw,noexec,nosuid,nodev)
    lrm on /lib/modules/2.6.28-11-generic/volatile type tmpfs (rw,mode=755)
    /dev/sda5 on /home/ftp type ext3 (rw)
    /dev/sdb1 on /home/ftp/images type ext3 (rw)
    //172.16.31.2/intec on /intec type cifs (rw,mand)


    we kunnen tenslotte kijken in de share met:

    # ls -l /intec
    -rw-r--r-- 1 root root 0 2010-06-01 11:42 ytfile

  7. extra opties

    We verwijderen eerst de oorspronkelijke mount:

    # umount /intec

    Daarna voegen we wat extra opties toe:

    # mount -t cifs -o user=karl,pass=sdf12345,uid=1000,gid=1000,rw //172.16.31.2/intec /intec


  8. user
    de useraccount om in te loggen
    pass
    het paswoord om in te loggen
    uid
    de lokale uid (zie /etc/passwd) die eigenaar wordt van de mount
    gid
    de lokale gid van de eigenaar van de mount
    rw
    mount read-write

    Kijk nu zelf met ls -l hoe de toegansrechten staan in / en in /intec
    .
  9. fstab

    In de file /etc/fstab kunnen we de mount permanent maken:

    //172.16.31.2/intec   /intec   cifs   user=karl,pass=sdf123245,uid=1000,gid=1000   0   0

  10. Hoe verberg je username en password?

    Je kan de credentials plaatsen in een aparte en hidden file /root/.creds
    Die file geef je lees/schrijf rechten geven voor alleen root (rw-------).
    In fstab krijgen we dan:

    //172.16.31.2/intec   /intec   cifs credentials=/root/.creds,uid=1000,gid=1000,rw   0 0

    en de inhoud van /root/.creds wordt dan

    username=karl
    password=sdf12345

    Volgens de literatuur heeft het geen zin een cifs paswoord te versleutelen, aangezien het toch ongecrypteerd wordt verstuurd over het netwerk, en zo kan worden gesnift.