View source for samba

{{anchor href="top"}}
Hits :  **{{hits}}**

== Samba :: Mini How To ==

{{ToC from="h2" to="h3"}}

=== samba ===

((http://gr.samba.org/samba/index.html http://www.samba.org/))

((http://gr.samba.org/samba/docs/man/Samba-HOWTO-Collection/ Samba-HOWTO-Collection))

((http://gr.samba.org/samba/docs/using_samba/toc.html Using Samba))

((#top))
-----------

=== Installation ===

%%(code)
$ wget -c http://gr.samba.org/samba/ftp/stable/samba-3.2.6.tar.gz
$ tar zxvf samba-3.2.6.tar.gz
$ cd samba-3.2.6/source
$ ./configure
$ make 
$ sudo make installl
%%

Ένα πιο advance configuration:

%%
$ ./configure --with-fhs --with-ldap --with-automount --with-smbmount --with-libsmbclient --with-winbind
%%

Ως διαχειριστές: 

%%(code)
# touch /usr/local/samba/etc/samba/smb.conf
# mv /etc/samba/smb.conf /etc/samba/smb.conf.old
# ln -s /usr/local/samba/etc/samba/smb.conf /etc/samba/smb.conf
# /usr/local/samba/sbin/smbd -D
%%

((#top))
-----------

=== Έλεγχος λειτουργίας ===

%%
# /usr/local/samba/sbin/smbd -F -S 
%%

((#top))
-----------

=== smb.conf ===

Το παρακάτω είναι ένα default share point.
Δεν περιέχει security αλλά είναι λειτουργικό.

Προσοχή εάν θέλετε να μπορούν να γράφουν στον κατάλογο πρέπει ο χρήστης 
nobody.nogroup να μπορεί να γράφει στον κατάλογο /opt/myshare

**/usr/local/samba/etc/samba/smb.conf**

%%(code)
[global]
        workgroup = MYWORKGROUP
        server string = My Samba Server
        security = SHARE
        log file = /var/log/samba.log

[myshare]
        comment = My Share
        path = /opt/myshare
        force user = nobody
        force group = nogroup
        read only = No
        guest ok = Yes
        volume = myshare

%%

((#top))
-----------

=== init.d ===

Για προσωπική χρήση έχω γράψει ένα script για να εκκινώ τον samba daemon εύκολα:

%%(code)
$ cat /etc/init.d/smbd

#!/bin/sh
# Start / Stop Samba SMB/CIFS Daemon
# ebal 12.01.2008

server="Samba SMB/CIFS Daemon"
pidfile="/usr/local/samba/var/run/smbd.pid"
daemon="/usr/local/samba/sbin/smbd -D"

if [ -f $pidfile ]; then
        status=1
else
        status=0
fi

case "$1" in
'start')
        if [ 1 -eq $status ]; then
                $0 status
        else
                echo "Starting "$server "..."
                $daemon
                sleep 1
                $0 status
        fi
        ;;
'stop')
        if [ 1 -eq $status ]; then
                echo "Stoping "$server "..."
                kill -15 `cat $pidfile`
                sleep 1
                rm -f $pidfile
                $0 status
        else
                $0 status
        fi
        ;;
'status')
        if [ 1 -eq $status ]; then
                echo $server "is runnning with pid: `cat $pidfile`"
        else
                echo $server "is NOT running";
        fi
        echo
        ;;
'restart')
        $0 stop
        $0 start
        ;;
        *)
        echo -n "Usage: $0 {start|stop|restart|status)";
                echo "";
        exit 1
esac
%%

((#top))
-----------

=== Commands ===

Παρακάτω είναι οι πιο χρήσιμες και απλές εντολές που πρέπει κανείς να γνωρίζει.

==== smbstatus ====

smbstatus - report on current Samba connections

%%(bash)
$ smbstatus

Global parameter guest account found in service section!

Samba version 3.0.28
PID     Username      Group         Machine
-------------------------------------------------------------------

Service      pid     machine       Connected at
-------------------------------------------------------

No locked files

%%

==== smbclient ===

smbclient - ftp-like client to access SMB/CIFS resources on servers

%%(code)
$ smbclient -U% -L localhost

Domain=[MYWORKGROUP] OS=[Unix] Server=[Samba 3.0.28]

        Sharename       Type      Comment
        ---------       ----      -------
        myshare           Disk
        IPC$            IPC       IPC Service (My Samba Server)

Domain=[MYWORKGROUP] OS=[Unix] Server=[Samba 3.0.28]

        Server               Comment
        ---------            -------
        MY.SERVER.GR     My Samba Server

        Workgroup            Master
        ---------            -------
        MYWORKGROUP
        
%%

==== testparm ====

testparm - check an smb.conf configuration file for internal correctness

%%(code)
$ testparm samba.sample.config

[global]
        workgroup = MYWORKGROUP
        server string = My Samba Server
        interfaces = 10.10.10.1/255.255.255.0
        bind interfaces only = Yes
        security = SHARE
        log file = /var/log/samba.log
        hosts allow = 10.10.10.
        hosts deny = ALL

[myshare]
        comment = My Share
        path = /opt/myshare
        force user = nobody
        force group = nogroup
        read only = No
        guest ok = Yes
        volume = myshare

%%

==== smbget ====

Πως "κατεβάζουμε" αρχεία από έναν διαδικτυακό κοινόχρηστο τόπο από κονσόλα:

%%
smbget -u ebal -p'test' smb://192.168.2.2/C$/imortant/data.rar
%%

((#top))
-----------

=== hosts ===

Το παραπάνω παράδειγμα (αυτό με το testparm) μας παρέχει ασφάλεια σε επίπεδο δικτύου.
Μπορούμε να τροποποιήσουμε το αρχείο ρυθμίσεων ώστε να μας παρέχει ασφάλεια σε επίπεδο share.
Παρακάτω είναι δύο shares όπου στο πρώτο η πρόσβαση ορίζεται σε επίπεδο δικτύου (class c)
ενώ στο δεύτερο η πρόσβαση επιτρέπεται μόνο σε μία και μόνο Ip.

%%(html)
[global]
        workgroup = MyWorkgroup
        server string = My Samba Server
        interfaces = 10.10.10.1/255.255.255.0
        bind interfaces only = Yes
        security = SHARE
        log file = /var/log/samba.log

[myshare]
        comment = My Share
        path = /opt/myshare
        force user = nobody
        force group = nogroup
        read only = No
        guest ok = Yes
        hosts allow = 10.10.10.
        hosts deny = ALL
        volume = myshare
        
[myshare]
        comment = My Share
        path = /opt/myshare
        force user = nobody
        force group = nogroup
        read only = No
        guest ok = Yes
        hosts allow = 10.10.10.2
        hosts deny = ALL
        volume = myshare

%%

((#top))
-----------

=== Πως βάζουμε αυθεντικοποίηση ===

Υπάρχουν αρκετοί τρόποι για να προσθέσουμε αυθεντικοποίηση στους κοινόχρηστες φακέλους μας.
Ο πιο εύκολος τρόπος είναι η δημιουργία ενός αρχείου passwd ειδικά το οποίο θα παίζει το samba.

Έστω λοιπόν το εξής smb.conf

%%
[global]
        log file = /usr/local/samba/var/samba.log
        printcap name = /dev/null
        smb passwd file = /usr/local/samba/lib/smbpasswd
[storage]
        path = /storage
%%

ως διαχειριστές:

%%
# smbpasswd -a test
New SMB password:
Retype new SMB password:

Added user test.

# cat /opt/samba-3.2.5/lib/smbpasswd
test:1001:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:0CB6948805F797BF2A82807973B89537:[U          ]:LCT-493EF7DB:
%%

**__ΣΗΜΕΙΩΣΗ:__** Πρέπει να υπάρχει ο χρήστης **test** στο σύστημά μας

Για να το προσαρτήσουμε τον κοινόχρηστο κατάλογο στο σύστημά μας χρειάζεται να κάνουμε το εξής:

%%
# mkdir -pv /media/storage
# smbmount //192.168.1.1/storage /media/storage/ -o user=test,pass='test'
%%

((#top))
-----------

=== samba4 ===

%%
[global]
        server string = Samba Server
        log file = /var/log/samba/%m.log
        max log size = 50
        dns proxy = No
        idmap config * : backend = tdb 

        # Global security
        map to guest = Bad User
        security = user
        public = Yes 
[data]
        path = /mnt/data/
        writable = Yes 
        read only = No
%%

((#top))
-----------


====samba-3.6.9====

%%
# ebal, Sat, 15 Feb 2014 21:24:45 +0200

[global]
        workgroup = MYWORKGROUP
        server string = Samba Server

        max log size = 50
        log file = /var/log/samba/%m.log

        printcap name = /dev/null
        idmap config * : backend = tdb
        dns_proxy = no

        security = user
        map to guest = Bad User
        guest account = myuser

[myshare]
        comment = myshare
        path = /backup/myshare
        force user = myuser
        force group = mygroup
        read only = No
        guest ok = Yes
        public = Yes
        only guest = Yes
        writable = Yes

%%

((#top))
-----------