SAMBA Server บนระบบปฏิบัติการลีนุกซ์
จาก Research 2549, สารานุกรมฟรี
นนร.ราชฤทธานนท์ นุชประยูร ตอน ทส. เลขที่ ๑๘
กลับหน้าบทความ-สาระที่มีประโยชน์
สารบัญ |
บทคัดย่อ
จุดเด่นข้อหนึ่งของระบบปฏิบัติการลีนุกซ์
- ปัจจุบันการติดต่อสื่อสารในโลกของเราได้พัฒนาขึ้นอย่างรวดเร็ว ระบบLAN ได้เข้ามาเป็นส่วนสำคัญในการติดต่อสื่อสาร การทำงานตลอดจนการประสานงานของระบบในด้านต่าง เช่น ระบบติดต่อสื่อสาร ระบบข้อมูลสารสนเทศ ข้อมูลต่างๆด้านการศึกษา ความบันเทิง ความรู้ ข่าวสาร ตลอดจนข้อมูลของบริษัทย์ที่จำเป็นในการบริหารเป็นต้น ดังนั้นจึงเกิดความจำเป็นในการจัดหาระบบต่างๆเพื่อจัดใช้ในองค์กรเพื่อความสะดวกสบายในการใช้งานโดยระบบปฏิบัติการนั้นก็มีมากมายหลายชนิดให้เราเลือกใช้แตกต่างกันไปตามปัจจัยต่างๆ เช่นที่ได้รับความนิยมในปัจจุบันคือ ระบบปฏิบัติการลีนุกซ์
ด้วยข้อดีในด้านต่างๆเช่น เป็นลักษณะที่เรียกว่าซอฟต์แวร์โอเพ่นซอร์ส ที่ผู้ใช้สามารถเข้ามาพัฒนาได้โดยไม่เสียค่าใช้จ่ายอะไร เป็นโปรแกรมที่ฟรี มีความยืดหยุ่นสูง สามารถปรับค่าต่างๆได้ตามจุดประสงค์ของงานได้ง่าย จากข้อดีข้างต้นจะเห็นได้ว่า ลีนุกซ์ เป็นอีกหนึ่งทางเลือกของนักจัดการที่มีวสัยทัศน์ในปัจจบัน
- หลายคนที่ได้มีโอกาสสัมผัสต้องยอมรับว่า ลีนุกซ์เป็นระบบปฏิบัติการที่มีความยืดหยุ่นสูง ที่สามารถดัดแปลงให้มีคุณสมบัติเป็นไปได้ตามที่ผู้ใช้ต้องการ แม้กระทั่งการนำลีนุกซ์มาจำลองให้ทำงานทดแทนหน้าที่ของระบบปฏิบัติการอื่น ๆ ในบางหน้าที่ก็มีความเป็นไปได้ เกิดขึ้นได้ แล้วสามารถทำได้ดีมากเสียด้วย
- และในบทความที่ผู้เขียนจะเสนอต่อไปทั้งหมดนี้คือ การผสมผสานที่ลงตัวระหว่าง SAMBA Server บนระบบปฏิบัติการลีนุกซ์ ซึ่งเป็นซอฟต์แวร์โอเพ่นซอร์ส กับเครื่องลูกข่ายที่เป็นซอฟต์แวร์ค่ายไมโครซอฟท์ โดยสามารถดึงจุดเด่นของSAMBAมาใช้งานได้อย่างสมบูรณ์ครับ
บทนำ
Samba คืออะไร?
- Samba คืออะไร บางคนอาจจะรู้จักในชื่อของ service smb หรือชื่อของโปรแกรม smbd ซึ่งก็หมายถึงระบบเดียวกัน นั่นก็คือ ระบบที่ทำงานอยู่บนเครื่อง Linux แล้วทำให้มันเสมือนเป็นเครื่อง Windows NT ทำไมเราจะต้องทำให้เครื่อง Linux เป็นเสมือนเครื่อง Windows NT ล่ะ ก็เพราะว่าระบบ Network ส่วนใหญ่แล้วมีเครื่องลูกข่ายเป็น Microsoft Windows และเรามักจะมีการ share ทรัพยากรกัน เช่น printer, harddisk และอื่นๆ หากมีเครื่อง Linux เพิ่มเข้ามาในระบบ แต่ไม่สามารถใช้ หรือ ให้ใช้ทรัพยากรต่างๆได้ ก็เท่ากับว่า เราไม่ได้ใช้ประโยชน์จากมันอย่างเต็มที่
Samba เป็นซอฟต์แวร์ที่ช่วยให้สามารถแชร์ไฟล์และเครื่องพิมพ์บนลินุกซ์ให้กับระบบปฏิบัติการวินโดวส์ 95, 98, 2000, NT รวมทั้ง
smbclient อื่น เช่น linux, unix อื่นๆ ได้ การทำงานของ Samba ประกอบไปด้วยส่วนประกอบหลักๆ ดังนี้
- smbd เป็น daemon ที่ช่วยในการแชร์ไฟล์และเครื่องพิมพ์ให้กับ smbclient ต่างๆ โดยมีไฟล์ configuration ที่สำคัญคือ /etc/samba/smb.conf ซึ่งทำหน้าที่ควบคุมการทำงานของ Smbd
- nmbd รับผิดชอบกระบวนการที่เกี่ยวข้องกับ name resolution และ browsing service
- smbclient เป็นโปรแกรมที่ทำหน้าที่เชื่อมต่อไปยัง Samba server หรือ Microsoft Windows ที่ได้แชร์ไฟล์ไว้ โดยจะมีลักษณะ
การใช้งานเหมือนกับคำสั่ง ftp ทั่วไป (interactive program)
- smbmount ใช้สำหรับ mount ไปยัง shared directory
- testparm เป็นโปรแกรมที่ใช้ตรวจสอบ configuration จากไฟล์ /etc/samba/smb.conf ว่าถูกต้องหรือไม่
- smbstatus ใช้สำหรับแสดง status ของ Smbd Server
- smbd เป็น daemon ที่ช่วยในการแชร์ไฟล์และเครื่องพิมพ์ให้กับ smbclient ต่างๆ โดยมีไฟล์ configuration ที่สำคัญคือ /etc/samba/smb.conf ซึ่งทำหน้าที่ควบคุมการทำงานของ Smbd

รูปแสดงรูปแบบทั่วไปในการใช้งาน Samba server
ประวัติความเป็นมา/ทฤษฏีพื้นฐานที่เกี่ยวข้อง
Primary Domain Controller(PDC)
- ตัวอย่างที่เห็นได้ชัดเจนและมีความนิยมนำเอาลีนุกซ์ไปใช้ในลักษณะดังกล่าวนี้ก็คือ การจำลองลีนุกซ์เป็น Primary Domain Controller หรือที่เรียกสั้น ๆ ว่า PDC เพื่อใช้งานทดแทนเครื่องเซิร์ฟเวอร์วินโดวส์ในระบบเครือข่ายของวินโดวส์ที่เรียกกันว่า Microsoft Networks โดยเซิร์ฟเวอร์ชนิดนี้จะทำหน้าที่สำคัญในการตรวจสอบรายชื่อผู้ใช้งานระบบเครือข่าย (User Validation) ซึ่งทำให้ผู้ใช้งานเครือข่ายจะต้องทำการล๊อกอินเข้าสู่ระบบเครือข่ายเสียก่อนจึงจะสามารถใช้งานทรัพยากรต่าง ๆ ได้ เช่น เครื่องพิมพ์ หรือเนื้อที่ดิสก์บนเซิร์ฟเวอร์ เป็นต้น
- นอกจากการที่ระบบเครือข่ายของเรามีเซิร์ฟเวอร์ PDC นี้คอยควบคุมการเข้ามาใช้งานของผู้ใช้จะช่วยกำหนดสิทธิในการเข้าถึงทรัพยากรในเครือข่ายได้แล้ว ยังเป็นการเก็บรักษาข้อมูลส่วนตัว (User Profile) ของผู้ใช้เหล่านี้ให้อยู่รวมกันที่ศูนย์กลางคือที่เครื่องเซิร์ฟเวอร์ PDC นี้อีกด้วย จึงทำให้สะดวกต่อการบริหารจัดการมากยิ่งขึ้น
- และในการทำPDCเพื่อใช้งานทดแทนเครื่องเซิร์ฟเวอร์วินโดวส์ในระบบเครือข่ายนั้นเราสามารถสร้างได้โดยนำระบบปฏิบัติการลีนุกซ์ทำการติดตั้งระบบหรือเซอร์วิสที่เรียกว่าSAMBAโดยตัวเซอร์วิสนั้นจะที่ทำงานอยู่บนเครื่อง Linux แล้วทำให้มันเสมือนเป็นเครื่อง Windows NT และเราสามารถที่จะจัดการ share ทรัพยากรกัน เช่น printer, harddisk และอื่นๆ อีกทั้งยังสามารถจัดการด้านDOMAINของUSERได้เพื่อให้เกิดความปลอดภัยของข้อมูลมากยิ่งขึ้
- จากที่ได้กล่าวไปถึงทฤษฏีพื้นฐานคล้าวๆเกี่ยวกับSAMBAแล้วนั้นคิดว่าผู้อ่านคงเข้าใจหลักการของSAMBAและต่อไปจะขอเสนอในการติดตั้งและปรับแต่งค่าเพื่อใช้งานต่อไป
การติดตั้งโปรแกรม
- ในส่วนนี้จะขออธิบายเกี่ยวกับการติดตั้งโปรแกรม Samba
โดยปกติแล้วโปรแกรม Samba นี้จะมีให้เลือกตั้งแต่ตอนติดตั้งระบบครั้งแรกเลย แต่ถ้าหากใครไม่ได้เลือกไว้ตั้งแต่ทีแรก ก็สามารถติดตั้งเพิ่มทีหลังได้ โดยเลือก package ที่ชื่อ samba-x.y.z-? โดย x.y.z หมายถึงตัวเลขเวอร์ชัน และ ? หมายถึงส่วนเพิ่มเติมซึ่งอาจจะเป็นอะไรก็ได้ ขึ้นกับว่าเป็น package ของบริษัทไหน โดยที่ผู้เสนอได้หยิบตัวversionของ Mandrake มาให้ชมกัน Mandrake จะมีคำว่า mdk อยู่ด้วย การติดตั้งนั้น สามารถทำได้หลายวิธี ดังนี้
- เรียกใช้ gnome-rpm สำหรับ GUI ของ GNOME
- เรียกใช้ kpackage สำหรับ GUI ของ KDE
- เรียกใช้ rpmdrake สำหรับ GUI แบบใดก็แล้วแต่ในระบบของ Mandrake
- เรียกใช้ rpm สำหรับ text mode ในระบบของ RedHat, Mandrake และอื่นๆที่ใช้ .rpm ไฟล์โดยสั่งด้วยคำสั่ง rpm –i ไฟล์.rpm
- เรียกใช้ gnome-rpm สำหรับ GUI ของ GNOME
สำหรับ Mandrake 8.1 นั้นไฟล์ต่างๆที่จำเป็นจะอยู่ในแผ่นแรก ใน directory /Mandrake/RPMS ซึ่งเราจำเป็นต้องติดตั้ง package อื่นร่วมด้วยคือ
samba-common-x.y.z-?.rpm และ samba-client-x.y.z-?.rpm
เมื่อติดตั้งโปรแกรมลงในเครื่องแล้ว สามารถตรวจสอบได้ว่ามี service นี้เพิ่มเข้ามาหรือเปล่า ด้วยคำสั่ง
chkconfig --list smb
ซึ่งจะได้ผลลัพธ์ดังนี้
smb 0:off 1:off 2:off 3:on 4:on 5:on 6:off
โดยหมายเลข 0, 1, 2, 3, 4, 5, และ 6 นั้นคือ ระดับการทำงานของระบบ
0 - halt (Do NOT set initdefault to this) 1 - Single user mode(supperuser mode) 2 - Multiuser, without NFS (The same as 3, if you do not have networking) 3 - Full multiuser mode(text mode) 4 - unused 5 - X11(Graphic mode) 6 - reboot (Do NOT set initdefault to this)
หากเราต้องการหรือไม่ต้องการให้บริการนี้ทำงานอัตโนมัติทุกครั้งที่เปิดเครื่องในระดับใด ก็สามารถสั่งด้วยคำสั่ง
chkconfig [--level ตัวเลขระดับ] smb [on|off|reset] เช่นสั่ง chkconfig --level 34 smb off
หมายถึง ไม่ต้องการให้บริการ smb ทำงานอัตโนมัติทุกครั้งที่เปิดเครื่องเข้ามาใน text mode และ level 4
Start/Stop
เราสามารถสั่งให้บริการนี้ทำงาน หรือหยุดทำงานเมื่อใดก็ได้ด้วยคำสั่งต่างๆดังนี้
เริ่มทำงานด้วยคำสั่ง
service smb start
หยุดทำงานด้วยคำสั่ง
service smb stop
แสดงสถานะด้วยคำสั่ง
service smb status
เริ่มทำงานใหม่ด้วยคำสั่ง(สำหรับเมื่อเราแก้ไข config แล้วต้องการให้เริ่มใหม่)
service smb restart
เมื่อมาถึงตรงนี้ เครื่อง MS-Windows จะมองเห็นเครื่อง Linux แล้วแต่ยังไม่สามารถเข้าใช้ทรัพยากรใดๆได้ เพราะเรายังไม่ share อะไรเลย หากยังมองไม่เห็นก็แสดงว่าน่าจะมีปัญหากับ firewall ครับ โดย firewall จะต้องอนุญาตให้ใช้ port 137,138 และ 139 (NETBIOS) ด้วยครับ ซึ่งวิธีการจัดการ firewall นั้นจะไม่ขอกล่าวในที่นี้
วิธีตรวจสอบ บนเครื่อง Linux ควรจะมองเห็นเครื่อง Windows ทั้งหลายและเครื่องตัวเอง ด้วยคำสั่ง
smbclient –N –L localhost
ซึ่งจะได้ผลลัพธ์ เช่น
added interface ip=192.168.13.1 bcast=192.168.13.255 nmask=255.255.255.0
Anonymous login successful
Domain=[VSL] OS=[Unix] Server=[Samba 2.2.2]
Sharename Type Comment
--------- ---- -------
Download Disk My downloaded file
IPC$ IPC IPC Service (Samba Server 2.2.2)
ADMIN$ Disk IPC Service (Samba Server 2.2.2)
Server Comment
--------- -------
VRSOFTDEV Samba Server 2.2.2
VSLNOTE Acer TravelMate 340 Pentium III 450MHz
Workgroup Master
--------- -------
VSL VRSOFTDEV
สำหรับส่วนของการติดตั้งจะขอจบไว้เพียงเท่านี้และในตอนนี้ผลลัพธ์ที่เราได้ก็คือระบบปฏิบัติการที่มีส่วนของ service sambaเรียบร้อยแล้ว
และมีความพร้อมที่จะทำการlinkหากัน
==Configuration==
ในส่วนConfigurationจะขอนำเสนอเป็นหัวข้อหลักๆดังนี้
- จัดการแก้ไข config ไฟล์ซึ่ง config ไฟล์นั้นอยู่ที่ /etc/samba/smb.confโดยจะเป็นการทำSamba Security
- จัดการconfigผ่านทางโฮมเพจในส่วนนี้จะเสนอการShare Directoryให้ชมกัน
- วิธีการ Config นั้นมีด้วยกันสองวิธีคือ
จัดการผ่านทางโฮมเพจ และ จัดการแก้ไข config ไฟล์ซึ่ง config ไฟล์นั้นอยู่ที่ /etc/samba/smb.conf วิธีผ่านโฮมเพจนั้นจะใช้ protocol ที่ชื่อว่า SWAT(Samba Web Administration Tool) ซึ่งใช้งานที่ port 901 แต่วิธีนี้จะลบ comment ต่างๆใน config ไฟล์ จึงควรเก็บ config ไฟล์เก่าไว้ก่อน อีกอย่าง การป้อนรหัสผ่าน ผ่านโฮมเพจนั้นจะส่งรหัสผ่านแบบตรงไปตรงมา ดังนั้นจึงไม่แนะนำให้ใช้วิธีนี้ผ่านเครือข่ายระยะไกลๆ แต่ถ้าหากเปิดโฮมเพจที่เครื่องนั้นเลย(http://localhost:901) ก็จะปลอดภัยครับ ซึ่งปกติแล้ว Mandrake ก็กำหนดไว้ให้เรียกได้จาก localhost เท่านั้นไว้อยู่แล้ว
ก่อนอื่นจะขอนำเสนอการconfigที่เป็นจุดเด่นและถือว่าเป็นส่วนสำคัญของSAMBAก่อนคือ การทำSamba Securityนั่นเอง
Samba Securityโดยจะประกอบไปด้วย7หัวข้อหลักคือ
1. Authentication Security
เมื่อ Samba แชร์ไฟล์หรือเครื่องพิมพ์ให้แก่ผู้ใช้และไม่อนุญาตให้ guest เข้ามาใช้งาน ผู้ใช้จะต้องทำการยืนยันตัวตนกับ Samba ซึ่ง Samba มีวิธีในการเลือกการยืนยันตัวตนผ่านทางออปชัน security ซึ่งสามารถเลือกได้ 4 แบบดังนี้
- security = share : samba จะแจ้งแก่ client ให้ส่งค่ารหัสผ่านอย่างเดียวเท่านั้น ดังนั้นหากผู้ใช้ทราบรหัสผ่านของผู้ใช้คนใดคนหนึ่งก็ตามก็สามารถเข้าใช้งานในระบบได้
- security = user : samba จะแจ้งแก่ client ให้ส่งค่า username และรหัสผ่านมาเพื่อทำการตรวจสอบตัวตนผู้ใช้ ซึ่งในกรณีนี้จะเหมาะสำหรับผู้ที่ใช้ระบบปฏิบัติการวินโดวส์ NT/2000 เป็น client และใช้ username และรหัสผ่านเป็นชุดเดียวกันกับที่ Samba server
- security = server : มีรูปแบบการทำงานคล้ายกับแบบ user เพียงแต่ Samba server จะใช้ SMB server อื่นเป็นตัวทำหน้าที่ตรวจสอบ username และรหัสผ่านแทน
- security = domain : Samba สามารถเป็นสมาชิกของ Windows Domain ได้ ดังนั้นเมื่อผู้ใช้ทำการยืนยันตัวตนกับ primary domain controller (PDC) แล้ว ก็จะสามารถเข้าใช้งานแชร์ที่อยู่บน Samba server ได้ (เป็นคุณสมบัติอย่างหนึ่งของระบบโดเมน)
หมายเหตุ: หากมีการระบุออปชั่น Public = yes หรือ Guest ok = yes ใน /etc/samba/smbd.conf แล้ว และไม่ว่าจะระบุ security เป็นออปชันใด Samba ก็จะไม่ทำการตรวจสอบรหัสผ่านที่ส่งมาจากไคลเอ็นต์ (client) แต่อย่างใด
2. Passwords
การที่ผู้ใช้จะสามารถเข้าถึงไดเรกทอรีหรือเครื่องพิมพ์ที่แชร์ไว้ได้นั้น ผู้ใช้จะต้องมี unix account บนเครื่องเซิร์ฟเวอร์ที่ให้บริการ Samba เสียก่อน โดยปกติ Samba สนับสนุนการตรวจสอบตัวตนผู้ใช้ทั้งในแบบที่มีการเข้ารหัส (Encrypted) และไม่มีการเข้ารหัส (Non-encrypted) โดยการตั้งค่า
encrypt passwords = [yes|no]
โดยหากมีค่าเป็น no ตัว Samba จะทำการตรวจสอบรหัสผ่าน(และ username) จากไฟล์ /etc/passwd แต่หากมีค่าเป็น yes ตัว Samba จะทำการตรวจสอบรหัสผ่าน(และ username) จากไฟล์ /etc/samba/smbpasswd แทน ทั้งนี้หากไฟล์ /etc/samba/smbpasswd ไม่มีอยู่จริง ก็จะทำให้ไม่มีผู้ใช้รายใดสามารถเข้าใช้งานแชร์ทั้งหมดได้ (โดยปกติจะไม่มีไฟล์นี้อยู่ ผู้ดูแลระบบจะต้องสร้างไฟล์นี้ขึ้นเอง ซึ่งจะกล่าวถึงรายละเอียดในลำดับต่อไป)
การใช้งานออปชัน encrypt passwords นั้น จะขึ้นอยู่กับความสามารถของระบบปฎิบัติการที่เป็นไคลเอนต์ว่า สนับสนุนการเข้ารหัสหรือไม่ ดังนี้
ตารางแสดงระบบปฏิบัติการต่างๆ กับความสามารถในการส่งรหัสผ่านแบบเข้ารหัส
| Operating System | Encrypted or Non-encrypted |
| Windows 95 | Non-encrypted |
| Windows 95 with SMB Update | Encrypted |
| Windows 98 | Encrypted |
| Windows NT 3. x | Encrypted or Non-encrypted |
| Windows NT 4.0 before SP 3 | Non-encrypted |
| Windows NT 4.0 after SP 3 | Encrypted |
* สำหรับเวอร์ชั่นที่ใหม่กว่าสำหรับ driver เหล่านี้ อาจต้องหาใน net/new directory ซึ่งรองรับเวอร์ชั่นที่ใหม่กว่าของ cards เหล่านี้
- Drivers เหล่านี้ถูกทำให้ใช้ได้ใน net directory แล้ว
ในกรณีที่ตั้งค่า encrypt passwords = no ซึ่งหมายถึง Samba จะต้องทำการตรวจสอบรหัสผ่านและรายชื่อผู้ใช้จากไฟล์ /etc/passwd ผู้ดูแลระบบจะสังเกตได้ว่าในไฟล์ /etc/passwd นั้นมี default account อยู่จำนวนมาก เช่น root, bin, daemon, shutdown ซึ่งหมายความว่า account ที่ติดมากับระบบดังกล่าว สามารถเป็นผู้ใช้ที่ถูกต้องในระบบของ Samba ได้ด้วย ดังนั้นจึงขอแนะนำให้ทำการยกเลิกการใช้งาน account ที่ติดมากับระบบ โดยการตั้งค่าออปชัน invalid users ไว้ที่ส่วน [global] ดังเช่น
[global]
invalid users = root bin daemon adm sync shutdown \
halt mail news uucp operator gopher \
nobody mailnull rpm ntp
อย่างไรก็ตาม Samba ได้แนะนำให้ใช้ออปชัน encrypt passwords = yes แทนเพราะจะทำให้มีความปลอดภัยมากกว่า ทั้งนี้ผู้ดูแลระบบจำเป็นต้องสร้างไฟล์ /etc/samba/smbpasswd ขึ้นมา เพื่อรองรับการทำงานในโหมดดังกล่าว ซึ่งสามารถทำได้ 2 วิธีด้วยกันคือ
1.ใช้คำสั่ง touch /etc/samba/smbpasswd เพื่อสร้างไฟล์เปล่าขึ้นมา
- ใช้คำสั่ง smbpasswd -a lersak เพื่อเพิ่ม account lersak ขึ้นมาในระบบของ Samba (account lersak จะต้องมีรายชื่อเป็นผู้ใช้ในระบบเสียก่อน โดยตรวจสอบในไฟล์ /etc/passwd จึงจะสามารถใช้คำสั่งดังกล่าวได้)
- หาก lersak ต้องการเปลี่ยนรหัสผ่านสำหรับเข้าใช้บริการของ Samba ก็สามารถใช้คำสั่ง smbpasswd lersak เพื่อทำการเปลี่ยนรหัสผ่านได้
- ใช้คำสั่ง smbpasswd -a lersak เพื่อเพิ่ม account lersak ขึ้นมาในระบบของ Samba (account lersak จะต้องมีรายชื่อเป็นผู้ใช้ในระบบเสียก่อน โดยตรวจสอบในไฟล์ /etc/passwd จึงจะสามารถใช้คำสั่งดังกล่าวได้)
2.ใช้สคริปต์ mksmbpasswd.sh เพื่อให้ samba สร้างไฟล์ passwd ของ samba เอง ด้วยคำสั่งต่อไปนี้
cat /etc/passwd | /usr/bin/mksmbpasswd.sh > /etc/samba/smbpasswd
- คำสั่งด้านบนนี้จะทำการคัดลอกข้อมูลผู้ใช้ทั้งหมดในไฟล์ /etc/passwd ไปสร้างเป็นผู้ใช้ในระบบของ Samba ดังนั้นหากตรวจสอบไฟล์ /etc/samba/smbpasswd ดู จะพบว่ามี account ที่เป็นดีฟอลต์ติดมาด้วย ดังนั้นผู้ดูแลระบบจะต้องลบ account ที่ไม่ต้องการดังกล่าวออกจากระบบของ Samba ด้วยการเข้าไปแก้ไขไฟล์ /etc/samba/smbpasswd โดยตรงหรือใช้คำสั่ง smbpasswd -x username สำหรับ username ที่ไม่จำเป็น
- ใช้คำสั่ง smbpasswd สำหรับสร้าง Samba account หรือเปลี่ยนรหัสผ่านได้ตามต้องการ
- คำสั่งด้านบนนี้จะทำการคัดลอกข้อมูลผู้ใช้ทั้งหมดในไฟล์ /etc/passwd ไปสร้างเป็นผู้ใช้ในระบบของ Samba ดังนั้นหากตรวจสอบไฟล์ /etc/samba/smbpasswd ดู จะพบว่ามี account ที่เป็นดีฟอลต์ติดมาด้วย ดังนั้นผู้ดูแลระบบจะต้องลบ account ที่ไม่ต้องการดังกล่าวออกจากระบบของ Samba ด้วยการเข้าไปแก้ไขไฟล์ /etc/samba/smbpasswd โดยตรงหรือใช้คำสั่ง smbpasswd -x username สำหรับ username ที่ไม่จำเป็น
สำหรับระบบที่ให้บริการ Samba service และใช้ออปชัน encrypt passwords = yes ซึ่งจำเป็นต้องสร้าง account ของระบบขึ้นมาก่อนนั้น ในบางครั้ง account ดังกล่าวไม่ต้องการใช้งาน shell ในระบบเลย มีการใช้งานเฉพาะในส่วนของการขอใช้บริการของ Samba server เท่านั้น ดังนั้นผู้ดูแลระบบควรทำการยกเลิกการใช้งาน account ของระบบดังกล่าว โดยแก้ไขไฟล์ /etc/passwd แล้วเพิ่มเครื่องหมาย colon (:) ไปที่ต้นบรรทัดของบรรทัดที่ระบุชื่อ account ที่ไม่ต้องการให้เข้าใช้งานในระบบ เช่น
:lersak:x:503:500::/home/lersak:/bin/bash
นอกจากนี้การที่ Samba สร้างไฟล์รหัสผ่านของตัวเองแยกออกมาจากของระบบทำให้ผู้ใช้สามารถมีรหัสผ่านที่แตกต่างกันได้ อย่างไรก็ตามเพื่อป้องกันไม่ให้ผู้ใช้ของ Samba ทำการตั้งรหัสผ่านเป็น null (ไม่มีค่าใดๆ) ผู้ดูแลระบบควรตั้งค่าออปชัน null passwords = no เพื่อป้องกันเหตุการณ์ดังกล่าวได้
นอกจากนั้น ผู้ดูแลระบบที่ตั้งค่า encrypt passwords = yes จำเป็นอย่างยิ่งที่จะต้องตั้งค่า permission ของไฟล์ /etc/samba/smbpasswd ให้มีค่าเป็น 0600 เพื่อป้องกันการ crack password จากไฟล์ดังกล่าว
3. Networking Options
มี configuration ที่เกี่ยวข้องกับเครือข่ายที่ควรพิจารณาแก้ไขดังต่อไปนี้
แก้ไขออปชันของ hosts allow, hosts deny ให้ตรงกับความต้องการ ซึ่งควรตั้งค่าให้สามารถใช้งานได้เฉพาะเครื่องที่จำเป็นต้องใช้งานเท่านั้น เช่น
hosts allow = 192.168.1. hosts deny = 192.168.1.226/255.255.255.255
โดยค่าที่สามารถระบุได้ใน hosts allow, hosts deny คือ
- hostname เช่น hosts allow = example.nectec.or.th
- ip address เช่น hosts allow = 192.168.1.22
- domain เช่น hosts allow = .nectec.or.th exact.nectec.or.th
- hostname เช่น hosts allow = example.nectec.or.th
(.nectec.or.th หมายถึง ทุกเครื่องที่อยู่ภายใต้โดเมน nectec.or.th)
- netgroup โดยปกติใช้ได้กับเครือข่ายที่ติดตั้ง NIS, NIS+ เท่านั้น เช่น hosts allow = @localnet
- netgroup โดยปกติใช้ได้กับเครือข่ายที่ติดตั้ง NIS, NIS+ เท่านั้น เช่น hosts allow = @localnet
- subnet เช่น hosts allow = 192.168.1. (192.168.1. หมายถึง 192.168.1.0/24)
- subnet เช่น hosts allow = 192.168.1. (192.168.1. หมายถึง 192.168.1.0/24)
ALL ซึ่งหมายถึง ip ใดก็ได้
- EXCEPT เป็นการยกเว้นค่าที่ต้องการ เช่น hosts deny = ALL EXCEPT 192.168.1.
- EXCEPT เป็นการยกเว้นค่าที่ต้องการ เช่น hosts deny = ALL EXCEPT 192.168.1.
อย่างไรก็ตาม Samba มีกฎในการนำค่า configuration ของ host allow, hosts deny ไปใช้งานดังนี้
- ถ้าไม่มีการระบุ hosts allow หรือ hosts deny ตัว Samba จะถือว่าเป็นการอนุญาตให้ใช้งานได้อย่างอิสระ (เสมือน hosts allow = ALL)
- ถ้ามีการระบุ hosts allow, hosts deny ใน [global] ค่าดังกล่าวจะมีผลกับทุกๆ แชร์ แม้ว่าจะมีการระบุ hosts allow, deny ในแต่ละแชร์ซึ่งการระบุในแต่ละแชร์ดังกล่าวจะถือว่าไม่มีผลแต่อย่างใด
- ถ้ามีการระบุ hosts allow แต่ไม่ได้ระบุ hosts deny จะถือว่า ค่าที่นอกเหนือจากที่ระบุใน hosts allow จะมีสถานะเป็น deny โดยอัตโนมัติ
- ในทำนองเดียวกัน ถ้ามีการระบุ hosts deny แต่ไม่ได้ระบุ hosts allow จะถือว่า ค่าที่นอกเหนือจากที่ระบุใน hosts deny จะมีสถานะเป็น allow โดยอัตโนมัติ
- ถ้ามีค่า เช่น ip address หรือ subnet ถูกระบุในทั้ง hosts allow และใน hosts deny จะถือว่าค่าดังกล่าวมีสถานะเป็น deny
4. Filesystem Options
configuration ในส่วนนี้จะเกี่ยวข้อง filesystem ซึ่งผู้ดูแลระบบจำเป็นต้องเข้าใจและนำไปใช้ให้เหมาะสมกับระบบของตน
- ตั้งค่าให้ซ่อนไฟล์ (attribute = hidden) สำหรับชื่อไฟล์ที่ขึ้นด้วยเครื่องหมาย dot (.) ด้วยออปชัน hide dot files = yes
อย่างไรก็ตามหากผู้ใช้ระบบปฏิบัติการวินโดวส์ที่ตั้งค่าให้สามารถ view hidden files ผ่านทาง windows explorer ได้ก็จะสามารถมองเห็นไฟล์ดังกล่าวได้ด้วยดังรูป
การแสดงผลใน windows explorer เมื่อใช้ออปชัน hide dot files = yes
- ในการแชร์ไฟล์ใดๆ ก็ตาม ผู้ดูแลระบบสามารถกำหนดให้บางไฟล์มีแอตทริบิวต์เป็น hidden ได้ โดยการตั้งค่าดังตัวอย่างนี้
- ในการแชร์ไฟล์ใดๆ ก็ตาม ผู้ดูแลระบบสามารถกำหนดให้บางไฟล์มีแอตทริบิวต์เป็น hidden ได้ โดยการตั้งค่าดังตัวอย่างนี้
[data]
path = /home/samba/data
browseable = yes
guest ok = no
writeable = yes
case sensitive = no
hide files = /*.java/*README*/
การแสดงผลใน windows explorer เมื่อใช้ออปชัน hide files
โดยการกำหนดชื่อไฟล์ที่ต้องการซ่อนนั้นสามารถใช้ pattern matching ได้ อย่างไรก็ตามหากผู้ใช้ระบบปฏิบัติการวินโดวส์ที่ตั้งค่าให้สามารถ view hidden files ผ่านทาง windows explorer ได้ก็จะสามารถมองเห็นไฟล์ดังกล่าวได้ด้วยดังรูป
- หากผู้ดูแลระบบไม่ต้องการให้ผู้ใช้มองเห็นไฟล์บางไฟล์ได้จริง (ดังรูปที่ 4) ต้องใช้ออปชัน veto files ในการตั้งค่า ซึ่งมีรูปแบบการใช้งานเหมือนกับออปชัน hide files เช่น
- หากผู้ดูแลระบบไม่ต้องการให้ผู้ใช้มองเห็นไฟล์บางไฟล์ได้จริง (ดังรูปที่ 4) ต้องใช้ออปชัน veto files ในการตั้งค่า ซึ่งมีรูปแบบการใช้งานเหมือนกับออปชัน hide files เช่น
[data]
path = /home/samba/data
browseable = yes
guest ok = no
writeable = yes
case sensitive = no
veto files = /*.java/*README*/
รูปการแสดงผลใน windows explorer เมื่อใช้ออปชัน veto files
- อย่างไรก็ตาม เมื่อผู้ใช้ไม่ทราบว่ามีไฟล์ที่ถูกซ่อนอยู่ (โดยใช้ออปชัน veto files) จึงมีความเป็นไปได้ที่ผู้ใช้จะทำการลบไดเรกทอรีที่บรรจุ veto file ดังกล่าวอยู่ ผู้ดูแลระบบสามารถกำหนดได้ว่าจะอนุญาตให้ลบไฟล์ที่เป็น veto file ได้หรือไม่ด้วยออปชัน delete veto files = yes หรือ no ตามความต้องการ
- ผู้ดูแลระบบสามารถกำหนดให้ผู้ใช้สามารถมองเห็นบางไดเรกทอรีได้ แต่ไม่สามารถมองเห็นข้อมูลไฟล์ใดๆ ในไดเรกทอรีดังกล่าวได้ รวมทั้งไม่สามารถสร้างไฟล์หรือไดเรกทอรีภายใต้ไดเรกทอรีดังกล่าวได้อีกด้วย โดยใช้ออปชัน dont descend เช่น
- อย่างไรก็ตาม เมื่อผู้ใช้ไม่ทราบว่ามีไฟล์ที่ถูกซ่อนอยู่ (โดยใช้ออปชัน veto files) จึงมีความเป็นไปได้ที่ผู้ใช้จะทำการลบไดเรกทอรีที่บรรจุ veto file ดังกล่าวอยู่ ผู้ดูแลระบบสามารถกำหนดได้ว่าจะอนุญาตให้ลบไฟล์ที่เป็น veto file ได้หรือไม่ด้วยออปชัน delete veto files = yes หรือ no ตามความต้องการ
[data]
path = /home/samba/data
browseable = yes
guest ok = no
writeable = yes
case sensitive = no
dont descend = folder1 folder2
- มีออปชันที่เกี่ยวข้องกับ link file ที่จะกล่าวถึงคือ follow symlinks = [yes|no] ซึ่งหากระบุเป็น no ก็เป็นการสั่งให้ Samba ไม่ค้นหาไฟล์ที่เป็นต้นฉบับที่แท้จริง หากมีการเรียกใช้ไฟล์ที่เป็น symbolic link ผู้ใช้ก็จะได้รับ error message ดังรูป
- มีออปชันที่เกี่ยวข้องกับ link file ที่จะกล่าวถึงคือ follow symlinks = [yes|no] ซึ่งหากระบุเป็น no ก็เป็นการสั่งให้ Samba ไม่ค้นหาไฟล์ที่เป็นต้นฉบับที่แท้จริง หากมีการเรียกใช้ไฟล์ที่เป็น symbolic link ผู้ใช้ก็จะได้รับ error message ดังรูป
รูปการแสดงผลใน windows explorer เมื่อใช้ออปชัน follow symlinks = no
- ในกรณีที่ระบุ follow symlinks = yes และไฟล์ดังกล่าวลิงค์ไปยังต้นฉบับที่อยู่นอกไดเรกทอรีที่แชร์ไว้ ผู้ดูแลระบบสามารถกำหนดได้ว่าจะให้ผู้ใช้ใช้งานไฟล์ต้นฉบับดังกล่าวได้หรือไม่ด้วยออปชัน wide links = [yes|no]
- ในกรณีที่ระบุ follow symlinks = yes และไฟล์ดังกล่าวลิงค์ไปยังต้นฉบับที่อยู่นอกไดเรกทอรีที่แชร์ไว้ ผู้ดูแลระบบสามารถกำหนดได้ว่าจะให้ผู้ใช้ใช้งานไฟล์ต้นฉบับดังกล่าวได้หรือไม่ด้วยออปชัน wide links = [yes|no]
5. File Permissions and Attributes
- ออปชัน create mask ใช้กำหนดค่า default permission สูงสุด สำหรับไฟล์ที่สร้างขึ้นมาใหม่ เช่น create mask = 0640
- ออปชัน create mask ใช้กำหนดค่า default permission สูงสุด สำหรับไฟล์ที่สร้างขึ้นมาใหม่ เช่น create mask = 0640
- ออปชัน directory mask ใช้กำหนดค่า default permission สูงสุด สำหรับไดเรกทอรีที่สร้างขึ้นมาใหม่ เช่น directory mask = 750
- ออปชัน directory mask ใช้กำหนดค่า default permission สูงสุด สำหรับไดเรกทอรีที่สร้างขึ้นมาใหม่ เช่น directory mask = 750
6. การควบคุมการเข้าถึงแชร์
ผู้ดูแลระบบควรจำกัดการเข้าถึงแชร์ใดๆ ให้ใช้งานได้เฉพาะผู้ที่สมควรได้รับสิทธิ์เท่านั้น โดยมีออปชันที่เกี่ยวข้องดังนี้
valid users = myuid, lersak, @staff
ระบุให้เฉพาะผู้ใช้ที่มีชื่อในรายการนี้เท่านั้น จึงจะสามารถเข้าถึงดิสก์ที่แชร์ไว้ได้ (ใช้ @ สำหรับทั้ง group)
หากรายชื่อผู้ใช้ที่กำหนดไว้ใน valid users ไปปรากฏซ้ำกับรายชื่อใน invalid users ก็จะถือว่าผู้ใช้รายนั้นถูกจัดในกลุ่ม invalid users
invalid users = kitisak, @guest
แสดงรายชื่อผู้ใช้ที่ไม่มีสิทธิ์เข้าใช้งานแชร์
writable = yes writeable = yes write ok = yes read only = no
ออปชันทั้งสี่แบบด้านบนนี้ให้ผลลัพธ์เหมือนกัน คืออนุญาตให้ผู้ใช้สามารถสร้างไฟล์หรือไดเร็กทอรีขึ้นมาใหม่ได้
read list = choawalit, kitisak
แสดงรายชื่อผู้ใช้ที่มีสิทธิ์ใช้งานแชร์แบบอ่านเท่านั้น ไม่สามารถทำการแก้ไขใดๆ ได้ หากว่าผู้ใช้ใน read list มีชื่อใน list อื่น เช่น write list, read only, writeable ก็จะถือว่าผู้ใช้นั้นมีสิทธิ์เป็น read only เท่านั้น
write list = lersak, phuwadon, siriwan
เป็นการให้สิทธิ์ write แก่ผู้ใช้ที่มีชื่อในรายการนี้ แม้ว่าจะมีการระบุว่า read only = yes ก็ตาม
public = no guest ok = no
ออปชัน public และ guest ok สามารถใช้แทนกันได้ ซึ่งหากกำหนดค่าเป็น yes ก็จะทำให้สามารถเข้าใช้งานดิสก์ที่แชร์ไว้โดยไม่ต้องล็อกอิน
hosts equiv =
เป็นออปชันที่เป็นอันตรายอย่างยิ่ง ผู้ดูแลระบบควรตรวจสอบให้แน่ใจว่าไม่มีการระบุออปชันนี้ในไฟล์ /etc/samba/smb.conf เป็นอันขาด เพราะในออปชัน hosts equiv ดังกล่าวจะกำหนดรายชื่อผู้ใช้และโฮสต์ที่สามารถเข้าใช้งานดิสก์ที่แชร์ไว้โดยไม่ต้องใช้รหัสผ่าน (คล้ายกับไฟล์ hosts.equiv ของ Unix)
7. คำแนะนำเกี่ยวกับความปลอดภัยอื่นๆ
ผู้ดูแลระบบจะต้องระมัดระวังในการให้ write permission ของไฟล์ /etc/samba/smb.conf แก่ผู้ใช้รายอื่น เพราะหากผู้ใช้สามารถแก้ไขข้อมูลในไฟล์ smb.conf ได้ เช่น อาจจะเพิ่มออปชัน root preexec = , root postexec = ซึ่งเป็นการระบุให้รันคำสั่งที่ต้องการด้วยสิทธิ์ของ root ผู้ใช้รายดังกล่าวก็สามารถครอบครองระบบได้โดยง่าย
ดังนั้นจึงควรแก้ไขค่า permission ของไฟล์ /etc/samba/smb.conf ดังนี้
chown root.root /etc/samba/smb.conf chmod 600 /etc/samba/smb.conf
อย่างไรก็ตามผู้ดูแลระบบควรระมัดระวังเมื่อติดตั้ง SWAT เวอร์ชั่นที่ติดมากับ Red Hat linux version ที่ต่ำกว่า 7.0 เพราะ SWAT จะทำการแก้ไข permission ของไฟล์ /etc/samba/smb.conf เป็น 664 แตกต่างจาก SWAT ที่ติดมากับ Red Hat 7.0 ขึ้นไปนั้นไม่มีช่องโหว่ดังกล่าวแล้ว แต่ผู้บุกรุกยังสามารถติดตั้ง SWAT เวอร์ชันที่มีช่องโหว่เองได้
สิ่งที่สำคัญคือ ผู้ดูแลระบบจะต้องตั้งค่าออปชันดังต่อไปนี้ในทุกๆ แชร์ เพื่อกำหนดสิทธิ์ให้ชัดเจนว่า ผู้ใช้รายใดจะสามารถเข้ามาใช้งานได้และสามารถใช้งานในระดับใดได้บ้าง
valid users = writeable = read list = write list = hosts allow = hosts deny =
หมายเหตุ :
พอร์ตที่เกี่ยวข้องกับการทำงานของ samba server คือ 137/udp, 138/udp, 139/tcp
ผู้ดูแลระบบควรตรวจสอบการใช้งานของผู้ใช้อย่างสม่ำเสมอ ด้วยคำสั่ง smbstatus
ก็จบไปในส่วนของการทำSamba Securityและต่อไปผู้จัดทำจะขอเสนอในส่วนที่2 ต่อไปเลยคือ
การShare Directory
Share Directory
- จากหน้าแรกของโฮมเพจ เลือก Share จะปรากฏ Form สำหรับกำหนดการ share directory เราสามารถเลือก
ชื่อที่มีอยู่แล้ว หรือสร้างขึ้นใหม่ ถ้าต้องการสร้างใหม่ก็ป้อนชื่อที่ต้องการให้มองเห็น เช่น test แล้วกดปุ่ม Create Share
ก็จะปรากฏ Form เพิ่มขึ้นเพื่อกำหนดค่าต่างๆของ test ดังภาพ
สิ่งที่ต้องกำหนดก็คือ
- path คือ directory ที่เราต้องการให้มองเห็นเป็นชื่อ test นี้
- read only คือต้องการให้ อ่านได้อย่างเดียวหรือไม่
- guest ok คือต้องการให้ใครก็ได้เข้ามาอ่านข้อมูลที่เรา share ไว้นี้หรือเปล่า
- hosts allow คือรายชื่อ IP address หรือชื่อ host ที่อนุญาตให้ใช้ share นี้ได้
- hosts deny คือรายชื่อ IP address หรือชื่อ host ที่ไม่อนุญาตให้ใช้
- browseable คือให้ชื่อ test นี้ปรากฏให้เห็นหรือไม่
- available ใช้สำหรับปิด share ชั่วคราว เมื่อกำหนดเป็น No
- path คือ directory ที่เราต้องการให้มองเห็นเป็นชื่อ test นี้
ที่ผ่านไปนั้นก็เป็นการปรับแต่งค่าผ่านทางโฮมเพจนั้นโดยเป็นการทำShare Directoryโดยจะสังเกตุได้ว่า
มีความง่ายและคล่องตัวมากว่าการแก้configจากfile configตามที่ได้กล่าวไปในหัวข้อแรกซึ่งมีความแตกต่าง
กันไปบ้างโดยเราสามารถเลือกใช้ให้เหมาะสมกับงานของเราได้ต่อไป
สำหรับการติดตั้งและการปรับแต่งค่าต่างๆจึงขอนำเสนอแต่เพียงเท่านี้
สรุป
- Samba เป็นซอฟต์แวร์ที่ช่วยให้สามารถแชร์ไฟล์ ไดเรคทรอรี่ หรือทรัพยากรของระบบที่สามารถใช้ร่วมกันได้เช่น เครื่องพิมพ์บนระบบ
ปฏิบัติการลินุกซ์ให้กับระบบปฏิบัติการวินโดวส์ 95, 98, 2000, NTรวมทั้งในส่วนที่เป็นsmbclient ซึ่งทำให้เกิดการทำงานที่มีความเป็นส่วนรวม
ประสานสอดคล้อง และง่ายต่อการจัดการของระบบ





