Cara membuat berbagi Samba

Alessio, Peter Lilley, Petr Bokoc Versi F32 Last review: 2020-12-01

Samba memungkinkan klien Windows dan klien lain untuk terhubung ke direktori berbagi file pada host Linux. Samba mengimplementasikan protokol Server Message Block (SMB). Panduan ini menjelaskan cara membuat lokasi file berbagi pada mesin Fedora yang dapat diakses oleh komputer lain di jaringan lokal.

Instal dan aktifkan Samba

Perintah berikut ini menginstal Samba dan mengaturnya untuk dijalankan melalui systemctl. Ini juga mengatur firewall untuk mengizinkan akses ke Samba dari komputer lain.

sudo dnf install samba
sudo systemctl enable smb --now
firewall-cmd --get-active-zones
sudo firewall-cmd --permanent --zone=FedoraWorkstation --add-service=samba
sudo firewall-cmd --reload

Membagikan direktori di dalam /home

Dalam contoh ini, Anda akan membagikan sebuah direktori di dalam direktori home Anda, yang hanya dapat diakses oleh pengguna Anda.

Samba tidak menggunakan akun pengguna sistem operasi untuk otentikasi, jadi akun pengguna Anda harus diduplikasi di Samba. Jadi, jika akun Anda adalah jane di host, pengguna jane juga harus ditambahkan ke Samba. Meskipun nama pengguna harus sama, kata sandi dapat berbeda.

Buat pengguna bernama jane di Samba:

sudo smbpasswd -a jane

Buat direktori yang akan dijadikan share untuk Jane, dan atur konteks SELinux yang benar:

mkdir /home/jane/share
sudo semanage fcontext --add --type "samba_share_t" "/home/jane/share(/.*)?"
sudo restorecon -R ~/share

Konfigurasi Samba disimpan dalam berkas /etc/samba/smb.conf. Menambahkan bagian berikut di akhir berkas akan menginstruksikan Samba untuk membuat berbagi (share) bernama “share” di direktori /home/jane/share yang baru saja dibuat.

[share]
        comment = My Share
        path = /home/jane/share
        writeable = yes
        browseable = yes
        public = yes
        create mask = 0644
        directory mask = 0755
        write list = user

Mulai ulang Samba agar perubahan berlaku:

sudo systemctl restart smb

Membagikan direktori untuk banyak pengguna

Dalam contoh ini, Anda akan membagikan sebuah direktori (di luar direktori home Anda) dan membuat grup pengguna yang memiliki kemampuan untuk membaca dan menulis ke direktori yang dibagikan.

Ingatlah bahwa pengguna Samba juga harus menjadi pengguna sistem agar dapat menghormati izin sistem berkas. Contoh ini membuat grup sistem myfamily untuk dua pengguna baru jack dan maria.

sudo groupadd myfamily
sudo useradd  -G myfamily jack
sudo useradd  -G myfamily maria

Anda dapat membuat pengguna ini tanpa kata sandi sistem. Hal ini akan mencegah akses ke sistem melalui SSH atau login lokal.

Tambahkan jack dan maria ke Samba dan buat kata sandi mereka:

sudo smbpasswd -a jack
sudo smbpasswd -a maria

Mengatur folder bersama:

sudo mkdir /home/share
sudo chgrp myfamily /home/share
sudo chmod 770 /home/share
sudo semanage fcontext --add --type "samba_share_t" "/home/share(/.*)?"
sudo restorecon -R /home/share

Setiap share dijelaskan dalam bagiannya sendiri di berkas /etc/samba/smb.conf. Tambahkan bagian ini di bagian bawah berkas:

[family]
        comment = Family Share
        path = /home/share
        writeable = yes
        browseable = yes
        public = yes
        valid users = @myfamily
        create mask = 0660
        directory mask = 0770
        force group = +myfamily

Penjelasan mengenai hal di atas:

  • valid users: hanya pengguna dari grup family yang memiliki hak akses. Tanda @ menandakan nama grup.

  • force group = +myfamily: Berkas dan direktori dibuat dengan grup ini, bukan grup pengguna.

  • create mask = 0660: Berkas-berkas dalam folder berbagi dibuat dengan izin yang memungkinkan semua pengguna grup untuk membaca dan menulis berkas yang dibuat oleh pengguna lain.

  • directory mask = 0770: seperti sebelumnya, tetapi untuk direktori.

Mulai ulang Samba agar perubahan berlaku:

sudo systemctl restart smb

Mengelola Pengguna Samba

Ubah kata sandi pengguna Samba

Ingat: Kata sandi pengguna sistem dan kata sandi pengguna Samba dapat berbeda. Pengguna sistem diperlukan untuk mengelola izin sistem berkas.

sudo smbpasswd maria

=== Hapus pengguna Samba

sudo smbpasswd -x maria

Jika Anda tidak memerlukan pengguna sistem, hapus juga:

sudo userdel -r maria

== Pemecahan masalah dan log

Berkas log Samba terletak di /var/log/samba/

tail -f /var/log/samba/log.smbd

Anda dapat meningkatkan tingkat detail dengan menambahkan baris berikut ke bagian [global] dalam berkas /etc/samba/smb.conf:

[global]
        loglevel = 5

Untuk memvalidasi sintaks berkas konfigurasi /etc/samba/smb.conf, gunakan perintah testparm. Contoh output:

Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_STANDALONE

Untuk menampilkan koneksi Samba saat ini, gunakan perintah smbstatus. Contoh output:

Samba version 4.12.3
PID     Username     Group        Machine                                   Protocol Version  Encryption           Signing
----------------------------------------------------------------------------------------------------------------------------------------
7259    jack         jack         192.168.122.1 (ipv4:192.168.122.1:40148)  SMB3_11           -                    partial(AES-128-CMAC)

Service      pid     Machine       Connected at                     Encryption   Signing
---------------------------------------------------------------------------------------------
family       7259    192.168.122.1 Fri May 29 14:03:26 2020 AEST    -            -

Tidak ada file yang terkunci

=== Masalah dalam mengakses folder bersama

Beberapa hal yang perlu diperiksa jika Anda tidak dapat mengakses berbagi.

  1. Pastikan bahwa pengguna tersebut terdaftar sebagai pengguna sistem serta pengguna Samba

    Cari maria di database Samba:

    sudo pdbedit -L | grep maria
    
    maria:1002:

    Pastikan bahwa maria juga terdaftar sebagai pengguna sistem.

    cat /etc/passwd | grep maria
    
    maria:x:1002:1002::/home/maria:/bin/bash
  2. Periksa apakah direktori bersama dan sub-direktori memiliki konteks SELinux yang benar.

    ls -dZ /home/share
    
    unconfined_u:object_r:samba_share_t:s0 /home/share
  3. Periksa apakah pengguna sistem memiliki izin akses ke direktori bersama.

    ls -ld /home/share
    
    drwxrwx---. 2 root myfamily 4096 May 29 14:03 /home/share

    Dalam hal ini, pengguna harus berada dalam grup myfamily.

  4. Periksa berkas konfigurasi /etc/samba/smb.conf untuk memastikan bahwa pengguna dan grup memiliki izin akses.

    [family]
            comment = Family Share
            path = /home/share
            writeable = yes
            browseable = yes
            public = yes
            valid users = @myfamily
            create mask = 0660
            directory mask = 0770
            force group = +myfamily

    Dalam hal ini, pengguna harus berada dalam grup myfamily.

=== Masalah saat menulis di folder bersama

  1. Periksa berkas konfigurasi Samba untuk memastikan bahwa pengguna/grup memiliki izin tulis.

    [family]
            comment = Family Share
            path = /home/share
            writeable = yes
            browseable = yes
            public = yes
            valid users = @myfamily
            create mask = 0660
            directory mask = 0770
            force group = +myfamily

    Dalam contoh ini, pengguna harus berada dalam grup myfamily.

  2. Periksa izin direktori berbagi.

    ls -ld /home/share
    
    drwxrwx---. 2 root myfamily 4096 May 29 14:03 /home/share

    Contoh ini mengasumsikan bahwa pengguna merupakan bagian dari grup myfamily yang memiliki izin baca, tulis, dan eksekusi untuk folder tersebut.