ThaiCERT: Thai Computer Emergency Response Team
ศูนย์ประสานงานการรักษาความปลอดภัยคอมพิวเตอร์ ประเทศไทย 
 
 
 



ชื่อเรื่อง : Samba Security
เรียบเรียงโดย : ภูวดล ด่านระหาญ
เรียบเรียงเมื่อ : 28 ตุลาคม 2545

กล่าวนำ
Samba เป็นซอฟต์แวร์ที่ช่วยให้สามารถแชร์ไฟล์และเครื่องพิมพ์บนลินุกซ์ให้กับระบบปฏิบัติการวินโดวส์ 95, 98, 2000, NT รวมทั้ง smbclient อื่น เช่น linux, unix อื่นๆ ได้ การทำงานของ Samba ประกอบไปด้วยส่วนประกอบหลักๆ ดังนี้

โดยทั่วไปไฟล์ configuration ของ samba จะถูกเก็บไว้ที่ /etc/samba/smb.conf ไฟล์นี้จะเป็นตัวควบคุมการทำงานทั้งหมดของ samba ดังนั้นการแก้ไขใดๆ จึงควรกระทำด้วยความระมัดระวัง เพราะหากเกิดความผิดพลาดอาจจะทำให้เกิดการรั่วไหลของข้อมูลได้ เช่น การอนุญาตให้ผู้ใช้สามารถเข้าใช้งานได้โดยไม่ต้องใส่ username และ password

การแก้ไข configuration ของ samba นั้นสามารถทำได้ 2 วิธีคือ แก้ไขไฟล์โดยตรงที่ /etc/samba/smb.conf หรือติดตั้ง SWAT ซึ่งจะช่วยให้สามารถแก้ไข configuration ผ่านทางเว็บได้ (default port = 901/tcp) ซึ่งหากมีการใช้งาน SWAT ควรจำกัดการเข้าถึงเฉพาะผู้ดูแลระบบเท่านั้น เช่น ควบคุมให้เข้าถึงได้เฉพาะจากไอพีที่ระบุไว้ หรือยกเลิกการใช้งาน SWAT เมื่อเสร็จสิ้นการแก้ไข configuration

หมายเหตุ:

configuration ของ Samba นั้นมีรายละเอียดค่อนข้างมาก เอกสารฉบับนี้จะนำเสนอออปชันในส่วนที่เกี่ยวข้องกับความปลอดภัยเท่านั้น ซึ่งมีรายละเอียดดังต่อไปนี้

1. Authentication Security
เมื่อ Samba แชร์ไฟล์หรือเครื่องพิมพ์ให้แก่ผู้ใช้และไม่อนุญาตให้ guest เข้ามาใช้งาน ผู้ใช้จะต้องทำการยืนยันตัวตนกับ Samba ซึ่ง Samba มีวิธีในการเลือกการยืนยันตัวตนผ่านทางออปชัน security ซึ่งสามารถเลือกได้ 4 แบบดังนี้

หมายเหตุ: หากมีการระบุออปชั่น 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 นั้น จะขึ้นอยู่กับความสามารถของระบบปฎิบัติการที่เป็นไคลเอนต์ว่า สนับสนุนการเข้ารหัสหรือไม่ ดังนี้

ตารางที่ 1 แสดงระบบปฏิบัติการต่างๆ กับความสามารถในการส่งรหัสผ่านแบบเข้ารหัส

Operating System

Encrypted or Non-encrypted

Windows 95

Non-encrypted

Windows 95 with SMB Update

Encrypted

Windows 98

Encrypted

Windows NT 3. x

Non-encrypted

Windows NT 4.0 before SP 3

Non-encrypted

Windows NT 4.0 after SP 3

Encrypted

ในกรณีที่ตั้งค่า 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 เพื่อสร้างไฟล์เปล่าขึ้นมา
  2. หรือใช้สคริปต์ mksmbpasswd.sh เพื่อให้ samba สร้างไฟล์ passwd ของ samba เอง ด้วยคำสั่งต่อไปนี้

    cat /etc/passwd | /usr/bin/mksmbpasswd.sh > /etc/samba/smbpasswd

สำหรับระบบที่ให้บริการ 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 คือ

อย่างไรก็ตาม Samba มีกฎในการนำค่า configuration ของ host allow, hosts deny ไปใช้งานดังนี้

  1. ถ้าไม่มีการระบุ hosts allow หรือ hosts deny ตัว Samba จะถือว่าเป็นการอนุญาตให้ใช้งานได้อย่างอิสระ (เสมือน hosts allow = ALL)
  2. ถ้ามีการระบุ hosts allow, hosts deny ใน [global] ค่าดังกล่าวจะมีผลกับทุกๆ แชร์ แม้ว่าจะมีการระบุ hosts allow, deny ในแต่ละแชร์ซึ่งการระบุในแต่ละแชร์ดังกล่าวจะถือว่าไม่มีผลแต่อย่างใด
  3. ถ้ามีการระบุ hosts allow แต่ไม่ได้ระบุ hosts deny จะถือว่า ค่าที่นอกเหนือจากที่ระบุใน hosts allow จะมีสถานะเป็น deny โดยอัตโนมัติ
  4. ในทำนองเดียวกัน ถ้ามีการระบุ hosts deny แต่ไม่ได้ระบุ hosts allow จะถือว่า ค่าที่นอกเหนือจากที่ระบุใน hosts deny จะมีสถานะเป็น allow โดยอัตโนมัติ
  5. ถ้ามีค่า เช่น ip address หรือ subnet ถูกระบุในทั้ง hosts allow และใน hosts deny จะถือว่าค่าดังกล่าวมีสถานะเป็น deny

4. Filesystem Options
configuration ในส่วนนี้จะเกี่ยวข้อง filesystem ซึ่งผู้ดูแลระบบจำเป็นต้องเข้าใจและนำไปใช้ให้เหมาะสมกับระบบของตน

โดยการกำหนดชื่อไฟล์ที่ต้องการซ่อนนั้นสามารถใช้ pattern matching ได้ อย่างไรก็ตามหากผู้ใช้ระบบปฏิบัติการวินโดวส์ที่ตั้งค่าให้สามารถ view hidden files ผ่านทาง windows explorer ได้ก็จะสามารถมองเห็นไฟล์ดังกล่าวได้ด้วยดังรูปที่ 3

5. File Permissions and Attributes

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 =

หมายเหตุ :



Home || เอกสารเผยแพร่ || Unix & Linux

ThaiCERT Disclaimer | Copyright © 2001 ThaiCERT(NECTEC). All rights reserved.