ตั้ง Samba File Server แชร์ไฟล์บน VPS

ตั้ง Samba File Server แชร์ไฟล์บน VPS

กรกฎาคม 2026 · อ่าน 7 นาที

Samba คือ implementation โอเพ่นซอร์สของ SMB/CIFS protocol ที่ใช้แชร์ไฟล์ระหว่าง Windows, macOS, และ Linux ตั้งแต่ปี 1992 ด้วย Samba บน VPS Linux คุณสามารถสร้าง network file share ที่เข้าได้ทั้งจากเครื่อง Windows โดยใช้ File Explorer เสมือนว่าเป็น network drive ปกติ และจากเครื่อง Linux ผ่าน mount command ทำให้ง่ายต่อการทำงานเป็นทีม ส่งไฟล์ขนาดใหญ่ หรือเก็บเอกสารส่วนกลาง บทความนี้จะอธิบายวิธีติดตั้ง Samba ตั้งค่า user account, workgroup, folder share, และ permission อย่างปลอดภัย

ติดตั้ง Samba บน Ubuntu

sudo apt update
sudo apt install samba samba-client smbclient cifs-utils -y

# เปิดใช้งาน Samba service
sudo systemctl enable --now smbd nmbd
sudo systemctl status smbd

สร้าง User สำหรับ Samba Share

Samba ต้องใช้ Linux user account ในการ authenticate กำหนด user access ดังนั้นเราต้องสร้าง Linux user ก่อน แล้วเพิ่มในฐานข้อมูล Samba

# สร้าง Linux user (หากยังไม่มี)
sudo useradd -m -s /usr/sbin/nologin fileuser
# ตั้ง password
sudo passwd fileuser

# เพิ่ม user ลงใน Samba database
sudo smbpasswd -a fileuser
# พบกับคำถาม "New SMB password:" ให้ตั้ง password ใหม่สำหรับ Samba (อาจเหมือนหรือต่างจาก Linux password ได้)
Tip: ถ้าต้องการให้ user ไม่สามารถ login ผ่าน SSH ให้ใช้ shell /usr/sbin/nologin ดังตัวอย่าง ทำให้ secure มากขึ้น user นั้นสามารถแชร์ไฟล์ผ่าน Samba ได้แต่ไม่สามารถเข้า shell ของ VPS ได้

ตั้งค่า Samba Configuration (smb.conf)

ไฟล์ config หลักของ Samba คือ /etc/samba/smb.conf เปิดด้วย nano แล้วแก้ไขตัวแปร global section และเพิ่ม share section

sudo nano /etc/samba/smb.conf

หา section [global] แล้วแก้ไขให้มีค่าต่อไปนี้ (ป้องกันการเข้าถึงจาก outside):

[global]
   workgroup = WORKGROUP
   server string = VPS File Server
   netbios name = VPSFILER
   security = user
   map to guest = never

   # ป้องกัน anonymous login
   guest ok = no

   # Log
   log file = /var/log/samba/log.%m
   max log size = 5000

   # SMB protocol (ใช้ 3.0+ เพื่อ security)
   min protocol = SMB2
   max protocol = SMB3

หากต้องการสร้าง share folder เฉพาะผู้ใช้งาน เพิ่ม section นี้ท้ายไฟล์ (แทนที่ /shared/data ด้วยเส้นทางจริง):

[Shared]
   path = /shared/data
   valid users = fileuser
   read only = no
   browseable = yes
   comment = Shared folder for team
   create mask = 0755
   directory mask = 0755

สร้างโฟลเดอร์จริงแล้วตั้งค่า permission:

sudo mkdir -p /shared/data
sudo chown fileuser:fileuser /shared/data
sudo chmod 755 /shared/data

ตรวจสอบและ Reload Config

ก่อน restart Samba ต้องตรวจสอบว่า config ไม่มี error ด้วยคำสั่ง testparm

# ตรวจ syntax ของ smb.conf
sudo testparm

# ถ้าไม่มี error ให้ reload Samba
sudo systemctl reload smbd nmbd

เปิด Firewall Port

Samba ใช้ port 139 (NetBIOS) และ 445 (SMB) ต้องเปิด firewall ให้ client เข้าได้

# ถ้าใช้ ufw
sudo ufw allow 139/tcp
sudo ufw allow 445/tcp

# ถ้าใช้ iptables ตรงนี้เป็นแบบ append rule (คงค่า existing rules)
sudo iptables -A INPUT -p tcp --dport 139 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 445 -j ACCEPT

ตรวจสอบว่า Samba ทำงานถูกต้อง

# ตรวจ status ของ Samba services
sudo systemctl status smbd
sudo systemctl status nmbd

# ดูรายชื่อ share ที่ server มีอยู่
sudo smbclient -L localhost

# ดูรายชื่อ user ที่ registered ใน Samba
sudo pdbedit -L

# ลอง access share ด้วย user account
smbclient //localhost/Shared -U fileuser%PASSWORD
Tip: ถ้า testparm หรือ smbclient ขึ้น error ให้ดู /var/log/samba/ ไฟล์ log มี prefix คือชื่อเครื่อง client ที่เข้า ช่วยแก้ปัญหา connection issues ได้อย่างมาก

แก้ปัญหาที่พบบ่อย

Error: "Bad password for user"

Password ใน Samba database ไม่ตรงกับที่พิมพ์ หรือเคย change password ใน Linux แต่ลืมอัปเดตใน Samba ให้ reset password ใหม่:

sudo smbpasswd -a fileuser
# พิมพ์ password ใหม่ 2 ครั้ง

Error: "Permission denied" เมื่อเข้า share

เส้นทาง folder ใน config หรือ ownership/permission ของ folder ไม่ถูกต้อง ตรวจสอบ:

ls -ld /shared/data
# ควรเห็น drwxr-xr-x fileuser fileuser
# ถ้าไม่ใช่ให้แก้ไข:
sudo chown fileuser:fileuser /shared/data
sudo chmod 755 /shared/data

Error: "Share not found" หรือ share ไม่โชว์ใน File Explorer

Config อาจมี syntax error หรือ service ยังไม่ reload ให้ testparm แล้ว reload:

sudo testparm 2>&1 | grep -i error
sudo systemctl reload smbd nmbd

# รอสักครู่แล้วลอง query share ใหม่
sleep 2
smbclient -L localhost

Error: "Connection refused" จากเครื่อง Windows

Port 445 ถูก firewall บล็อก หรือ Samba service ไม่เปิด ให้ตรวจสอบ:

sudo systemctl is-active smbd
sudo netstat -tulnp | grep -E '(139|445)'
# ควรเห็น :139 และ :445 listen อยู่

Error: "The username or password is incorrect"

ตรวจว่า user มี status enable ใน Samba database:

sudo pdbedit -L fileuser
# ถ้าเห็น [U] แสดงว่า enabled หากเห็น [DU] ให้เปิด enable ใหม่:
sudo smbpasswd -e fileuser

คำถามที่พบบ่อย

ต้องใช้ domain controller ไหม?

ไม่จำเป็น สำหรับ workgroup environment เช่นบริษัทเล็กๆ หรือสำนักงาน ใช้ security = user (ตั้งในตัวอย่าง) ก็เพียงพอ Samba จะ authenticate โดยดูจาก user/password ใน pdbedit database หรือ /etc/passwd ถ้าต้องการ Active Directory integration ต้องตั้งเพิ่มเติมอีก

Samba ทำงานได้แบบ anonymous (ไม่ต้อง login) ไหม?

ได้ แต่ไม่แนะนำในการ production เพราะไม่มี access control ถ้าต้องการอยากให้ anonymous access ให้เพิ่มใน config:

[Share_Public]
   path = /shared/public
   guest ok = yes
   read only = yes
   browseable = yes

และรู้ว่ามีส่วน "ไม่ปลอดภัย" เสมอ ใช้เฉพาะ read-only public files ที่ไม่ห้ามใครเข้า

ปลอดภัยไหมในการใช้ Samba บน VPS หน้าเน็ต?

SMB/CIFS ถูกออกแบบมาสำหรับ LAN ไม่ใช่ internet ถ้าต้องให้ user ที่อยู่นอกสำนัก access ไฟล์ต้อง tunnel ผ่าน VPN หรือ SSH เช่น sshfs หรือ WireGuard ที่ดีกว่า วิธีอื่น คือลดการเปิด port 445 เฉพาะ IP ที่เชื่อถือได้ ไม่ใช่ open ให้ทั้ง world