การทำ secure /tmp ให้กับ linux server

Directory /tmp เป็นตำแหน่งเราพบผู้ไม่หวังดี หรือ Hacker พยายามทำการโจมตีหรือเจาะระบบอยู่บ่อยครั้ง
ปัญหาจะเกิดจาก application ที่ใช้การ upload ไฟล์ไปเก็บไว้ที่ /tmp ชั่วคราว เปิดโอกาสให้ Hacker ที่อาจ
เจอช่องโหว่ด้านความปลอดภัยทำการ upload trojan ขึ้นมาที่ /tmp แล้วสั่งให้ไฟล์ทำงานได้

ทำให้การทำ secure /tmp เป็นขั้นการตั้งค่ากฎความปลอดภัยขั้นพื้นฐานให้กับ Linux Server อย่างนึงที่ไม่ควรหลีกเลี่ยง
การทำ secure /tmp นี้จะเป็นการป้องกันไม่ให้มีการ execute หรือสั่งให้ไฟล์ที่อยู่ใน /tmp ทำงานได้ทุกกรณี

สำหรับ Server ที่มีการแยก partition /tmp ไว้ตอนติดตั้งครั้งแรก
ขั้นตอนแรกให้สำรองไฟล์ fstab ไว้ก่อนป้องกันการแก้ไขที่ผิดพลาด
cp /etc/fstab /etc/fstab.bak

แก้ไขไฟล์ (ค่อยๆ ทำนะครับหากแก้ไขไฟล์นี้ผิดพลาดอาจทำให้ server boot ไม่ขึ้น)
vi /etc/fstab

หาตำแหน่งที่ mount /tmp partition ไว้ จากนั้นเปลี่ยนรูปแบบการ mount /tmp ให้
ยกตัวอย่างค่ามาตรฐานที่พบเป็น defaults 1 2

ให้เปลี่ยนเป็น defaults,nosuid,noexec,rw 0 0

เรียบร้อยแล้วให้ทำการ remount /tmp ใหม่
mount -o remount,nosuid,noexec /tmp

ตรวจสอบดูว่า mount /tmp แบบ nosuid noexec เรียบร้อยแล้ว
cat /proc/mounts | grep /tmp

จะพบว่า directory /tmp ถูกป้องกันไม่ให้ execute file ได้แล้ว
[root@server ~]# cat /proc/mounts | grep /tmp
/dev/sda /tmp ext4 rw,nosuid,noexec,relatime,discard,data=ordered 0 0

////////////////////////

สำหรับ Server ที่ไม่ได้ทำการแยก partition /tmp ไว้ (เช่น VPS, Cloud Server)
ให้ดำเนินการตามขั้นตอนดังนี้

สร้าง file ขนาด 1GB สำหรับใช้เป็น /tmp
dd if=/dev/zero of=/dev/tmpDIR bs=1024 count=1000000

Format File ที่สร้างขึ้นเป็น ext4
/sbin/mkfs.ext4 /dev/tmpDIR

จะพบคำถาม /dev/tmpDIR is not a block special device
จุดนี้ให้ตอบ y เพื่อตกลงครับ

สร้าง Directory สำรองเก็บ /tmp ปัจจุบัน
mkdir /tmpbak

ย้ายไฟล์ใน /tmp เดิมออไปเก็บไว้ชั่วคราว
cp -Rpf /tmp /tmpbak

แก้ไข /etc/fstab เพื่อให้ mount /tmp ที่เราสรา้งทุกครั้งเมื่อ reboot server
vi /etc/fstab

ให้เพิ่ม
/dev/tmpDIR     /tmp    ext4    loop,nosuid,noexec,rw 0 0

ทำการ mount /tmp เข้าไปใหม่แบบไม่ให้ execute ได้
mount -o loop,noexec,nosuid,rw /dev/tmpDIR /tmp

ตรวจสอบดูว่า mount /tmp แบบ nosuid noexec เรียบร้อยแล้ว
cat /proc/mounts | grep /tmp

จะพบว่า directory /tmp ถูกป้องกันไม่ให้ execute file ได้แล้ว
[root@server ~]# cat /proc/mounts | grep /tmp
/dev/sda /tmp ext4 rw,nosuid,noexec,relatime,discard,data=ordered 0 0

Was this article helpful?