Linux : Share SMB untuk Media Server dengan Samba (Studi Kasus Jellyfin)
Membuka folder server dari Windows terdengar seperti hal sepele: ketik alamat, tekan Enter, file muncul. Kenyataannya, di balik layar ada tiga hal yang harus cocok sekaligus β protokol, identitas, dan angka pemilik file. Kalau satu saja meleset, hasilnya bukan error yang jelas, melainkan folder kosong, akses ditolak, atau file yang tidak pernah muncul di aplikasi pemutar.
Artikel ini membangun satu share SMB dari nol di Linux, lalu menyambungkannya ke media server Jellyfin. Semua langkah memakai kasus nyata: film dan series yang dikirim dari laptop Windows ke server rumah atau server sekolah.
π― Tujuan
Setelah membaca dan mempraktikkan artikel ini, kamu bisa:
- menjelaskan perbedaan SMB sebagai protokol dan Samba sebagai program di Linux;
- membuat share SMB yang hanya bisa diakses dari jaringan lokal;
- membuat user Samba yang terpisah dari user login Linux;
- menjelaskan kenapa UID dan PUID harus sama supaya file terbaca media server;
- menguji share dari Windows dan dari Linux, termasuk menguji hak tulis;
- mendiagnosis pesan
NT_STATUS_NO_SUCH_USER, port 445 tertutup, dan file yang tidak muncul di Jellyfin; - memahami kenapa port 445 tidak boleh dibuka ke internet.
π Konteks nyata
Bayangkan sebuah gudang film milik sekolah. Gudangnya ada di ruang server, tapi yang mau mengambil film adalah guru di ruang lain lewat jendela loket.
Loket itu punya tiga aturan. Pertama, bahasa yang dipakai harus sama β kalau petugas gudang hanya paham bahasa Indonesia dan pengunjung hanya bisa bahasa isyarat, transaksi tidak jalan. Kedua, pengunjung harus punya kartu akses yang terdaftar. Ketiga, rak di dalam gudang punya nomor pemilik; kalau kartu akses menunjukkan nomor yang berbeda, petugas tetap boleh menyerahkan barang, tetapi mesin pemutar di ruang lain tidak mengenali rak itu.
Di dunia server, "bahasa" itu SMB, "kartu akses" itu user Samba, dan "nomor pemilik rak" itu UID. Tiga-tiganya harus dibereskan. Tutorial yang hanya mengajarkan satu di antaranya akan menghasilkan setup yang terlihat jalan di satu komputer, lalu gagal begitu dipakai aplikasi lain.
- π₯ Kasus nyata: Sebuah lab multimedia memasang share SMB dan berhasil menyalin 40 film dari laptop guru. Semua file terlihat di Windows. Tetapi Jellyfin tidak menampilkan satu film pun. Penyebabnya bukan share-nya, melainkan file dimiliki UID 1001 sementara Jellyfin berjalan sebagai UID 1000. Perbaikannya hanya satu perintah
chown, tapi butuh tiga jam untuk ditemukan karena tidak ada yang memeriksa angka pemilik file.
π§ Konsep singkat
πΉ SMB itu protokol, Samba itu programnya
SMB (Server Message Block) adalah bahasa yang dipakai Windows untuk membuka file dan printer di jaringan. Bahasa ini sudah ada sejak era DOS dan masih dipakai sampai Windows 11.
Samba adalah program di Linux yang bisa berbicara SMB. Jadi saat Windows membuka \\192.168.100.101\Media, Windows mengirim permintaan SMB, dan Samba yang menjawab.
- π‘ Tips: Kalau kamu mencari tutorial dan menemukan kata "CIFS", itu nama lain dari keluarga protokol yang sama.
mount -t cifsberarti memasang share SMB sebagai folder di Linux.
πΉ Tiga angka yang menentukan berhasil atau gagal
| Angka | Di mana | Fungsi |
|---|---|---|
| UID sistem | /etc/passwd |
Pemilik file di disk |
| User Samba | database tdbsam |
Nama dan password saat login share |
| PUID container | environment Docker | UID yang dipakai aplikasi di dalam container |
Ketiganya berbeda tempat, tetapi harus menunjuk ke angka yang sama. Inilah sumber sebagian besar masalah "file sudah dicopy tapi tidak terbaca".
πΉ Perjalanan satu file dari Windows ke Jellyfin
- Windows mengirim file lewat SMB ke server.
- Samba menulis file ke folder share, lalu memberi pemilik sesuai
force useratau user yang login. - Jellyfin membaca folder yang sama dari dalam container.
- Container Jellyfin berjalan sebagai PUID tertentu; kalau UID file berbeda dan permission terlalu ketat, file dianggap tidak ada.
- Jellyfin mencocokkan nama file dengan pola episode atau film, lalu menampilkannya di library.
π§© Istilah penting
- Share β folder di server yang dibuka untuk jaringan. Di artikel ini namanya
Media. - smb.conf β file konfigurasi utama Samba, biasanya di
/etc/samba/smb.conf. - tdbsam β database internal Samba untuk menyimpan user dan password share. Terpisah dari password login Linux.
- smbpasswd β perintah untuk menambah, mengubah, dan mengaktifkan user Samba.
- testparm β pemeriksa konfigurasi Samba. Wajib dijalankan sebelum restart service.
- force user β memaksa semua akses share dicatat sebagai user tertentu.
- create mask β pengaturan permission untuk file baru yang dibuat lewat share.
- PUID/PGID β UID dan GID yang dipakai aplikasi di dalam container Docker.
- mount point β folder kosong di komputer klien tempat share dipasang, misalnya
/mnt/media.
π§ Praktik: membangun share Media
Praktik ini memakai satu server Linux (bisa mesin fisik, VM, atau container LXC) dan satu komputer Windows di jaringan yang sama.
| Komponen | Contoh alamat | Keterangan |
|---|---|---|
| Server Linux | 192.168.100.101 | Tempat Samba dan Jellyfin |
| Klien Windows | 192.168.100.88 | Komputer yang membuka share |
| Jaringan lokal | 192.168.100.0/24 | Batas akses yang diizinkan |
πΉ Langkah 0 β Siapkan bahan
Sebelum mulai, pastikan:
- kamu punya akses
sudodi server; - server dan klien berada di subnet yang sama, misalnya sama-sama
192.168.100.x; - folder media sudah direncanakan, misalnya
/srv/media; - port 445 tidak dipakai aplikasi lain.
- β οΈ Hati-hati: Jangan menyimpan share di folder home pribadi. Permission home biasanya
700, sehingga user Samba tidak bisa menembusnya meskipun share sudah benar.
πΉ Langkah 1 β Cek server dan ruang disk
Jalankan di server:
hostname -I
df -h /
uname -a
Hasil yang diharapkan: satu alamat IP lokal, filesystem root dengan ruang kosong cukup, dan informasi kernel.
- π§ͺ Uji cepat: Kalau
hostname -Imenampilkan lebih dari satu alamat, catat alamat yang satu subnet dengan klien. Salah memilih alamat adalah penyebab umum "server tidak ditemukan".
πΉ Langkah 2 β Buat struktur folder
sudo mkdir -p /srv/media/Movies
sudo mkdir -p /srv/media/Series
sudo mkdir -p /srv/media/Anime
ls -ld /srv/media /srv/media/*
Struktur ini penting karena Jellyfin memakai jenis library berbeda untuk film dan series. Mencampur keduanya dalam satu folder membuat metadata kacau.
πΉ Langkah 3 β Tentukan UID media server
Kalau Jellyfin berjalan di Docker, cari PUID-nya:
docker inspect jellyfin --format '{{json .Config.Env}}'
Cari baris PUID=1000 dan PGID=1000. Kalau Jellyfin berjalan langsung di host, cek user service-nya:
ps -o user= -C jellyfin
id jellyfin
Catat angkanya. Contoh di artikel ini: UID 1000.
- π Angka penting: Di banyak distro, user pertama yang dibuat saat instalasi mendapat UID 1000. Karena itu banyak container memakai PUID 1000. Tetapi jangan berasumsi β selalu periksa.
πΉ Langkah 4 β Pasang Samba
sudo apt update
sudo apt install -y samba
smbd -V
systemctl status smbd --no-pager
Hasil yang diharapkan: versi Samba tercetak, dan service smbd berstatus aktif.
- π‘ Tips: Di keluarga Red Hat, paketnya bernama
sambajuga, tetapi service-nyasmbdannmb, bukansmbddannmbd.
πΉ Langkah 5 β Buat user sistem dan user Samba
User Samba harus punya pasangan user sistem. Nama boleh sama, password-nya terpisah.
sudo useradd -M -s /usr/sbin/nologin media
id media
Hasil yang diharapkan: uid=1000(media) atau UID lain. Kalau UID yang muncul bukan 1000, catat β nanti dipakai di force user.
Buat password Samba:
sudo smbpasswd -a media
sudo smbpasswd -e media
sudo pdbedit -L
Hasil yang diharapkan: pdbedit menampilkan satu baris berisi media:1000:.
- β οΈ Hati-hati:
smbpasswd -atanpa-ebisa meninggalkan akun dalam keadaan disabled. Selalu jalankansmbpasswd -edan buktikan denganpdbedit -L. - β οΈ Hati-hati: Kalau terminal mengeluarkan peringatan locale seperti
Cannot set LC_ALL, perintah bisa gagal diam-diam. Periksa hasilnya, jangan percaya "tidak ada output berarti sukses".
πΉ Langkah 6 β Backup lalu edit smb.conf
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
sudo nano /etc/samba/smb.conf
Tambahkan blok berikut di bagian paling bawah file:
[Media]
path = /srv/media
browseable = yes
read only = no
valid users = media
force user = media
force group = media
create mask = 0664
directory mask = 0775
hosts allow = 192.168.100.0/24
hosts deny = 0.0.0.0/0
Arti tiap parameter:
| Parameter | Nilai contoh | Kalau salah |
|---|---|---|
path |
/srv/media |
Share kosong atau tidak bisa dibuka |
valid users |
media |
Semua user ditolak |
force user |
media |
File tak terbaca aplikasi lain |
create mask |
0664 |
File jadi 0600, user lain gagal baca |
- π₯ Kasus nyata: Menulis
force user = 1000β angka, bukan nama β membuat Samba menolak koneksi denganNT_STATUS_NO_SUCH_USER. Samba mencari nama user, bukan UID. Tulis nama user yang memang ada.
- π‘ Tips: Jika file harus bisa dibaca aplikasi lain tetapi tidak boleh diubah, ganti
read only = nomenjadiyesdan biarkan penulisan lewat jalur lain.
πΉ Langkah 7 β Validasi konfigurasi
testparm -s
Hasil yang diharapkan: ringkasan konfigurasi tanpa pesan error, dan blok [Media] muncul dengan parameter yang benar.
- β οΈ Hati-hati: Jangan restart service sebelum
testparmbersih. Konfigurasi rusak bisa membuat semua share hilang, bukan hanya yang baru.
πΉ Langkah 8 β Jalankan service
sudo systemctl enable --now smbd nmbd
sudo systemctl restart smbd
systemctl is-active smbd nmbd
ss -tlnp | grep ':445'
Hasil yang diharapkan: dua service active, dan port 445 dalam keadaan LISTEN.
- π§ͺ Uji cepat: Kalau
ssmenunjukkan 445 LISTEN tetapi klien tetap tidak bisa connect, masalahnya bukan Samba β lanjut ke langkah firewall.
πΉ Langkah 9 β Buka firewall hanya untuk LAN
Misalnya server memakai ufw:
sudo ufw status verbose
sudo ufw allow from 192.168.100.0/24 to any port 445 proto tcp comment 'SMB media LAN'
sudo ufw reload
sudo ufw status | grep 445
Hasil yang diharapkan: satu baris 445/tcp ALLOW 192.168.100.0/24.
- β οΈ Hati-hati: Jangan memakai
ufw allow 445/tcptanpa batas sumber. Itu membuka share ke seluruh jaringan yang bisa menjangkau server, termasuk jaringan tamu. - π Angka penting: Port yang dipakai SMB: 445/TCP untuk transfer file modern, 139/TCP untuk NetBIOS lama, dan 137β138/UDP untuk browsing nama. Untuk kebutuhan artikel ini, cukup 445/TCP.
πΉ Langkah 10 β Uji dari server sendiri
sudo apt install -y smbclient
smbclient -L 127.0.0.1 -U media
smbclient //127.0.0.1/Media -U media -c 'ls; put /etc/hostname uji-smb.txt; ls'
ls -ln /srv/media
Hasil yang diharapkan: share Media terdaftar, perintah put berhasil, dan file uji-smb.txt muncul dengan pemilik angka 1000 1000.
- π‘ Tips:
ls -lnmenampilkan UID dan GID dalam bentuk angka. Inilah cara tercepat membuktikan apakahforce userbekerja.
Hapus file uji setelah selesai:
rm -f /srv/media/uji-smb.txt
πΉ Langkah 11 β Uji dari Windows
- Buka File Explorer.
- Ketik di address bar:
\\192.168.100.101\Media - Saat diminta kredensial, isi user
mediadan password Samba yang tadi dibuat. - Buat folder baru bernama
uji-windows. - Copy satu file kecil ke dalamnya.
Dari PowerShell, kamu juga bisa menguji port lebih dulu:
Test-NetConnection 192.168.100.101 -Port 445
Hasil yang diharapkan: TcpTestSucceeded : True.
- β οΈ Hati-hati: Kalau Windows menyimpan kredensial lama, koneksi bisa gagal terus. Buka Control Panel β Credential Manager β Windows Credentials, hapus entri untuk alamat server, lalu coba lagi.
πΉ Langkah 12 β Sambungkan ke Jellyfin
Contoh layanan Jellyfin dengan Docker Compose:
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Jakarta
volumes:
- ./config:/config
- ./cache:/cache
- /srv/media:/media
ports:
- "8096:8096"
Jalankan:
docker compose up -d
docker ps --filter name=jellyfin
Lalu di web Jellyfin:
- Buka
http://IP-SERVER:8096. - Selesaikan wizard admin.
- Dashboard β Libraries β Add Media Library.
- Content type
Moviesβ folder/media/Movies. - Ulangi untuk
Showsβ folder/media/Series. - Simpan dan tunggu scan selesai.
- π Angka penting: Jalur yang dipilih di Jellyfin adalah jalur di dalam container, bukan jalur di host. Kalau host memakai
/srv/mediadan container memetakannya ke/media, maka library harus menunjuk/media/Movies.
πΉ Langkah 13 β Aturan penamaan film dan series
Film, satu folder per judul:
Movies/
βββ Dune Part Two (2024)/
βββ Dune Part Two (2024).mkv
βββ Dune Part Two (2024).id.srt
Series, satu folder per judul, episode memakai pola SxxExx:
Series/
βββ Doctor X - Age of the White Mafia (2021)/
βββ Season 01/
βββ Doctor X - Age of the White Mafia - S01E01.mp4
βββ Doctor X - Age of the White Mafia - S01E02.mp4
- β οΈ Hati-hati: Nama seperti
Eps1.mp4atauepisode 1.mp4sering tidak dikenali. Tanpa polaS01E01, Jellyfin bisa mengabaikan file atau menaruhnya di tempat yang salah.
β Verifikasi
Jalankan pemeriksaan berikut sebelum menyatakan praktikum selesai.
| Pemeriksaan | Perintah | Hasil benar |
|---|---|---|
| Service hidup | systemctl is-active smbd |
active
|
| Port terbuka | ss -tlnp | grep 445 |
LISTEN |
| User Samba ada | pdbedit -L |
media:1000:
|
| Tulis dari klien | buat file di Explorer | file muncul di server |
Periksa juga kepemilikan file:
ls -ln /srv/media/Movies
Hasil yang diharapkan: kolom ketiga dan keempat berisi 1000 1000, sama dengan PUID/PGID Jellyfin.
Terakhir, buka Jellyfin dan pastikan film atau episode muncul di library, bukan hanya di file manager.
π§ͺ Lab sengaja dibuat rusak
Bagian ini untuk praktikum. Kamu akan merusak konfigurasi dengan sengaja, mengamati gejalanya, lalu memperbaikinya. Tujuannya bukan menghafal error, tetapi mengenali pola.
πΉ Percobaan A β force user memakai angka
Ubah satu baris di smb.conf:
force user = 1000
Lalu:
sudo systemctl restart smbd
smbclient //127.0.0.1/Media -U media -c 'ls'
Gejala yang muncul: tree connect failed: NT_STATUS_NO_SUCH_USER.
Pertanyaan: kenapa Samba tidak menerima angka, padahal UID memang 1000?
Perbaikan: kembalikan menjadi force user = media, lalu restart dan uji ulang.
πΉ Percobaan B β port 445 ditutup
sudo ufw delete allow from 192.168.100.0/24 to any port 445 proto tcp
Dari Windows, jalankan Test-NetConnection ke port 445.
Gejala: TcpTestSucceeded : False dan Explorer menampilkan "Windows cannot access".
Pertanyaan: apa bedanya "port tertutup" dengan "user salah"? Bagaimana membedakannya dari pesan error?
Perbaikan: tambahkan kembali rule ufw, lalu ulangi.
πΉ Percobaan C β PUID tidak cocok
Ubah compose Jellyfin menjadi PUID=1001, lalu jalankan ulang container. Buat file baru lewat SMB, dan periksa ls -ln.
Gejala: file tetap ada, tetapi Jellyfin tidak menampilkan atau tidak bisa memutar isinya.
Pertanyaan: siapa yang sebenarnya "tidak punya izin" β Samba, Jellyfin, atau kernel?
Perbaikan: samakan PUID dengan pemilik file, atau perbaiki kepemilikan dengan chown -R 1000:1000 /srv/media.
β οΈ Kesalahan umum & troubleshooting
NT_STATUS_NO_SUCH_USERβforce userdiisi angka, user Samba belum dibuat, atausmbdbelum di-restart setelah user ditambahkan. Periksapdbedit -L.NT_STATUS_LOGON_FAILUREβ password salah atau user belum diaktifkan. Jalankansmbpasswd -e.- Port 445 tertutup β periksa ufw di server, firewall Windows di klien, dan kebijakan ISP. Jangan langsung menyimpulkan Samba rusak.
- Share terlihat, isi kosong β
pathsalah atau permission folder induk terlalu ketat. Uji dengannamei -l /srv/media. - Tidak bisa menulis β
read only = yesmasih aktif, atauforce usertidak punya izin tulis. - File ada di SMB tetapi tidak muncul di Jellyfin β library belum ditambahkan, jalur library salah, UID tidak cocok, atau nama file tidak memakai pola yang dikenali.
- Share tidak muncul saat browse Network β layanan
nmbdmati atau browsing NetBIOS diblokir. Akses langsung lewat\\IP\Mediatetap bisa. - Perangkat lama tidak bisa connect β SMB1 dinonaktifkan secara default sejak Samba 4.11. Jangan mengaktifkannya kembali; ganti perangkat atau pakai jalur lain.
- π‘ Tips: Saat debugging, selalu tanyakan: masalahnya di jaringan, autentikasi, atau izin file? Tiga kategori ini punya alat pemeriksa yang berbeda.
π Catatan keamanan & etika
- Jangan pernah meneruskan port 445 dari internet ke server. SMB adalah salah satu target serangan ransomware paling sering, termasuk worm yang menyebar otomatis.
- Untuk akses dari luar rumah, gunakan VPN seperti WireGuard. Setelah terhubung VPN, perangkatmu berada di jaringan lokal dan bisa membuka share dengan aman.
- Batasi share dengan
hosts allowke subnet lokal saja. - Buat satu user Samba per orang. Jangan memakai satu akun bersama untuk semua siswa β log menjadi tidak berguna saat terjadi masalah.
- Untuk arsip yang tidak boleh berubah, gunakan share
read only = yes. - Simpan salinan
smb.confsebelum mengubah apa pun. - Etika: share berisi film pribadi tetap tanggung jawab pemilik server. Jangan menyebarkan materi berhak cipta ke luar izin yang sah.
π Dipakai di dunia kerja
- Sekolah: lab multimedia menyimpan materi ajar di server dan guru mengirim video lewat share SMB tanpa harus membawa flashdisk.
- Kantor: tim desain menyimpan aset besar di share terpusat, sementara aplikasi presentasi membaca folder yang sama.
- Rumah produksi: editor memakai share untuk menaruh footage, dan server media membuat proxy untuk ditinjau klien.
- Rumah tangga: keluarga menyimpan film di satu server dan menontonnya lewat TV, HP, atau laptop tanpa menyalin file berkali-kali.
π Kesimpulan
Share SMB yang benar bukan sekadar "folder dibuka". Ia adalah kesepakatan tiga hal: protokol yang sama, identitas yang terdaftar, dan angka pemilik yang cocok dengan aplikasi pembacanya. Kalau ketiganya konsisten, file yang dikirim dari Windows langsung muncul di Jellyfin tanpa langkah tambahan.
Langkah berikutnya: buat satu user Samba untuk setiap anggota keluarga atau siswa, lalu uji hak aksesnya satu per satu β di situlah kamu akan benar-benar memahami beda antara "bisa login" dan "boleh menulis".
π Materi terkait
π Referensi
- Samba Team. smb.conf manual page. https://www.samba.org/samba/docs/current/man-html/smb.conf.5.html
- Samba Team. Setting up Samba as a Standalone Server. https://wiki.samba.org/index.php/Setting_up_Samba_as_a_Standalone_Server
- Jellyfin. Media Library documentation. https://jellyfin.org/docs/general/server/media/
- Microsoft. SMB protocol overview. https://learn.microsoft.com/en-us/windows-server/storage/file-server/file-server-smb-overview