แก้ไขคอนฟิก Samba เพื่อรองรับ SMBv2

หลังจากดำเนินการรับมือ WannaCry อยู่หลายวัน พบปัญหาติดขัดหลายอย่าง หนึ่งในนั้นก็คือพอแก้ไขคอนฟิกปิด SMB1 ในเครื่อง Windows จะทำให้เรียกแชร์ไฟล์บนเซิร์ฟเวอร์ Samba ไม่ได้

เนื่องจากดีฟอลต์คอนฟิกของ Samba ที่ถูกติดตั้งบนลีนุกซ์เพื่อรันเป็นเซิร์ฟเวอร์ไฟล์แชร์หลายรุ่น ไม่ได้เปิดให้รองรับ SMB2 protocol เอาไว้ ทำให้ถ้าปิดคอนฟิกไม่ให้ใช้ SMB1 บน Windows Client จะทำให้ไม่สามารถเรียกไฟล์ที่แชร์ผ่าน Samba ได้

ลองมาดูรายละเอียดและวิธีการแก้ไขปัญหากัน

คำเตือน ทดสอบบนเครื่องทดลองให้แน่ใจก่อน แล้วค่อยแก้ไขบนเครื่องเซิร์ฟเวอร์ที่ใช้งานจริง

ในที่นี่ทดสอบกับ CentOS 6 ติดตั้ง Samba 3.6

[root@centos-6 ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)

[root@centos-6 ~]# rpm -qa | grep samba
samba-winbind-clients-3.6.23-42.el6_9.x86_64
samba-3.6.23-42.el6_9.x86_64
samba-doc-3.6.23-42.el6_9.x86_64
samba-winbind-3.6.23-42.el6_9.x86_64
samba-common-3.6.23-42.el6_9.x86_64
samba-client-3.6.23-42.el6_9.x86_64

เพื่อให้เห็นภาพการเลือกใช้ SMB protocol ในการเรียกแชร์ไฟล์ จะแก้ไขคอนฟิก smb.conf เพื่อให้เห็นข้อความ log เพิ่มเติม

[root@centos-6 ~]# vi /etc/samba/smb.conf
[global]
    ...
    log level = 3

หมายเหตุ ไม่แนะนำให้เปิด log level = 3 ในเซิร์ฟเวอร์ที่มีการใช้งานจริง เพราะอาจกระทบกับประสิทธิภาพของเครื่องได้

รีสตาร์ตเซอร์วิส smb

[root@centos-6 ~]# service smb restart
Shutting down SMB services:          [ OK ]
Starting SMB services:               [ OK ]

เริ่มต้นจะทดสอบเรียกไฟล์แชร์จาก Windows 7 ที่ยังไม่ได้ปิดการเรียกแชร์ไฟล์โดยใช้ SMB1 protocol

จะขึ้นให้ใส่ Username, Password ถ้ากรอกถูกต้องก็จะสามารถเรียกแชร์ไฟล์ได้ตามปกติ

ลองมาดูข้อความในไฟล์ log ที่เกิดขึ้น ไฟล์จะถูกสร้างอยู่ใน /var/log/samba/ เป็นชื่อไฟล์ log. ตามด้วย IP ของเครื่อง Client ในที่นี้คือ 192.168.56.101 ที่เรียกเข้ามา

[root@centos-6 ~]# cat /var/log/samba/log.192.168.56.101
[2017/05/19 10:48:04.841439, 3] lib/access.c:338(allow_access)
Allowed connection from 192.168.56.101 (192.168.56.101)
 ...
[2017/05/19 10:48:04.842401, 3] smbd/negprot.c:598(reply_negprot)
Requested protocol [PC NETWORK PROGRAM 1.0]
[2017/05/19 10:48:04.842451, 3] smbd/negprot.c:598(reply_negprot)
Requested protocol [LANMAN1.0]
[2017/05/19 10:48:04.842475, 3] smbd/negprot.c:598(reply_negprot)
Requested protocol [Windows for Workgroups 3.1a]
[2017/05/19 10:48:04.842497, 3] smbd/negprot.c:598(reply_negprot)
Requested protocol [LM1.2X002]
[2017/05/19 10:48:04.842519, 3] smbd/negprot.c:598(reply_negprot)
Requested protocol [LANMAN2.1]
[2017/05/19 10:48:04.842540, 3] smbd/negprot.c:598(reply_negprot)
Requested protocol [NT LM 0.12]
[2017/05/19 10:48:04.842561, 3] smbd/negprot.c:598(reply_negprot)
Requested protocol [SMB 2.002]
[2017/05/19 10:48:04.842583, 3] smbd/negprot.c:598(reply_negprot)
Requested protocol [SMB 2.???]
[2017/05/19 10:48:04.842704, 3] smbd/negprot.c:419(reply_nt1)
using SPNEGO
[2017/05/19 10:48:04.842783, 3] smbd/negprot.c:704(reply_negprot)
Selected protocol NT LM 0.12

ข้อความจะแสดงว่ามีการเชื่อมต่อจาก 192.168.56.101 โดย protocol ที่เครื่อง client (ในที่นี้คือ Windows 7) รองรับและต้องการใช้ (Requested protocol) มีทั้ง LANMAN, NT LM, SMB 2

ผลลัพธ์จะเลือกใช้ (Selected protocol) เป็น NT LM 0.12

ถ้าลองทดสอบจาก Windows แต่ละเวอร์ชัน รายชื่อ Requested Protocol ก็จะแตกต่างกันไป

เพื่อป้องกัน WannaCry เราจะใช้คำสั่ง sc config เพื่อปิดการใช้งาน SMB1 บนเครื่อง client

หลังจากรันคำสั่ง sc config และรีสตาร์ตเครื่อง Windows เรียบร้อย ถ้าลองเรียกแชร์ไฟล์บน Samba ดูอีกที จะไม่สามารถเรียกได้

ลองดูในไฟล์ log จะเห็นข้อความดังนี้

[root@centos-6 ~]# cat /var/log/samba/log.192.168.56.101
[2017/05/19 11:00:16.298173, 3] lib/access.c:338(allow_access)
Allowed connection from 192.168.56.101 (192.168.56.101)
...
[2017/05/19 11:00:16.300074, 3] smbd/negprot.c:598(reply_negprot)
Requested protocol [NotSmb]
[2017/05/19 11:00:16.300228, 3] smbd/negprot.c:598(reply_negprot)
Requested protocol [NotSmb]
[2017/05/19 11:00:16.300279, 3] smbd/negprot.c:598(reply_negprot)
Requested protocol [NotSmb]
[2017/05/19 11:00:16.300326, 3] smbd/negprot.c:598(reply_negprot)
Requested protocol [NotSmb]
[2017/05/19 11:00:16.300673, 3] smbd/negprot.c:598(reply_negprot)
Requested protocol [NotSmb]
[2017/05/19 11:00:16.300765, 3] smbd/negprot.c:598(reply_negprot)
Requested protocol [NotSmb]
[2017/05/19 11:00:16.301001, 3] smbd/negprot.c:598(reply_negprot)
Requested protocol [SMB 2.002]
[2017/05/19 11:00:16.301110, 3] smbd/negprot.c:598(reply_negprot)
Requested protocol [SMB 2.???]
[2017/05/19 11:00:16.301298, 0] smbd/negprot.c:706(reply_negprot)
No protocol supported !
[2017/05/19 11:00:16.302119, 1] smbd/process.c:457(receive_smb_talloc)
 receive_smb_raw_talloc failed for client 192.168.56.101 read error = NT_STATUS_CONNECTION_RESET.
[2017/05/19 11:00:16.302388, 3] smbd/server_exit.c:181(exit_server_common)
Server exit (failed to receive smb request)

คือหลังจากใช้คำสั่ง sc config ปิดการใช้ SMB1 ตอนนี้ protocol ที่เครื่อง Windows รองรับจะเหลือแค่ SMB2 แต่เนื่องจากดีฟอลต์การติดตั้งเซิร์ฟเวอร์ Samba ไม่ได้เปิดใช้ SMB2 เอาไว้

ผลก็คือ “No protocol supported !” ไม่มี protocol ที่ใช้คุยกันได้ ระหว่าง Windows และ Samba

ใช้คำสั่ง testparm -v เพื่อดูดีฟอลต์คอนฟิกของ protocol

[root@centos-6 ~]# testparm -v | grep protocol
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[printers]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions

    max protocol = NT1
    min protocol = CORE

ดีฟอลต์คอนฟิก protocol สูงสุด (max) ที่เซิร์ฟเวอร์ใช้ได้คือ NT1 ต้องแก้ค่าคอนฟิกนี้เพื่อให้รองรับ SMB2 ได้

ใช้คำสั่ง man smb.conf ดูในส่วน max protocol (G) เพื่อดูค่าคอนฟิกที่สามารถใส่ได้

[root@centos-6 ~]# man smb.conf
...
    max protocol (G)
        The value of the parameter (a string) is the highest protocol level that will be supported by the server.

        Possible values are :
            · CORE: Earliest version. No concept of user names.
            · COREPLUS: Slight improvements on CORE for efficiency.
            · LANMAN1: First modern version of the protocol. Long filename support.
            · LANMAN2: Updates to Lanman1 protocol.
            · NT1: Current up to date version of the protocol. Used by  Windows NT. Known as CIFS.
            · SMB2: Re-implementation of the SMB protocol. Used by Windows Vista and newer.

protocol สูงสุดที่ Samba 3.6 รองรับได้ คือ SMB2

แก้ไขคอนฟิก smb.conf โดยระบุคอนฟิก max protocol = SMB2 ภายใต้ [global]

[root@centos-6 ~]# vi /etc/samba/smb.conf
[global]
    ...
    log level = 3
    max protocol = SMB2

รีสตาร์ตเซอร์วิส smb

[root@centos-6 ~]# service smb restart
Shutting down SMB services:           [ OK ]
Starting SMB services:                [ OK ]

ลองใช้ Windows เรียกแชร์ไฟล์บน Samba อีกครั้ง

ตัวอย่างข้อความที่ขึ้นในไฟล์ log

[root@centos-6 ~]# cat /var/log/samba/log.192.168.56.101
[2017/05/19 11:07:47.775645, 3] lib/access.c:338(allow_access)
Allowed connection from 192.168.56.101 (192.168.56.101)
...
[2017/05/19 11:07:47.776078, 3] smbd/negprot.c:598(reply_negprot)
Requested protocol [NotSmb]
[2017/05/19 11:07:47.776113, 3] smbd/negprot.c:598(reply_negprot)
Requested protocol [NotSmb]
[2017/05/19 11:07:47.776129, 3] smbd/negprot.c:598(reply_negprot)
Requested protocol [NotSmb]
[2017/05/19 11:07:47.776145, 3] smbd/negprot.c:598(reply_negprot)
Requested protocol [NotSmb]
[2017/05/19 11:07:47.776160, 3] smbd/negprot.c:598(reply_negprot)
Requested protocol [NotSmb]
[2017/05/19 11:07:47.776175, 3] smbd/negprot.c:598(reply_negprot)
Requested protocol [NotSmb]
[2017/05/19 11:07:47.776190, 3] smbd/negprot.c:598(reply_negprot)
Requested protocol [SMB 2.002]
[2017/05/19 11:07:47.776205, 3] smbd/negprot.c:598(reply_negprot)
Requested protocol [SMB 2.???]
[2017/05/19 11:07:47.776306, 3] smbd/negprot.c:704(reply_negprot)
Selected protocol SMB 2.002

หลังการแก้ไขค่าคอนฟิก max protocol ตอนนี้ Samba ก็สามารถรองรับ protocol SMB2 เพื่อให้ Windows ที่รองรับเข้ามาใช้งานได้แล้ว

ในระยะสั้นคงไม่สามารถยกเลิกการใช้งาน Windows เก่าๆ เช่น XP ได้  (อย่าลืมอัพเดท Windows) คงต้องจำเป็นต้องเปิดคอนฟิกให้สามารถเรียกแชร์ไฟล์แบบ SMB1 อยู่ ซึ่งบน Samba สามารถกำหนดคอนฟิกได้โดย min protocol

ส่วน  Windows ใหม่ๆ ที่รองรับ SMB2 แนะนำให้ใช้คำสั่ง sc config ปิดการใช้ SMB1 ไปเลย เพื่อป้องกันปัญหาในอนาคต

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

 

1 thought on “แก้ไขคอนฟิก Samba เพื่อรองรับ SMBv2”

Leave a Reply