Wednesday, December 06, 2006

Centralized Logging буюу SyslogNG-н талаар товчхон

Central Logging Server буюу Төвлөрсөн Бүртгэлийн Серверийг SyslogNG буюу Syslog New Generation-ий тусламжтай хэрхэн зохион байгуулах талаар товчхон танилцуулъя.

Ач холбогдол: Хүмүүс ийм юм болохгүй байна, тэр нь сонин ажиллаад байна гэхэд миний хэлдэг ганц үг бол "Логоо шалга!". Системийнхээ логыг уншина гэдэг нь өвчтэй хүнээс таны юу өвдөж байна? гэж асуусантай яг адилхан санагддаг. Ихэнх тохиолдолд системийн яг юу нь болохгүй байгаа нь лог дээр дурайтал бичээтэй байдаг. Гэхдээ... лог уншина гэдэг цаг авсан ажил... хэрвээ олон сервертэй бол логыг уншаад дуусна гэж байхгүй юм болно. Тэгэхээр нэг арга зам бол бүх серверүүдийн логыг нэг сервер дээр цуглуулж, түүнийгээ өгөгдлийн баазруу хийгээд түүн дээрээ хайлт шүүлт хийх арга юм. Мэдээж веб интерфэйс байвал бүр сайн хэрэг... Тэгвэл энэ бүхнийг "SyslogNG + MySQL + php-syslog-ng"-н тусламжтай хийж болно.

Ажилллах зарчим: Тэгэхээр бүх логыг цуглуулж байх нэг сервер байна. Түүн дээр SyslogNG, MySQL суусан байх ба веб интерфэйс байдлаар php-syslog-ng ажиллана(мэдээж Apache+PHP суусан байх ёстой).
- Бусад серверүүд(client) логоо энэ серверрүү шиддэг байхаар тохируулагдсан байна.
- SyslogNG TCP/UDP 514-р портон дээр логуудыг хүлээн авч энгийн файлруу эсвэл pipe файлруу SQL Insert query байдлаар бичнэ.
- Бид энэ pipe файлыг аван цааш MySQL баазруу бичнэ.
- Хэрэглэгч php-syslog-ng веб интерфэйсээр бааз дээр хайлт шүүлт хийх боломжтой болох юм.

1. Client машиныг тохируулах
Ер нь бол бүх л сервер машин, сүлжээний төхөөрөмжүүд системийн логыг өөр дээрээ бүртгэж байдаг бөгөөд түүнийгээ syslog гэсэн програмын тусламжтай гүйцэлдүүлж байдаг. Client дээр зарчмын хувьд syslog болон syslog-ng аль нь ажиллаж болно. Гэхдээ syslog-ng-г шинээр суулгаж ажил удаж байснаас бэлэн суучихсан syslog-г ашиглах нь хялбар тул syslog-г хэрхэн тохируулах жишээг харуулав.

Жишээ нь: /etc/syslog.conf файл дотор байгаа:

*.info;mail.none;authpriv.none;cron.none /var/log/messages
authpriv.* /var/log/secure
mail.* /var/log/maillog


гэсэн мөрүүдийг:

*.info;mail.none;authpriv.none;cron.none /var/log/messagesauthpriv
*.info;mail.none;authpriv.none;cron.none @xxx.xxx.xxx.xxx

.* /var/log/secure
.* @xxx.xxx.xxx.xxx
mail.* /var/log/maillog
mail.* @
xxx.xxx.xxx.xxx

PS: xxx.xxx.xxx.xxx
оронд лог цуглуулах серверийн хаягыг бичнэ.

болгон өөрчилнө. Syslog-н level, facility-н талаар болон хэрхэн тохируулах талаар дэлгэрэнгүй мэдээллийг интернетээс аваарай.

2. SyslogNG серверийг суулгах болон тохируулах
Интернетээс нэг аятайхан заавар олсон юм. Энэ нь "Implementation of Central Logging Server using syslog-ng" гээд Энэтхэгийн CERT-с гаргасан гарын авлага байгаан. Syslog-ng серверийг суулгах тохируулах талаар маш дэлгэрэнгүй ойлгомжтой бичсэн байгаа тул энд нуршаад хэрэггүй биз. Та бүхэн

6.1 Installation
6.2 Configuring Server
6.4 Filter syslog messages

хэсгүүдийг уншаарай. Суулгахад libol багцийг заавал суулгах хэрэгтэй болно. Тохируулга хийхийн тулд syslog-ng.conf файлыг шинээр үүсгэх хэрэгтэй байгаа. Мөн хэрэггүй логуудыг шүүж хадгалахын тулд filter{} директивийг ашиглах хэрэгтэй болно. За тэгээд жишээ тохиргооны файлыг харвал бүх юм ойлгогдох байх.

Pipe файлыг дараах байдалтай үүсгэнэ:

# mkfifo /tmp/mysql.pipe
# chmod 660 /tmp/mysql.pipe

Бүх тохиргоог зөв хийсэн бол та логуудыг Insert query байдлаа /tmp/mysql.pipe файд дотор харах болно. Мөн энэ файл томорсоор байх ёстой.

3. pipe файлыг MySQL баазруу бичих
Юуны түрүүнд MySQL сервер дээрээ logs нэртэй өгөгдлийн сан үүсгэх хэрэгтэй. Ямар талбартай үүсгэхийг "Implementation of Central Logging Server using syslog-ng" зааврын 11-р хуудаснаас үзнэ үү.

Үүний дараа дараах командыг өгч pipe файлыг өгөгдлийн санруу оруулах процессыг эхлүүлнэ:

# mysql syslog < /tmp/mysql.pipe &

4. php-syslog-ng ажиллуулах
php-syslog-ng нь энгийн php файлууд тул source tarball-г задлан веб серверийнхээ document root дотор байрлуулна. Үүний дараа эдгээр php скриптээс өгөгдлийн санруу хандах эрхтэй хэрэглэгчийн эрхийг MySQL сервер дээр үүсгэн, нууц үгийн хамт config/config.php файл дотор кодлож өгнө.

Одоо та вебээр хандан admin/admin гэсэн хэрэглэгчийн нэр нууц үгийг оруулан хайлт шүүлтийг хийх боломжтой болно. Бүх зүйл ажиллаж байвал таны лог дараах байдалтай харагдах болвуу.

Та анх удаа логин хийж орсны дараа нууц үгээ солихоо мартуузай. Мөн хязгаарлагдмал эрхтэй өөр хэрэглэгчдийн эрхийг нээж өгөх боломжтой санаарай.

NOTE: syslog-ng-н нэг давуу тал гэвэл UDP-с гадна(syslog зөвхөн UDP протоколыг дэмждэг) TCP протоколыг дэмждэг болсон явдал юм. Ингэснээр галтханын цаана наанаас SSH Tunneling ашиглан логыг аюулгүйгээр бүртгэх боломжтой болдог.

Monday, December 04, 2006

Ubuntu -i hack

Unix төрлийн системүүдийн хамгийн сонгодог хэлбэрийн хайк/hack-н нэг бол "shell escape" буюу бүрхүүлийн цоорхойг ашиглан бага эрхтэй хэрэглэгчээс root бүрхүүлрүү орох явдал юм. Олон арга хэлбэрээр "shell escape" хийж болно. Нэг жишээ бол бүрхүүлийг "-i" тохируулга/option-тайгаар дуудах юм. Өөрөөр хэлбэл "/bin/sh -i" командын тусламжтай "interactive shell"-рүү орох боломжтой. За тийм байдаг байж, тэгээд юу нь тийм сонин байна?... Тэгвэл root эрхтэй бүрхүүлрүү орчихвол асуудал их сонирхолтой болоод ирнэ.

Жишээ нь: test.pl гэсэн setIUD скрипт байлаа гэж бодъё.

% ln -s /home/baynaa/test.pl -i
% -i
#

Гэхдээ энэ hack бүр 1989 онд анх бүртгэгдсэн бөгөөд орчин үеийн Unix систем дээр ажиллахгүй! "-i: Command not found." гэх байх шүү, гэхдээ итгэхгүй байвал туршаад үзээрэй л дээ.

Гэтэл нэг сонин зүйл олж мэдсэн маань гэвэл Ubuntu сервер дээр sudo-тэй хамт "-i" тохируулга ажилладийн байна... ёстой гайхсан. "-i" тохируулгыг иймэрхүү hack-д хэрэглэхээ аль эрт болисон байх гэж бодож байсан. Ubuntu Server дээр:

% sudo -i
#

гэнгүүт шууд л root бүрхүүлрүү орчих юм(гэхдээ мэдээж sudoers дотор идэвхжүүлсэн хэрэглэгчийн хувьд). Redhat, FreeBSD хоёр дээр туршаад үзсэн чинь хоёулан дээр нь "sudo: Illegal option -i" гэж гарч ирж байна.