คำตอบสั้น ๆ: ตั้ง 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