Monday, April 28, 2014

Setup mongodb

Step 1: Add MongoDB Yum Repository
Add following content in yum repository configuration file /etc/yum.repos.d/mongodb.repo.
For 64bit Systems:
[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1
For 32bit Systems:
[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/i686/
gpgcheck=0
enabled=1
Step 2: Install MongoDB
Lets use yum package manager to install mongodb-org package, it will automatically install all its dependencies. To install any specific revision of mongodb specify package name with version likemongodb-org-2.6.1. Following command will install latest stable version available.
# yum install mongodb-org
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * atomic: www7.atomicorp.com
 * base: mirror.nbrc.ac.in
 * epel: mirrors.ispros.com.bd
 * extras: mirror.nbrc.ac.in
 * rpmforge: be.mirror.eurid.eu
 * rpmfusion-free-updates: mirror.smartmedia.net.id
 * updates: mirror.nbrc.ac.in
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package mongodb-org.i686 0:2.6.0-1 will be installed
--> Processing Dependency: mongodb-org-tools = 2.6.0 for package: mongodb-org-2.6.0-1.i686
--> Processing Dependency: mongodb-org-shell = 2.6.0 for package: mongodb-org-2.6.0-1.i686
--> Processing Dependency: mongodb-org-server = 2.6.0 for package: mongodb-org-2.6.0-1.i686
--> Processing Dependency: mongodb-org-mongos = 2.6.0 for package: mongodb-org-2.6.0-1.i686
--> Running transaction check
---> Package mongodb-org-mongos.i686 0:2.6.0-1 will be installed
---> Package mongodb-org-server.i686 0:2.6.0-1 will be installed
---> Package mongodb-org-shell.i686 0:2.6.0-1 will be installed
---> Package mongodb-org-tools.i686 0:2.6.0-1 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==========================================================================================
 Package                           Arch        Version           Repository          Size
==========================================================================================
Installing:
 mongodb-org                       i686        2.6.0-1           mongodb            4.6 k
Installing for dependencies:
 mongodb-org-mongos                i686        2.6.0-1           mongodb            6.7 M
 mongodb-org-server                i686        2.6.0-1           mongodb            8.9 M
 mongodb-org-shell                 i686        2.6.0-1           mongodb            4.2 M
 mongodb-org-tools                 i686        2.6.0-1           mongodb             88 M

Transaction Summary
==========================================================================================
Install       5 Package(s)                             
                                                       
Total download size: 108 M                             
Installed size: 270 M                                  
Is this ok [y/N]: y                                    
Downloading Packages:                                  
(1/5): mongodb-org-2.6.0-1.i686.rpm                              | 4.6 kB     00:00
(2/5): mongodb-org-mongos-2.6.0-1.i686.rpm                       | 6.7 MB     00:21
(3/5): mongodb-org-server-2.6.0-1.i686.rpm                       | 8.9 MB     00:27
(4/5): mongodb-org-shell-2.6.0-1.i686.rpm                        | 4.2 MB     00:16
(5/5): mongodb-org-tools-2.6.0-1.i686.rpm                        |  88 MB     04:24
----------------------------------------------------------------------------------------
Total                                                   327 kB/s | 108 MB     05:36
Running rpm_check_debug                                
Running Transaction Test                               
Transaction Test Succeeded                             
Running Transaction                                                                         
Warning: RPMDB altered outside of yum.                                                      
** Found 1 pre-existing rpmdb problem(s), 'yum check' output follows:                       
google-chrome-stable-34.0.1847.116-1.i386 has missing requires of libnss3.so(NSS_3.14.3)    
  Installing : mongodb-org-tools-2.6.0-1.i686                                                1/5
  Installing : mongodb-org-server-2.6.0-1.i686                                               2/5
  Installing : mongodb-org-mongos-2.6.0-1.i686                                               3/5
  Installing : mongodb-org-shell-2.6.0-1.i686                                                4/5
  Installing : mongodb-org-2.6.0-1.i686                                                      5/5
                                                                                            
Installed:                                                                                  
  mongodb-org.i686 0:2.6.0-1                                                                
                                                                                            
Dependency Installed:                                                                       
  mongodb-org-mongos.i686 0:2.6.0-1  mongodb-org-server.i686 0:2.6.0-1  
  mongodb-org-shell.i686 0:2.6.0-1 mongodb-org-tools.i686 0:2.6.0-1

Complete!

Step 3: Start MongoDB
Package mongodb-org-server provided MongoDB init script, Use that script to start service.
# service mongod start
Configure MongoDB to auto start on system boot.
# chkconfig mongod on
Step 4: Check MongoDB Version and Test Setup
Use following command to check installed mongodb version
# mongo --version

MongoDB shell version: 2.6.0
Connect MongoDB using command line and execute some test commands for checking proper working.
# mongo
> db.test.save( { a: 1 } )
> db.test.find()

  { "_id" : ObjectId("52b0dc8285f8a8071cbb5daf"), "a" : 1 }

Enabling authentication

The first thing to do before you can start making use of mongo’s UAC features it to enable authentication. Usually this is disabled by default.
This can be enabled either by editing your mongodb.conf file and adding the line
auth = true
You can also start mongod with the auth parameter.
Save the file, and reboot MongoDB.
service mongodb restart
That’s it! Your mongo server should be up and running! To test your Mongo configuration from another node (or to test authentication locally), run the command:
mongo <server_ip>/admin -u root -p <password>
to authenticate as root to make changes to the db structure or add users, or
mongo <server_ip>/project -u web_user -p <password>
to authenticate as web_user.

Install php driver

git clone https://github.com/mongodb/mongo-php-driver.git
cd mongo-php-driver
phpize
./configure
make
make install
echo "extension=mongo.so" >> /build/php/etc/php.ini


Monday, April 21, 2014

Cách sử dụng /etc/hosts.allow và /etc/hosts.deny

Hai tập tin này định nghĩa các quy tắt(luật) truy cập vào hệ thống ở tầng ứng dụng mạng. Dựa trên điều khiển TCPWappers và tôi thường gọi nó là một dạng tường lửa ở tầng ứng dụng. Số khác thì gọi là ACL(ACCESS CONTROL LIST).v.v.
IP access deny
Giới hạn truy cập vào hệ thống với hosts.deny

Thứ tự ưu tiên của /etc/hosts.allow trước, rồi đến /etc/hosts.deny. Nghĩa là nếu có trong hosts.allow thì không cần tìm trong hosts.deny nữa.
Cú pháp trong hosts.allow và hosts.deny như sau:
deamon: client [tùy chọn1: tùy chọn 2:...]
Trong đó:
  • deamon: là dịch vụ cần áp đặt luật. Nếu để là ALL sẽ áp dụng cho mọi dịch vụ.
  • client: là địa chỉ ip nguồn, host nguồn
  • phần tùy chọn sẽ trình bày trong bài viết sau
Ta chỉ cần nhớ nếu luật được ghi vào hosts.allow thì đồng nghĩa với việc cho phép, ngược lại ghi vào hosts.deny thì không cho phép.
Ví dụ:
Cho phép client 192.168.1.20 truy cập vào ssh.

Cách thực hiện
Bước 1: Mở tập tin /etc/hosts.allow, có thể sử dụng vi, nano, ee .v.v.
vi /etc/hosts.allow
Bước 2: Thêm dòng sau vào cuối tập tin
sshd: 192.168.1.20
Bước 3: Lưu lại nội dung tập tin ở trên.
Các ví dụ sau cách thực hiện cũng tương tự, có thể cần thay đổi tập tin hosts.allow hoặc hosts.deny tùy vào từng trường hợp như đã giải thích ở trên.
Mẹo:
Nếu có nhiều client ta sử dụng dấu ‘,’ để ngăn cách
Nếu muốn áp đặt cho một lớp mạng ta khai báo lớp mạng và kết thúc với dấu ‘.’
Ví dụ:
sshd: 192.168.1. , 192.168.3.2
Áp dụng luật trên với lớp mạng 192.168.1.0 và IP 192.168.3.2
Ví dụ:
Chặn mọi truy cập từ client có IP 192.168.10.10
ALL: 192.168.10.10
Ở đây deamon đã được thay thành ALL, tương đương với tất cả. Nghĩa là dịch vụ nào cũng chịu ảnh hưởng từ luật này. Nhớ là thêm nội dung đó vào tập tin hosts.deny nhé.
Gợi ý:
ALL có thể sử dụng cho deamon lẫn client.
Ví dụ:
Chặn tất cả client truy cập vào vsftp
vsftpd: ALL

Để bài viết ngắn gọn và truyền tải được nội dung, tôi xin dừng bài viết ở đây để đúc kết lại vài ý:
  • Cách sử dụng hosts.allow và hosts.deny cũng khá tương tự như các khái niệm ACL trên Cisco .v.v. Nói chung đây là một dạng điều khiển truy cập vào hệ thống ở mức ứng dụng.
  • Cũng có thể gọi đây là một dạng firewall đơn giản, vì đúng bản chất nó rất đơn giản.
  • Ngoài ra nếu muốn tìm hiểu thêm về firewall trên Linux ta nên tìm hiểu về netfilter và iptables. (Sẽ mất nhiều thời gian đào bới kiến thức về thằng firewall này đó :)) )
Link:http://phanquocly.com/networking/cach-su-dung-etc-hosts-allow-va-etc-hosts-deny/

Friday, April 18, 2014

Định dạng, format ổ cứng trên Linux



1. Sử dụng lệnh trên Linux 
Trên Linux, sử dụng lệnh fdisk để phân chia partition của ổ cứng, mkfs để format, mount để gắn một partition đã format vào một mount point, chỉnh sửa fstab để Linux có thể tự động mount khi boot.
Khi thêm một ổ cứng với vào hệ thống, cần dùng lệnh fdisk -l để kiểm tra xem Linux gán cho ổ cứng mới device nào.
# fdisk -l

Disk /dev/hda: 80.0 GB, 80060424192 bytes
255 heads, 63 sectors/track, 9733 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1               1         262     2104483+  82  Linux swap / Solaris
/dev/hda2   *         263        2873    20972857+  83  Linux
/dev/hda3            2874        9733    55102950   83  Linux

Disk /dev/sda: 40.0 GB, 40007761920 bytes
64 heads, 32 sectors/track, 38154 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

   Device Boot      Start         End      Blocks   Id  System
#
Trong ví dụ trên, có thể thấy trên máy đang có một harddisk 80GB được gán vào /dev/hda và chia thành 3 partition hda1, hda2, hda3. Harddisk thứ 2 40GB được gán vào /dev/sda, và harddisk này chưa được định dạng.
Cần chú ý rằng với một số Hệ điều hành Linux, sẽ quy định khe IDE0 tương ứng với /dev/hda, khe IDE1 tương ứng với /dev/hdb,... Các ổ cứng SCSI, hay USB sẽ được gán vào /dev/sda, /dev/sdb,...
Với /dev/sda mới chưa được định dạng nói trên, trước hết tao dùng lệnh fdisk
# fdisk /dev/sda

The number of cylinders for this disk is set to 38154.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

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)

Command (m for help):
Sau khi dùng lệnh fdisk /dev/sda, sẽ xuất hiện chế độ gõ lệnh của fdisk, ấn 'm' để đưa ra các hướng dẫn về lệnh của fdisk. Trong ví dụ này, chọn 'n' để thêm một partition mới.

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-38154, default 1): 1
Last cylinder or +size or +sizeM or +sizeK (1-38154, default 38154): 20480

Command (m for help):
Sau khi chọn 'n', xuất hiện các lựa chọn: lựa chọn 'p' để tạo primary partition – phân vùng có thể boot được, lựa chọn 'e' để tạo một phân vùng extended. Bước này chọn 'p'. Sau khi chọn 'p', chương trình sẽ hỏi Partition number (1-4), gõ số 1. Chương trình sẽ cho phép bạn thay đổi First cylinder và Last cylinder. Chọn First cylinder = 1 và Last cylinder =20480. Fdisk sẽ quay trở lại chế độ gõ lệnh chính của nó.
Tại chế đô gõ lệnh chính, dùng 'w' để ghi lại các thông tin nói trên.
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
#
Sau khi chọn 'w', các thông tin sẽ được fdisk ghi lại trên harddisk và fdisk tự động thoát, quay trở lại chế độ gõ lệnh của Linux. Tại đây, gõ lệnh fdisk -l để kiểm tra các thay đổi.
# fdisk -l

Disk /dev/hda: 80.0 GB, 80060424192 bytes
255 heads, 63 sectors/track, 9733 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1               1         262     2104483+  82  Linux swap / Solaris
/dev/hda2   *         263        2873    20972857+  83  Linux
/dev/hda3            2874        9733    55102950   83  Linux

Disk /dev/sda: 40.0 GB, 40007761920 bytes
64 heads, 32 sectors/track, 38154 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1       20480    20971504   83  Linux
#
Sau khi gõ lệnh fdisk -l, có thể nhận thấy một partition /dev/sda1 mới được tạo.

Để format partition này, sử dụng lệnh mkfs
# mkfs.ext3 /dev/sda1
mke2fs 1.38 (30-Jun-2005)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
2621440 inodes, 5242876 blocks
262143 blocks (5.00%) reserved for the super user
First data block=0
160 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

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

This filesystem will be automatically checked every 25 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
#
Tuỳ vào dự định của bạn tạo dạng hệ thống file cho /dev/sda1 là ext2, ext3 hay một định dạng khác mà tao sẽ dùng tham số thích hợp. Trong ví dụ trên, ta format /dev/sda1 với ext3.
Sau khi format, để sử dụng được /dev/sda1, cần phải mount nó vào một mount point, giả sử mount vào mount point /media/data, ta dùng lệnh sau:
# mount /dev/sda1 /media/data
Để Linux tự động mount /dev/sda1 vào mount point nói trên, cần phải thêm vào file /etc/fstab dòng sau: /dev/sda1 /media/data ext3 defaults 0 0. Ví dụ file /etc/fstab

# /etc/fstab
/dev/hda2 / reiserfs acl,user_xattr 1 1
/dev/hda3 /home reiserfs acl,user_xattr 1 2
/dev/hda1 swap swap defaults 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs noauto 0 0
debugfs /sys/kernel/debug debugfs noauto 0 0
usbfs /proc/bus/usb usbfs noauto 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
192.168.0.1:/home/centos4 /home/centos4_200 nfs defaults 0 0
/dev/sda1 /media/data ext3 defaults 0 0
Để kiểm tra partition nào được mount vào mount point nào dùng lênh df
# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/hda2             20972152   8155616  12816536  39% /
udev                    517332       164    517168   1% /dev
/dev/hda3             55101224  33054028  22047196  60% /home
/dev/sda1             20642412    131232  19462608   1% /media/data