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
ตัวอย่างการสร้างโฟลเดอร์ test-from-mac
ลองดูผลลัพธ์ที่ได้บนเซิร์ฟเวอร์
[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
หน้าจอให้ใส่ username, password
ทดลองสร้างโฟลเดอร์ test-from-win7
ลองดูผลลัพธ์ที่ได้บนเซิร์ฟเวอร์
[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
ตอนหน้าเรามาดูวิธีการคอนฟิกการแชร์ไฟล์กลาง ให้ใช้ร่วมกันหลายผู้ใช้ได้กัน
ข้อมูลอ้างอิง
- สร้างแชร์โฟลเดอร์กลางด้วย Samba บน CentOS 7
- Samba – opening windows to a wider world
- man smbclient
- man pdbedit