Ubuntu – ติดตั้งและตั้งค่า samba

ครั้งนี้เราจะทำการติดตั้ง samba ซึ่งเป็นซอฟแวร์ open source อันนึง ที่เหมาะสำหรับใช้ในการทำ network drive เพื่อใช้สำหรับแชร์ไฟล์กันระหว่างเครื่องคอมพิวเตอร์ผ่านโปรโตคอลที่เรียกว่า smb โดยจะมีเครื่องหลักที่เราติดตั้ง samba เอาไว้จะเปรียบเสมือนเครื่องกลางที่ใช้เป็นพื้นที่สำหรับเก็บข้อมูล และในโฟลเดอร์ที่เก็บข้อมูลดังกล่าว เราสามารถกำหนด permission ให้เครื่องอื่นๆ สามารถเข้าถึงไฟล์(เขียน, อ่าน) โฟลเดอร์ดังกล่าวได้ในรูปแบบของ network drive ได้ และแม้เครื่องอื่นๆ จะติดตั้งระบบปฏิบัติการ(os) ต่างกัน เช่น Ubuntu, MacOS, Windows ก็สามารถ เข้าถึง network drive ดังกล่าวได้เหมือนกัน

ติดตั้ง samba
# อัพเดท repository ให้เป็นข้อมูลล่าสุด 
sudo apt update
sudo apt ugrade

# ติดตั้ง samba
sudo apt install samba

สร้างโฟลเดอร์ที่จะใช้สำหรับใช้เป็น network drive

ในที่นี้จะสร้างโฟลเดอร์ให้อยู่ที่ /home//<ชื่อโฟลเดอร์> โดยสามารถไปกำหนดเองได้ว่าต้องการจะให้โฟลเดอร์ตั้งอยู่ตำแหน่งไหน ซึ่งในที่นี้จะเป็น /home/mycomputer/share_files

# เข้าไปในโฟลเดอร์
cd /home/mycomputer/

# ทำการสร้างโฟลเดอร์ที่ต้องการจะแชร์ไฟล์
mkdir share_files

กำหนดสิทธิ์ในการเข้าถึงโฟลเดอร์ที่ต้องการจะแชร์

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

# กำหนดสิทธิ์ในการเข้าถึงข้อมูลในโฟลเดอร์ที่ชื่อ share_files
sudo chmod 775 share_files

ตั้งค่า(config)ให้ samba

ไฟล์ config ของ samba จะอยู่ที่ /etc/samba/smb.conf

  • แก้ไขตัวแปร WORKGROUP ซึ่งอยู่ในหัวข้อ [global]
    # ชื่อที่จะแสดงใน network drive
    WORKGROUP = share_files
    
  • เพิ่มเป็น section ใหม่โดยอาจจะใส่ไว้ตรงท้ายสุด หรือ ใช้วิธี uncomment บางตัวอย่างในไฟล์ config ที่มีอยู่เดิม ซึ่งเป็นการ config เพื่อจะระบุ permission ในส่วนของโฟลเดอร์ที่เราจะสร้างเป็น network drive
    [share_files]
        path = /home/mycomputer/share_files  # path สำหรับโฟลเดอร์ที่ต้องการจะแชร์ 
        writeable = yes
        guest ok = yes                       # อนุญาติให้ guest เข้าถึงโฟลเดอร์ 
        read only = no                       # จะกำหนดให้โฟลเดอร์นี้มี permission เป็น read only อย่างเดียว หรือสามารถเขียนหรือรันได้ด้วย
        create mask = 0755                   # ระบุว่าเมื่อสร้างไฟล์ขึ้นใหม่จะให้กำหนด permission อย่างไร
    

กำหนดชื่อ user ที่จะให้เข้าถึงการใช้งาน samba และกำหนดรหัสผ่าน
# กำหนดชื่อ user ที่จะให้เข้าถึงการใช้งาน samba และกำหนดรหัสผ่าน
sudo smbpasswd -a mycomputer

# จากนั้นบรรทัดต่อไปจะรอให้ใส่รหัสผ่านสำหรับผู้ใช้ที่ระบุไปข้างต้น เพื่อที่จะใช้เข้าถึง network drive อันนี้
# ใส่ password แล้ว enter

ทำการ restart service ของ samba

หลังจากเราทำการ config เพื่อตั้งค่าต่างๆ ของ samba เรียบร้อยแล้ว เราก็ต้องทำการ restart service เพื่ออัพเดทการตั้งค่าเหล่านั้น

# ทำการ restart service ของ samba<
sudo service smbd restart

ทดลองการเข้าใช้งาน samba ผ่าน network

เราจะทดสอบการเข้าใช้งาน folder ที่เรา config ผ่าน samba ไว้ โดยจะลองใช้งานจากอีกเครื่องที่เป็น ubuntu เหมือนกัน ไปที่โปรแกรม Files Manager แล้ว scroll ลงไปที่ล่างสุดของแถบเครื่องมือด้านซ้าย เลือก +Other Location

จากนั้นที่ด้านล่างสุดจะขึ้น Connect to Server มาให้กรอกชื่อ ip ในช่อง Enter server address ของเครื่องในเนตเวิร์ค ที่เราติดตั้ง samba และตั้งค่าไว้ ตัวอย่างเช่น เราต้องการจะเชื่อมต่อเครื่องในเนตเวิร์คที่ ip เช่น 192.168.1.xxx(เปลี่ยน xxx เป็นหมายเลข ip ของเครื่อง)

หลังจากกด connect แล้ว จะมีขึ้นมาให้ระบุชื่อ username, password ที่เราใช้ในการเชื่อต่อกับ samba ซึ่งตามที่เรากำหนดไว้ก่อนหน้านี้ จากนั้นเราจะเห็นโฟลเดอร์ดังกล่าว และสามารถเข้าถึงโฟลเดอร์ที่เราระบุไว้และแก้ไขหรือวางไฟล์ใหม่ลงไปในโฟลเดอร์นี้ได้

เมื่อทำมาถึงตรงนี้ถ้าเราต้องการเข้าถึง network drive ดังกล่าวจากเครื่องอื่นที่เป็น Ubuntu, Windows หรือ Linux อื่นๆ เราน่าจะสามารถใช้งานได้แล้ว แต่ถ้าต้องการให้ iPhone หรือ MacOS สามารถเข้าถึง network drive ดังกล่าวด้วย เราต้องการ config เพื่มอีกนิดนึง เพราะว่าเราจะเป็นต้อง config samba เพื่อให้รองรับ iOS/MacOS metadata(VFS extension) ด้วย

เปิดไฟล์ config ของ samba
# เปิดไฟล์ config ของ samba อีกครั้งหนึ่ง
sudo nano /etc/samba/smb.conf

ทำการ config samba เพิ่มเติมให้ iPhone/MacOS สามารถเข้าถึง samba ด้วย

ใน section [global] เพิ่มข้อมูล config เกี่ยวกับ VFS(virtual file system) จะเพิ่มไปช่วงไหนของ section [global] ก็ได้ตามชอบ โดยการเพิ่ม catia, fruit, streams_xattr ให้กับ vfs object เพื่ออนุญาติให้อุปกรณ์ต่างๆที่เป็น iPhone, macOS สามารถที่จะจัดการไฟล์โดยไม่ติดปัญหาและป้องกันข้อผิดพลาดที่จะเกิดขึ้นจากชื่อไฟล์ที่ในแต่ละระบบปฏิบัติการจะมีข้อกำหนดของชื่อไฟล์ที่แตกต่างกัน

[global]
    vfs objects = catia fruit streams_xattr
    fruit:aapl = yes
    fruit:nfs_aces = no

  • catia: ช่วยในการป้องกันข้อผิดพลาดเกี่ยวกับรูปแบบของชื่อไฟล์ ตัวอย่างเช่นในระบบปฏิบัติการ Windows อนุญาติให้ชื่อไฟล์สามารถใช้อักขระ( *, :, ?) แต่ถ้าบันทึกไฟล์เป็นชื่อไฟล์เดียวกันในระบบปฏิบัติการ macOS อาจจะทำให้เกิดปัญหาขึ้น
  • fruit: ช่วยปรับปรุงให้กรณ์ที่ใช้ iPhone, macOS เป็นเครื่อง client เพื่อเชื่อมต่อไปยัง samba ทำงานได้ราบรื่น ไม่มีข้อผิดพลาด
  • streams_xattr: เพื่อที่จะต้องการเก็บของมูล metadata จาก macOS ที่มีการเก็บข้อมูลไฟล์เพิ่มเติมจากแอพลิเคชัน Finder

ทำการ restart service ของ samba

หลังจากเราทำการ config เพื่อตั้งค่าต่างๆ ของ samba เรียบร้อยแล้ว เราก็ต้องทำการ restart service เพื่ออัพเดทการตั้งค่าเหล่านั้น

# ทำการ restart service ของ samba<
sudo service smbd restart

หลังจาก restart service เราก็น่าจะเข้าถึง network drive ของ samba ผ่าน iOS,MacOS ได้แล้ว