ติดตั้งและคอนฟิกเซิร์ฟเวอร์แชร์ไฟล์ด้วย Samba บน CentOS 7

Samba เป็นโปรแกรมหรือเซอร์วิสยอดนิยมอย่างหนึ่งที่สามารถนำมาติดตั้งบนลีนุกซ์ และคอนฟิกทำเป็นเซิร์ฟเวอร์แชร์ไฟล์ (File Sharing Server) ให้กับเครื่องอื่นๆ ได้ ไม่ว่าจะเป็น Windows, MAC OS X

ลองมาดูวิธีการติดตั้งและคอนฟิก Samba บน CentOS 7 เบื้องต้นกัน เพื่อให้ผู้ใช้งานจากเครื่องอื่น สามารถเรียกใช้ไฟล์ที่อยู่ใน home ของแต่ละคนบนเซิร์ฟเวอร์ได้

ในที่นี้จะแสดงวิธีการติดตั้ง คอนฟิกและแก้ไขปัญหาไปทีละขั้น เพื่อให้ผู้อ่านได้เข้าใจกระบวนการ เผื่อใช้เป็นแนวทางในการแก้ไขปัญหาได้

ใช้คำสั่ง yum เพื่อติดตั้งแพ็กเกจ samba (Server)

[root@cent7 ~]# yum install samba
...
Installed:
  samba.x86_64 0:4.1.12-23.el7_1

Dependency Installed:
  cups-libs.x86_64 1:1.6.3-17.el7_1.1
  libldb.x86_64 0:1.1.17-2.el7
  libtalloc.x86_64 0:2.1.1-1.el7
  libtdb.x86_64 0:1.3.0-1.el7
  libtevent.x86_64 0:0.9.21-3.el7
  libwbclient.x86_64 0:4.1.12-23.el7_1
  pytalloc.x86_64 0:2.1.1-1.el7
  samba-common.x86_64 0:4.1.12-23.el7_1
  samba-libs.x86_64 0:4.1.12-23.el7_1

Complete!

เพื่อความสะดวกในการทดสอบ แนะนำให้ติดตั้งแพ็กเกจ samba-client ซึ่งเป็นโปรแกรมฝั่งไคลเอนต์ (Client) ที่ร้นบนลีนุกซ์เซิร์ฟเวอร์ได้

[root@cent7 ~]# yum install samba-client
...
Installed:
  samba-client.x86_64 0:4.1.12-23.el7_1

Dependency Installed:
  libsmbclient.x86_64 0:4.1.12-23.el7_1

Complete!

คอนฟิกไฟล์หลักของ samba จะอยู่ที่ /etc/samba/smb.conf โดยดีฟอลต์จากการติดตั้งแพ็กเกจ samba จะแชร์ [homes] หรือ HOME ของผู้ใช้ (user) ทุกคนที่อยู่บนเซิร์ฟเวอร์

[root@cent7 ~]# vi /etc/samba/smb.conf
...
[homes]
    comment = Home Directories
    browseable = no
    writable = yes
;   valid users = %S
;   valid users = MYDOMAIN\%S
...

ใช้คำสั่ง systemctl start เพื่อรันเซอร์วิส smb

[root@cent7 ~]# systemctl start smb

ทดลองใช้คำสั่ง smbclient ซึ่งเป็นโปรแกรมไคลเอนต์ ทดสอบการเข้าแชร์ไฟล์เซิร์ฟเวอร์

ตัวอย่างการใช้คำสั่ง smbclient เพื่อทดลองเข้าแชร์ไฟล์ที่ชื่อ homes บนเซิร์ฟเวอร์ localhost (ตัวเครื่องเซิร์ฟเวอร์เอง) โดยใช้ชื่อผู้ใช้งาน alice

[alice@cent7 ~]$ smbclient '\\localhost\homes' -U alice
Enter alice's password:
session setup failed: NT_STATUS_LOGON_FAILURE

จากตัวอย่างข้างบน แม้เราพิมพ์รหัสผ่านของ alice ถูกต้อง ก็ไม่สามารถเข้าได้ ทั้งนี้เนื่องจากคอนฟิกดีฟอลต์ samba ไม่ได้ใช้ชื่อผู้ใช้ (username), รหัสผ่าน (password) ของระบบ (/etc/passwd, /etc/shadow)

แต่ samba จะเรียกใช้ user, password ของตัวเอง ดีฟอลต์จะเป็น tdbsam

[root@cent7 ~]# vi /etc/samba/smb.conf
...
# passdb backend = the backend used to store user information in. New
# installations should use either tdbsam or ldapsam. No additional configuration
# is required for tdbsam. The "smbpasswd" utility is available for backwards
# compatibility.
#
    security = user
    passdb backend = tdbsam
...

ต้องเพิ่มชื่อผู้ใช้ alice พร้อมตั้งรหัสใน tdbsam

ใช้คำสั่ง pdbedit -a เพื่อสร้างผู้ใช้

หมายเหตุ คำสั่งเดิมคือ smbpasswd แต่แนะนำให้ใช้คำสั่งใหม่ pdbedit ซึ่งสามารถแก้ไขค่าต่างๆ ได้มากกว่า

[root@cent7 ~]# pdbedit -a -u alice
new password:
retype new password:
Unix username:        alice
NT username:
Account Flags:        [U ]
User SID:             S-1-5-21-4076061653-516507370-1771364486-1002
Primary Group SID:    S-1-5-21-4076061653-516507370-1771364486-513
Full Name: alice
Home Directory:       \\cent7\alice
HomeDir Drive:
Logon Script:
Profile Path:         \\cent7\alice\profile
Domain:               CENT7
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time:          Wed, 06 Feb 2036 22:06:39 ICT
Kickoff time:         Wed, 06 Feb 2036 22:06:39 ICT
Password last set:    Tue, 18 Aug 2015 22:05:42 ICT
Password can change:  Tue, 18 Aug 2015 22:05:42 ICT
Password must change: never
Last bad password  : 0
Bad password count : 0
Logon hours        : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

ใช้คำสั่ง pdbedit -L เพื่อดูรายชื่อผู้ใช้ใน tdbsam

[root@cent7 ~]# pdbedit -L
alice:1000:alice

ลองเข้าด้วย smbclient อีกครั้ง

[alice@cent7 ~]$ smbclient '\\localhost\homes' -U alice
Enter alice's password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.12]
smb: \>

ตอนนี้เราสามารถล็อกอินเข้าแชร์ไฟล์เซิร์ฟเวอร์ได้แล้ว เข้าโหมด smb: \>

แต่ถ้าลองใช้คำสั่ง dir เพื่อแสดงชื่อไฟล์ กลับฟ้อง NT_STATUS_ACCESS_DENIED

smb: \> dir
NT_STATUS_ACCESS_DENIED listing \*

หมายเหตุ ใช้คำสั่ง quit เพื่อออกจากโหมด smb: \>

ปัญหานี้เกิดจาก ดีฟอลต์การติดตั้ง CentOS 7 จะมีการเปิดการใช้งาน SELinux เพื่อเพิ่มความปลอดภัยให้กับระบบ

คำอธิบายเกี่ยวกับ SELinux ในไฟล์ /etc/samba/smb.conf

[root@cent7 ~]# vi /etc/samba/smb.conf
...
# Turn the samba_enable_home_dirs Boolean on if you want to share home
# directories via Samba. Run the following command as the root user to turn this
# Boolean on:
# setsebool -P samba_enable_home_dirs on
...

ดังนั้นถ้าต้องการให้ samba เปิดให้ผู้ใช้งานเรียกแชร์ไฟล์ใน home ของผู้ใช้แต่ละคนได้ ต้องใช้คำสั่ง setsebool เพื่อแก้ไขค่าคอนฟิก SELinux

[root@cent7 ~]# setsebool -P samba_enable_home_dirs on

ลองใช้ smbclient เข้าแชร์ไฟล์ แล้วใช้คำสั่ง dir เพื่อดูไฟล์อีกครั้ง

[alice@cent7 ~]$ smbclient '\\localhost\homes' -U alice
Enter alice's password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.12]
smb: \> dir
  .                           D       0 Tue Aug 18 21:10:59 2015
  ..                          D       0 Thu Jul 23 07:49:18 2015
  .bash_logout                H      18 Fri Mar  6 05:06:48 2015
  .bash_profile               H     193 Fri Mar  6 05:06:48 2015
  .bashrc                     H     231 Fri Mar  6 05:06:48 2015
  .pki                       DH       0 Fri Jul 24 14:43:27 2015
  .lesshst                    H      65 Wed Aug 12 17:10:07 2015
  .viminfo                    H    6333 Mon Aug 17 19:04:34 2015
  .bash_history               H     117 Tue Aug 18 21:10:59 2015
            35582 blocks of size 1048576. 33972 blocks available

ทดลองสร้างไดเรกทอรีด้วยคำสั่ง mkdir ใน smb: \>

smb: \> mkdir test-folder
smb: \> dir
  .                           D       0 Tue Aug 18 21:10:59 2015
  ..                          D       0 Thu Jul 23 07:49:18 2015
  .bash_logout                H      18 Fri Mar  6 05:06:48 2015
  .bash_profile               H     193 Fri Mar  6 05:06:48 2015
  .bashrc                     H     231 Fri Mar  6 05:06:48 2015
  .pki                       DH       0 Fri Jul 24 14:43:27 2015
  .lesshst                    H      65 Wed Aug 12 17:10:07 2015
  .viminfo                    H    6333 Mon Aug 17 19:04:34 2015
  .bash_history               H     117 Tue Aug 18 21:10:59 2015
  test-folder                 D       0 Tue Aug 18 21:12:59 2015

35582 blocks of size 1048576. 33972 blocks available
smb: \> quit

ไดเรกทอรีก็จะถูกสร้างใน home ของผู้ใช้

[alice@cent7 ~]$ ls -l
total 0
drwxr-xr-x. 2 alice alice 6 Aug 18 21:12 test-folder

แก้ไข firewall ของเซิร์ฟเวอร์แชร์ไฟล์

ถ้าต้องการให้เครื่องอื่นๆ สามารถเข้ามาใช้ แชร์ไฟล์เซิร์ฟเวอร์ได้ด้วย ก่อนอื่นก็ต้องใช้คำสั่ง firewall-cmd เพื่ออนุญาตการเข้าใช้งานเซอร์วิส samba

ตัวอย่างการใช้คำสั่ง firewall-cmd เพื่อเพิ่มการอนุญาตให้เครื่องอื่นเข้ามาใช้เซอร์วิส samba ได้

[root@cent7 ~]# firewall-cmd --zone=public --add-service=samba
success

การเข้าแชร์ไฟล์เซิร์ฟเวอร์จาก Mac OS X

บน Mac OS X ต้องกดปุ่ม [command]+[k] ใน Finder เพื่อเข้าสู่การแชร์ไฟล์

ตัวอย่างการเข้าแชร์ไฟล์จากเครื่อง Mac OS X

ระบุ Server Address ในรูปแบบ smb://<server-ip>/homes
s01-mac-os-x-connect-to-server

ใส่ Name, Password ให้ถูกต้อง
s02-mac-os-x-enter-name-password-for-the-server

ตัวอย่างการสร้างโฟลเดอร์ test-from-mac
s03-mac-os-x-shared-drive

ลองดูผลลัพธ์ที่ได้บนเซิร์ฟเวอร์

[alice@cent7 ~]$ ls -l
total 0
drwxr-xr-x. 2 alice alice 6 Aug 18 21:12 test-folder
drwxr-xr-x. 2 alice alice 6 Aug 18 21:16 test-from-mac

การเข้าแชร์ไฟล์เซิร์ฟเวอร์จาก Windows

ส่วนใน Windows ต้องกดปุ่ม Map Network Drive ใน My Computer

เลือกชื่อ Drive แล้วระบุ Folder: ในรูปแบบ \\<server-ip>\homes แล้วกดปุ่ม Finish
s04-win7-map-network-drive

หน้าจอให้ใส่ username, password
s05-win7-enter-network-password

ทดลองสร้างโฟลเดอร์ test-from-win7
s06-win7-new-folder

ลองดูผลลัพธ์ที่ได้บนเซิร์ฟเวอร์

[alice@cent7 ~]$ ls -l
total 0
drwxr-xr-x. 2 alice alice 6 Aug 18 21:12 test-folder
drwxr-xr-x. 2 alice alice 6 Aug 18 21:16 test-from-mac
drwxr-xr-x. 2 alice alice 6 Aug 18 21:23 test-from-win7

ตอนหน้าเรามาดูวิธีการคอนฟิกการแชร์ไฟล์กลาง ให้ใช้ร่วมกันหลายผู้ใช้ได้กัน

ข้อมูลอ้างอิง

Leave a Reply

Your email address will not be published.