ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

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

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

องค์กรจำนวนมากใช้เครื่องพนักงานเป็น 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/

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security