แชร์ไฟล์จาก Linux ให้เครื่อง Windows ด้วย Samba

ตั้ง Samba บน Linux Server ให้เครื่อง Windows เข้าถึงโฟลเดอร์ที่แชร์ได้ พร้อมการยืนยันตัวตนรายผู้ใช้และสิทธิ์อ่านเขียนแยกตามกลุ่ม

โดย ทีมงาน THAI DATA CLOUD อัปเดต อ่าน 7 นาที เข้าชม 6 ครั้ง

แชร์FacebookXLINELinkedIn
Windows — แชร์ไฟล์จาก Linux ให้เครื่อง Windows ด้วย Samba
แชร์ไฟล์จาก Linux ให้เครื่อง Windows ด้วย Samba

คำตอบสั้น ๆ: ตั้ง Samba บน Linux Server ให้เครื่อง Windows เข้าถึงโฟลเดอร์ที่แชร์ได้ พร้อมการยืนยันตัวตนรายผู้ใช้และสิทธิ์อ่านเขียนแยกตามกลุ่ม

คู่มือนี้อธิบาย Windows ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย

องค์กรจำนวนมากใช้เครื่องพนักงานเป็น Windows แต่ต้องการเก็บไฟล์ส่วนกลางไว้บนเซิร์ฟเวอร์ Linux ที่ดูแลง่ายกว่าและถูกกว่า Samba คือสะพานที่ทำให้ Windows มองเห็นโฟลเดอร์บน Linux เป็นไดรฟ์เครือข่ายได้ตามปกติ

คู่มือนี้ตั้ง Samba สำหรับใช้งานในองค์กรขนาดเล็กถึงกลาง โดยยืนยันตัวตนรายผู้ใช้ ไม่ใช่การเปิดให้ทุกคนเข้าได้แบบไม่ต้องใส่รหัส ซึ่งเป็นการตั้งค่าที่ไม่ควรใช้กับข้อมูลจริง

สิ่งที่ต้องเตรียม

  • Linux Server และสิทธิ์ sudo
  • เครื่อง Windows ที่อยู่ในเครือข่ายเดียวกันหรือเชื่อมผ่าน VPN
  • รายชื่อผู้ใช้และสิทธิ์ที่ต้องการให้แต่ละคน
# Ubuntu / Debian
sudo apt install -y samba

# AlmaLinux / Rocky Linux
sudo dnf install -y samba samba-client
sudo systemctl enable --now smb nmb

ขั้นตอนที่ 1: เตรียมโฟลเดอร์และกลุ่ม

sudo groupadd smbusers
sudo mkdir -p /srv/samba/shared /srv/samba/finance
sudo chgrp smbusers /srv/samba/shared
sudo chmod 2770 /srv/samba/shared

สำหรับโฟลเดอร์ที่ให้เฉพาะบางแผนก

sudo groupadd finance
sudo chgrp finance /srv/samba/finance
sudo chmod 2770 /srv/samba/finance

สิทธิ์ 2770 คือให้เจ้าของและกลุ่มเข้าถึงได้เต็ม คนอื่นไม่เห็นอะไรเลย และบิต setgid ทำให้ไฟล์ใหม่สืบทอดกลุ่มเดิม ซึ่งจำเป็นมากสำหรับโฟลเดอร์ที่หลายคนใช้ร่วมกัน

ขั้นตอนที่ 2: สร้างผู้ใช้

Samba เก็บรหัสผ่านของตัวเองแยกจากรหัสผ่านของ Linux ต้องสร้างทั้งสองอย่าง

# ผู้ใช้ระบบที่เข้า Shell ไม่ได้
sudo useradd -M -s /usr/sbin/nologin -G smbusers,finance somchai

# ตั้งรหัสผ่านฝั่ง Samba
sudo smbpasswd -a somchai
sudo smbpasswd -e somchai

ตรวจรายชื่อผู้ใช้ Samba ทั้งหมด

sudo pdbedit -L -v | grep -E 'Unix username|Account Flags'

ขั้นตอนที่ 3: ตั้งค่า Samba

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
sudo nano /etc/samba/smb.conf
[global]
   workgroup = WORKGROUP
   server string = TDC File Server
   security = user
   map to guest = never

   # บังคับใช้ SMB3 เท่านั้น SMB1 มีช่องโหว่ร้ายแรงและถูกปิดใน Windows รุ่นใหม่
   server min protocol = SMB3
   client min protocol = SMB3

   # จำกัดให้เข้าได้เฉพาะวงภายใน
   hosts allow = 10.0.0.0/24 127.0.0.1
   hosts deny = 0.0.0.0/0
   bind interfaces only = yes
   interfaces = lo eth0

   log file = /var/log/samba/%m.log
   max log size = 1000
   logging = file

[shared]
   path = /srv/samba/shared
   comment = ไฟล์ส่วนกลาง
   browseable = yes
   read only = no
   valid users = @smbusers
   create mask = 0660
   directory mask = 2770
   force group = smbusers

[finance]
   path = /srv/samba/finance
   comment = เอกสารการเงิน
   browseable = no
   read only = no
   valid users = @finance
   create mask = 0660
   directory mask = 2770
   force group = finance

สังเกตว่า browseable = no ของโฟลเดอร์การเงินทำให้คนที่ไม่มีสิทธิ์ไม่เห็นแม้แต่ชื่อโฟลเดอร์ ซึ่งดีกว่าการให้เห็นแล้วเข้าไม่ได้

ตรวจไวยากรณ์ก่อนเสมอ

testparm
sudo systemctl restart smbd nmbd

ขั้นตอนที่ 4: เปิด Firewall

# Ubuntu
sudo ufw allow from 10.0.0.0/24 to any app Samba

# AlmaLinux / Rocky
sudo firewall-cmd --permanent --add-service=samba
sudo firewall-cmd --reload

ขั้นตอนที่ 5: ทดสอบจากฝั่ง Linux ก่อน

smbclient -L //localhost -U somchai
smbclient //localhost/shared -U somchai

ในหน้าต่าง smbclient ลองคำสั่ง ls, put และ get เพื่อยืนยันว่าอ่านเขียนได้จริง

ขั้นตอนที่ 6: เชื่อมต่อจาก Windows

ที่เครื่อง Windows เปิด File Explorer แล้วพิมพ์ในแถบที่อยู่

\\10.0.0.9\shared

ใส่ชื่อผู้ใช้และรหัสผ่านที่ตั้งด้วย smbpasswd หากต้องการให้เป็นไดรฟ์ถาวร คลิกขวาที่ This PC เลือก Map network drive หรือใช้คำสั่งใน PowerShell

net use Z: \\10.0.0.9\shared /user:somchai /persistent:yes

ตรวจว่าเชื่อมต่ออยู่

net use

ขั้นตอนที่ 7: ดูว่าใครเชื่อมต่ออยู่

sudo smbstatus
sudo smbstatus --shares
sudo smbstatus --locks

คำสั่งสุดท้ายมีประโยชน์มากเมื่อมีคนแจ้งว่าแก้ไฟล์ไม่ได้เพราะมีคนอื่นเปิดค้างไว้

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

Windows ขึ้น The specified network name is no longer available

มักเป็นเรื่องโพรโทคอล ตรวจว่าตั้ง server min protocol = SMB3 แล้วเครื่อง Windows รุ่นเก่ามากอาจต่อไม่ได้ ในกรณีนั้นควรอัปเดต Windows แทนการลดระดับโพรโทคอลลง เพราะ SMB1 มีช่องโหว่ที่ถูกใช้โจมตีในวงกว้าง

ใส่รหัสผ่านถูกแต่เข้าไม่ได้

ตรวจว่าเปิดใช้งานบัญชีแล้วด้วย sudo smbpasswd -e ชื่อผู้ใช้ และดู Log ของผู้ใช้นั้นที่ /var/log/samba/ ซึ่งจะบอกสาเหตุชัดเจน

เข้าได้แต่เขียนไม่ได้

สิทธิ์ระดับไฟล์ของ Linux เป็นตัวตัดสินสุดท้ายเสมอ แม้ Samba จะประกาศ read only = no ตรวจด้วย ls -ld /srv/samba/shared ว่าผู้ใช้อยู่ในกลุ่มที่เขียนได้จริง และตรวจว่า force group ตั้งไว้ถูกต้อง

Windows จำรหัสผ่านเก่าไว้

ล้างการเชื่อมต่อเดิมด้วย net use * /delete แล้วเชื่อมต่อใหม่ หรือลบข้อมูลที่เก็บไว้ใน Credential Manager ของ Windows

ชื่อไฟล์ภาษาไทยเพี้ยน

ตรวจว่าใน [global] ไม่ได้ตั้ง unix charset ผิด ค่าเริ่มต้น UTF-8 ถูกต้องอยู่แล้วสำหรับระบบปัจจุบัน

ต้องการวางระบบไฟล์ส่วนกลางสำหรับองค์กร ติดต่อ THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/

อ่านเพิ่มเติมเกี่ยวกับ Windows

แชร์FacebookXLINELinkedIn

มีคำถามเรื่องบริการ? ติดต่อทีมงาน