Friday, December 01, 2006

lsof командын талаар товчхон

lsof гэдэг нь "LiSt Open Files" гэдгийн товчлол юм. Тэгэхээр нээлттэй файлуудын жагсаалтыг харуулдаг байх нь. good!

Файл гэдэгт юу юу орох вэ? Unix систем дээр бараг бүх зүйлийг файл гэж үзэж болно. Файл бол файл, директор бас нэг төрлийн онцгой файл, төхөөрөмжүүд мөн файл, /proc файлсистемийг аваад үзэх юм бол санах ой, процесс, сүлжээний холболтыг бүгдийг файлаар илэрхийлж болно. Файлыг процессууд хэрэглэх ба ихэвчлэн "нээлттэй" эсвэл "хаалттай" гэсэн хоёрхон төлөвт байдаг. Ер нь бол санах ойд ачаалагдан ажиллаж байгаа ямар нэг процессын хувьд холбогдох хоёртын файл, өгөгдөл эсвэл тохиргооны файлууд, цаашилбал түүнийг ашиглаж буй hardware төхөөрөмж "нээлттэй" төлөвт байна.

lsof-н энэ чадварыг ашиглан системийн хаана ямар үйл явц болж байгааг илрүүлэхэд хялбар болдог. Тиймээс ч lsof-г гадны халдлагыг илрүүлэхэд хэрэглэдэг байна. lsof-н тусламжтай ажиллаж байгаа процессын жагсаалтыг харж болно, үүгээрээ ps-г орлож чадна. Мөн сүлжээний холболтуудыг харж болно, үүгээрээ netstat-г орлож чадна. Дээр нь бид эдгээр процесс болон сүлжээний холболтуудын хэрэглэж байгаа бүх "нээлттэй" файлуудыг харж чадна.

нээлттэй портууд болон үүссэн сесс/session-ууд
-i тугын тусламжтай интернет холболттой холбоотой бүх нээлттэй байгаа файлууд болон "хүлээж байгаа үйлчилгээ"/listening service-н жагсаалтыг харж болно.

[root@test]# /usr/sbin/lsof -i more

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
syslogd 639 root 7u IPv4 1115 UDP *:syslog
rpc.statd 680 rpcuser 4u IPv4 1205 UDP *:32771
rpc.statd 680 rpcuser 5u IPv4 1192 UDP *:856
rpc.statd 680 rpcuser 6u IPv4 1208 TCP *:32768 (LISTEN)
sshd 715 root 3u IPv4 1258 TCP *:ssh (LISTEN)
named 23808 named 20u IPv4 162255 UDP test.mn:domain
named 23808 named 21u IPv4 162256 TCP test.mn:domain (LISTEN)
named 23808 named 22u IPv4 162257 UDP test.mn:domain
named 23808 named 23u IPv4 162258 TCP test.mn:domain (LISTEN)
named 23808 named 24u IPv4 162259 UDP *:32773

lsof -i TCP - тухайн систем дээр байгаа TCP Socket-руу хандаж байгаа бүх процессыг харуулна.

lsof -i tcp:53 - 53-р портон дээр ажиллаж байгаа процессыг харуулна.

lsof -р 578 - 578-р процессын ашиглаж байгаа ресурсуудыг харуулна.

lsof -с named - Линукс дээр нэг процессын хэд хэдэн тохиолдол/instance ажиллаж байх нь бий. -с тугын тусламжтайгаар ийм төрлийн ижил процессуудын ашиглаж байгаа ресурсуудыг харуулна.

lsof -u root - тухайн хэрэглэгчийн ашиглаж байгаа ресурсуудыг харуулна.

lsof командын бусад тугуудын талаар http://dmiessler.com/study/nix/commands/lsof/ хаягаас уншаарай.


Ажиллаж байгаа процессын устгагдсан файл
Нээлттэй боловч холбогдоогүй/unlinked файл гэдэг нь директор бүтэц дотор нэр нь байхгүй боловч, түүнд олгогдсон диск блокыг ямар нэг процесс хэрэглэж байгаа файлыг хэлнэ. Ийм төрлийн файл ls команданд өртөхгүй боловч программ түүнийг ашиглаж чадна гэсэн үг юм. Ийм төрлийн файлыг

# lsof +L1
+L1 нь link count нэгээс бага өөрөөр хэлбэл 0-тэй тэнцүү байгаа файлуудыг харуулна.

командын тусламжтай илрүүлж болно. Дээрх командыг өгсний дараа та устгагдсан мөртлөө ямар нэг процесс ашигласаар байгаа файлын жагсаалтыг дараах байдалтай харах болно.

COMMAND PID USER FD TYPE DEVICE SIZE NLINK NODE NAME
less 25677 root 4r REG 3,8 103362 0 32868 /home/test/myfile (deleted)


Устгасан файлыг lsof-н тусламжтай хэрхэн сэргээх вэ?
Бид дээр жишээн дээрээс устгасан файлыг ашиглаж байгаа процессын PID болон энэ файлын FD(file descriptor) утгыг олж мэдсэн билээ. Одоо бид /proc файлсистемийн тусламжтай энэ файлыг хялбархан сэргээж болно.

/proc/PID/fd директор дотор энэ процессын ашиглаж байгаа файлууд тоогоор тэмдэглэгдсэн линк байдлаар байрласан байгаа.

# cd /proc/25677/fd # ls -la
total 0
dr-x------ 2 root root 0 Dec 1 18:14 ./
dr-xr-xr-x 3 root root 0 Dec 1 18:14 ../
lrwx------ 1 root root 64 Dec 1 18:17 0 -> /dev/pts/0
lrwx------ 1 root root 64 Dec 1 18:17 1 -> /dev/pts/0
lrwx------ 1 root root 64 Dec 1 18:17 2 -> /dev/pts/0
lr-x------ 1 root root 64 Dec 1 18:17 3 -> /dev/tty
lr-x------ 1 root root 64 Dec 1 18:17 4 -> /home/remote/myfile\ (deleted)
# cp 4 /home/test/myfile2

PS: Энэ жишээ зөвхөн устгасан файлыг ямар нэг процесс ашиглаж байгаа үед сэргээхийг харуулсан болно.

GIAC Certified UNIX Security Administrator (GCUX)

SANS-н GIAC Certified UNIX Security Administrator(GCUX) боллоо би. Урамтай сайхан байнаа. 2 удаагийн тестээр шалгалтаа өгсөн. Ихэнх асуултууд нь 7 сард суусан сургалтын агуулгаас ирсэн байсан. FreeBSD-с өөр UNIX систем дээр ажиллаж үзээгүй надад Solaris-н талаарх асуултууд их бүрхэг байсан. Solaris-н материалыг цээжилж орсон, зарим асуултанд яалт ч үгүй мэдэхгүй тул тэглэсэн...

Үнэндээ энэ шалгалтыг өгье гэж бодоогүй явтал, сургалтан дээр танилцсан Sailata гээд нэг энэтхэг бүсгүй "би хувьдаа өгнө, харин чи өгөөд үз л дээ" гэж ятгаснаас сүүлийн өдөр нь амжиж бүртгүүлсэн юм. Хүн үнэхээр хичээвэл чадахгүй юм гэж байдаггүй юм байна гэж хэлмээр байна даа.

За тэгээд мэдээж намайг мэргэжлээрээ өсөж дэвжихэд нэмэр болсон MobiNet-н хамт олондоо, мөн MUUG-н нөхөддөө баярлаж явдаг шүү гэж хэлье.

Хичээвэл чадна шүү! Та нар шүү!