Bài đăng nổi bật

Hướng dẫn thay đổi thư mục root mặc định của Docker trên Linux

Hoàn cảnh: người viết gặp một trường hợp như này Được team hạ tầng cấp cho một máy chủ gồm 2 phân vùng lưu trữ, 1 phân vùng 20GB được gắn và...

Hiển thị các bài đăng có nhãn linux. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn linux. Hiển thị tất cả bài đăng

13 tháng 2, 2019

Sử dụng phân vùng swap trên môi trường Linux

1. Trước tiên cần hiểu SWAP trên môi trường Linux là gì?
Có thể hiểu đơn giản phân vùng SWAP là  một vùng nhớ bổ sung thêm cho bộ nhớ của hệ thống (RAM), nằm trên ổ đĩa cứng. Nếu bộ nhớ hệ thống bị đầy thì một số vùng nhớ sẽ được đưa xuống SWAP thay vì bị hệ thống hủy tiến trình.
Tuy nhiên, phân vùng SWAP có một vấn đề là do nó là một phần bộ nhớ nằm trên ổ đĩa (HDD hoặc SDD) nên tốc độ của nó sẽ chậm hơn so với tốc độ bộ nhớ chính nên không có nghĩa là bạn có thể sử dụng nó để thay thế hoàn toàn cho bộ nhớ chính.
2. Vậy nguyên tắc hoạt động của phân vùng SWAP như nào?
Có một hiểu lầm phổ biến về việc sử dụng phân vùng SWAP trên các hệ thống, đó là: việc sử dụng phân vùng SWAP gây ảnh hưởng tới hiệu năng của toàn bộ hệ thống do tốc độ đọc ghi trên phân vùng này chậm hơn tốc độ đọc ghi trên RAM. Điều này là hoàn toàn sai lầm. Trong trường hợp hệ thống của bạn có đủ RAM để hoạt động, việc bạn có cấp thêm phân vùng SWAP cho hệ thống hay không cũng không ảnh hưởng gì tới hiệu năng của hệ thống do hệ thống không phải liên tục chuyển đổi giữa RAM và SWAP. Còn trong trường hợp bạn không có đủ RAM thì sao?  Như các bạn đã biết thì bộ nhớ RAM có giá thành cao hơn rất nhiều so với giá của ổ đĩa và rõ ràng là bạn không thể cứ tăng RAM lên liên tục cho hệ thống, khi đó phân vùng SWAP sẽ giải quyết bài toán này cho bạn. Hãy xem ví dụ dưới đây:
  • Nếu bạn không sử dụng phân vùng SWAP và khi RAM của bạn bị sử dụng hết, kernel của hệ thống sẽ lựa chọn một/nhiều tiến trình mà nó nghĩ là cần phải loại bỏ (việc lựa chọn như nào phụ thuộc vào thuật toán được trang bị cho kernel) và loại bỏ chúng (kill).
  • Nếu bạn sử dụng phân vùng SWAP thì khi RAM của bạn bị sử dụng hết, kernel của hệ thống sẽ lựa chọn một vùng nhớ (memory page) ít được sử dụng nhất để đẩy xuống phân vùng SWAP để giải phóng RAM sử dụng vào các mục đích khác. Việc này có thể làm chậm hệ thống một chút nhưng sẽ đảm bảo cho ứng dụng của bạn không bị ảnh hưởng bới những ứng dụng khác.

Tuy nhiên, bạn cần luôn nhớ trong trường hợp nếu bạn có phân vùng SWAP mà vẫn bị hết thì tiến trình sẽ vẫn bị loại bỏ bởi kernel.
3. Vậy câu hỏi đặt ra ở đây là liệu có thực sự cần phân vùng SWAP?
Câu trả lời ở đây chính xác là TỐT NHẤT BẠN NÊN SỬ DỤNG, bởi lý do tôi đã nêu ở trên: nếu bạn đủ RAM thì hệ thống không phải thường xuyên đổ vùng nhớ xuống SWAP nên sẽ không bị ảnh hưởng tới hiệu năng hệ thống, còn trong trường hợp bị thiếu RAM (điều mà bạn không biết chắc lúc nào sẽ xảy ra) thì SWAP sẽ giúp cho các ứng dụng của bạn không bị ảnh hưởng.
4. Vậy tạo phân vùng SWAP như nào?
Để tạo phân vùng SWAP bạn cần có quyền sudo trên hệ thống.
Dùng lệnh dd để tạo file swap trên thư mục gốc của hệ thống, trong đó bs là kích thước block (block size) và count là số block., trong ví dụ dưới đây là tạo một file swap 4GB
sudo dd if=/dev/zero of=/swapfile bs=1G count=4
Trong đó:
- bs và count: có thể là c = 1, w = 2, b = 512, kB = 1000, K = 1024,  MB = 1000 * 1000, M = 1024 * 1024, xM = M, GB = 1000 * 1000 * 1000, G = 1024 * 1024 * 1024 cứ như thế với T, P, E, Z và Y
Cập nhật quyền read, write cho file swap:
sudo chmod 600 /swapfile
Cài đặt phân vùng swap:
sudo mkswap /swapfile
Cho phép hệ thống sử dụng file swap này là vùng nhớ swap:
sudo swapon /swapfile
Kiểm tra xem đã làm đúng các thao tác chưa:
sudo swapon -s
Hoặc:
sudo swapon --show
Cho phép hệ thống sử dụng phân vùng swap vừa tạo ngay cả khi bị khởi động lại:
sudo vi /etc/fstab
Thêm vào dòng sau:

/swapfile swap swap defaults 0 0 
Kiểm tra lại xem fstab đã được chưa bằng lệnh:
mount -a
Nếu không có thông báo lỗi nào hiện ra thì đã thêm vào fstab thành công.
Tham khảo thêm tại:
https://linuxize.com/post/create-a-linux-swap-file/

03 tháng 1, 2017

Hướng dẫn sử dụng Iptables nâng cao

Trong bài viết trước tôi đã có giới thiệu các kiến thức cơ bản về iptables.
Trong bài này, tôi sẽ hướng dẫn cụ thể các bạn cách sử dụng iptables để bảo vệ hệ thống của mình.

Một lưu ý trước khi sử dụng iptables để tránh xảy ra các vấn đề không mong muốn:

  • Nên bắt đầu sử dụng Iptables với hướng tiếp cận Accept từ mọi nguồn hoặc Drop từ mọi nguồn (Cái này bạn cần xác định xem nhu cầu của mình là số lượng cổng mở nhiều hơn hay số lượng cổng muốn đóng là nhiều hơn - tương ứng với Accept all và Drop all)
  • Nên cho một địa chỉ nguồn nằm trong danh sách Accept all để tránh việc sau khi chạy iptable ta không thể remote hệ thống.
  • Mức độ ưu tiên sẽ là từ trên xuống và nếu gặp một luật khớp thì các luật phía sau sẽ bị bỏ qua.
Dưới đây là một số tùy chọn thường dùng:
  • A: nối tiếp luật vào một bảng luật có sẵn. Ví dụ nếu ta dùng:
    iptables -A INPUT -s 1.2.3.4 -j DROP
    Có nghĩa là thêm một luật vào cuối cùng của bảng INPUT.
  • I: chèn luật lên đầu một bảng luật có sẵn.
  • s: ip máy chủ sẽ được áp dụng luật.
  • j: luật sẽ áp dụng là gì.
    ACCEPT: cho phép thông luồng
    DROP: cấm luồng và không thông báo gì cho máy kết nối
    REJECT: cấm luồng và thông báo cho máy kết nối
    LOG: thông luồng nhưng có ghi lại log.
  • dport: cổng áp dụng là gì.
  • m -conntrack: áp dụng luật với trạng thái của kết nối (thường đi với tùy chọn --ctstate)
  • ctstate: định nghĩ các trạng thái sẽ áp dụng luật, bao gồm:
    NEW: là các kết nối mới mà hệ thống chưa gặp bao giờ.
    RELATED: là kết nối mới nhưng có liên quan tới kết nối đã được cho phép.
    ESTABLISHED: là kết nối đã được thiết lập.
    INVALID: là kết nối mà hệ thống không thể nhận diện.
  • p: giao thức của kết nối, có thể là TCP hoặc UDP
  • i: giao diện kết nối.
  • d: đích kết nối.
Dưới đây là một số thủ thuật khi sử dụng Iptables:
  • Với tham số "d", Ip có thể có định dạng a.b.c.d/x.y.z.w, hoặc a.b.c.d/x. Trong đó a.b.c.d là địa chỉ IP còn x.y.z.w hoặc x là IP mask.
  • Với tham số "i", đầu vào có thể sử dụng thêm tùy chọn:
    • ! - nghĩa là áp dụng trừ giao diện này.
    • + - nghĩa là chỉ áp dụng giao diện này.
  • Với tham số dport: có thể chỉ ra dải cổng cần tác động theo cấu trúc a:b, là cổng tác động bắt đầu từ a tới b.

Tham khảo:

13 tháng 9, 2014

fstab trong Linux

Fstab là gì? Hiểu nôm na nó là một tập tin hỗ trợ việc quản lý gắn kết (mount) và sử dụng các phân vùng của hệ điều hành.
Trong bài viết này, tôi sẽ giới thiệu cho bạn cách để làm chủ tập tin cấu hình này, tất nhiên là chỉ với những kiến thức nằm trong tầm hiểu biết của cá nhân tôi.
Cấu trúc chung của một fstab bao gồm các dòng có nội dung như sau:

[Device] [Mount Point] [File System Type] [Options] [Dump] [Pass]

Trong đó:
Device: là thiết bị hoặc phân vùng (có thể là đường dẫn của tập tin đại diện hoặc UUID của đối tượng), device được ở đây còn có thể là thiết bị mạng, phân vùng chia sẻ,...
Có thể xem thông tin UUID của thiết bị bằng lệnh:  sudo blkid
Một ổ phân vùng thường có đường dẫn dạng: /dev/sdxy
 Hoặc có dạng LABEL=label
Hoặc các dạng ổ mạng, chia sẻ:
  • Samba: //server/share
  • NFS: //server:/share
  • SSHFS : sshfs#user@server:/share
Mount point: địa chi gắn kết thiết bị, ví dụ /opt/data/
File System Type: định dạng của thiết bị, có thể là:
  • auto
  • vfat: dành cho các phân vùng có định dạng FAT
  • ntfs, ntfs-3g: dành cho các phân vùng có định dạng NTFS
  • ext2, ext3, ext4, jfs, reiserfs
  • udf, iso9660: dành cho các ổ đĩa CD, DVD,
  • swap.
Options: các tùy chọn áp dụng trên phân vùng, được phân cách bằng dấu phẩy (,)
  •  sync/async: tất cả các thao tác đọc, ghi trên thiết bị phải ở dạng đồng bộ/bất đồng bộ
  • auto: tự động gắn kết phân vùng khi khởi động hệ điều hành.
  • noauto: không tự động gắn kết phân vùng khi khởi động hệ điều hành.
  • dev/nodev: tùy chọn này hiểu nôm na là cho phép hoặc không cho phép coi một node nằm ngoài thư mục /dev/ là một thiết bị (ví dụ nếu dùng nodev thì hệ điều hành sẽ coi việc định nghĩa thiết bị tại đường dẫn /home/dev/sda là bất hợp pháp).
  • exec/noexec: cho phép hoặc không cho phép thực thi một tập tin có quyền exec trên thiết bị này.
  • suid/nosuid: cho phép hoặc không cho phép các thao tác với các bit suid hoặc sgid
  • ro: thiết bị ở dạng chỉ đọc.
  • rw: thiết bị ở dạng đọc và ghi.
  • user: cho phép người dùng có thể gắn kết ổ này, tùy chọn này sẽ tự động thực thi các tùy chọn rw, suid, exec, auto, nouser và async
  • nouser: chỉ cho phép người dùng root gắn kết ổ, tùy chọn này tương ứng với tùy chọn defaults.
  • defaults: bao tương ứng với các tùy chọn rw, suid, dev, exec, auto, nouser, async.
  • _netdev: đây là một thiết bị mạng, chỉ thực hiện gắn kết sau khi khởi động card mạng. Chỉ có hiệu lực với các định dạng nfs và fstype.
Dump: bật hoặc tắt chế độ backup cho ổ đĩa, có giá trị là 0 - tắt hoặc 1 - bật.
Pass: định nghĩa thứ tự để ứng dụng fsck kiểm tra thiết bị nếu gặp lỗi trong quá trình khởi động, thường sẽ là 2, 1 chỉ nên dùng cho phân vùng root, 0 có nghĩa là tắt
Dưới đây là một ví dụ về nội dung tập tin fstab:

# /etc/fstab: static file system information.
#
#                

proc  /proc  proc  defaults  0  0
# /dev/sda5
UUID=be35a709-c787-4198-a903-d5fdc80ab2f8  /  ext3  relatime,errors=remount-ro  0  1
# /dev/sda6
UUID=cee15eca-5b2e-48ad-9735-eae5ac14bc90  none  swap  sw  0  0

/dev/scd0  /media/cdrom0  udf,iso9660  user,noauto,exec,utf8  0  0
Và đây là một ví dụ về tập tin fstab quản lý một thiết bị mạng:
# FAT ~ Linux calls FAT file systems vfat)
# /dev/hda1
UUID=12102C02102CEB83  /media/windows  vfat auto,users,uid=1000,gid=100,dmask=027,fmask=137,utf8  0  0

# NTFS ~ Use ntfs-3g for write access (rw) 
# /dev/hda1
UUID=12102C02102CEB83  /media/windows  ntfs-3g  auto,users,uid=1000,gid=100,dmask=027,fmask=137,utf8  0  0

# Zip Drives ~ Linux recognizes ZIP drives as sdx'''4'''

# Separate Home
# /dev/sda7
UUID=413eee0c-61ff-4cb7-a299-89d12b075093  /home  ext3  nodev,nosuid,relatime  0  2

# Data partition
# /dev/sda8
UUID=3f8c5321-7181-40b3-a867-9c04a6cd5f2f  /media/data  ext3  relatime,noexec  0  2

# Samba
//server/share  /media/samba  cifs  user=user,uid=1000,gid=100  0  0
# "Server" = Samba server (by IP or name if you have an entry for the server in your hosts file
# "share" = name of the shared directory
# "user" = your samba user
# This set up will ask for a password when mounting the samba share. If you do not want to enter a password, use a credentials file.
# replace "user=user" with "credentials=/etc/samba/credentials" In the credentials file put two lines
# username=user
# password=password
# make the file owned by root and ro by root (sudo chown root.root /etc/samba/credentials && sudo chmod 400 /etc/samba/credentials)

# NFS
Server:/share  /media/nfs  nfs  rsize=8192 and wsize=8192,noexec,nosuid
# "Server" = Samba server (by IP or name if you have an entry for the server in your hosts file
# "share" = name of the shared directory

#SSHFS
sshfs#user@server:/share  fuse  user,allow_other  0  0
# "Server" = Samba server (by IP or name if you have an entry for the server in your hosts file
# "share" = name of the shared directory

07 tháng 5, 2014

Cơ bản về tường lửa trên Linux với Iptables

Bài viết này mình chỉ tập trung vào một số kiến thức cơ bản về tường lửa trên Linux với ứng dụng Iptables.
Trước khi đi vào bài viết, có một số note trước khi bắt đầu bạn cần lưu ý:
  • Nguyên tắc áp dụng luật trên Iptables: áp dụng theo thứ tự từ trên xuống, nếu không tìm thấy luật nào thì chuyển sang dòng tiếp theo, nếu khớp với một luật thì iptables sẽ áp dụng luật đó và ngừng kiểm tra dòng tiếp theo.
  • Để sao lưu các luật trong iptables ta dùng lệnh service iptables save, tập tin sao lưu mặc định sẽ nằm ở /etc/sysconfig/iptables.
  • Để khôi phục các luật trong iptables ta dùng lệnh  iptables-restore < /etc/sysconfig/iptables.
Bây giờ ta bắt đầu đi vào tìm hiểu.
Iptables bao gồm 3 tập tin là:
  • /etc/init.d/iptables – là kịch bản điều kiển bao gồm start|stop|restart và save.
  • /etc/sysconfig/iptables – Vị trí sao lưu luật.
  • /sbin/iptables – ứng dụng chạy.
Iptables bao gồm 3 bảng:
  • Filter
  • NAT
  • Mangle
Hiện tại, iptables bao gồm 4 chain:
  • INPUT: dành cho các luồng đi vào hệ thống
  • OUTPUT: dành cho các luồng đi ra từ hệ thống
  • FORWARD: dành cho các luồng đi qua hệ thống từ các giao diện khác (?)
  • RH-Firewall-1-INPUT: luồng do người dùng tự định nghĩa.
Lưu ý: Các thông tin ở trên có thể hơi khác biệt trên các phiên bản hệ điều hành khác nhau.
Để bật, tắt hoặc khởi động lại iptables ta dùng các lệnh như sau:
# /etc/init.d/iptables start 
# /etc/init.d/iptables stop
# /etc/init.d/iptables restart
Để yêu cầu mỗi khi khởi động lại hệ điều hành, iptables tự động được bật ta chạy lệnh sau:
#chkconfig --level 345 iptables on
Để sao lưu các luật trong iptables ta dùng lệnh sau:
#service iptables save
Mặc định dữ liệu sau lưu sẽ nằm tại /etc/sysconfig/iptables. Dữ liệu này có thể dùng để phục hồi lại cho iptables sau này.
Để kiểm tra trạng thái của iptables ta dùng lệnh sau, với -L là liệt kê danh sách luật, -n là hiển thị dưới dạng số, -v là hiển thị chi tiết:
[root@tecmint ~]# iptables -L -n -v

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    6   396 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 5 packets, 588 bytes)
 pkts bytes target     prot opt in     out     source               destination
Để thêm các đánh dấu dòng khi hiển thị trạng thái của iptables ta dùng thêm tùy chọn --line-numbers. Với tham số này ta có thể sử dụng số dòng để thêm, bớt hoặc xoá các luật chỉ định.
[root@tecmint ~]# iptables -n -L -v --line-numbers

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1       51  4080 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
3        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
4        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 45 packets, 5384 bytes)
num   pkts bytes target     prot opt in     out     source               destination
Để xóa toàn bộ luật trong iptables ta dùng lệnh sau:
[root@tecmint ~]# iptables -F
 Xóa hoặc chèn thêm một luật. Trước tiên ta cần phải hiểu sơ qua các luật trong iptables. Lênh dưới đây sẽ hiển thị tất cả các luật trong INPUT, OUTPUT của iptables, các thông số này sẽ giúp ta có thể dễ dàng xóa hoặc thêm các luật mới:
[root@tecmint ~]# iptables -L INPUT -n --line-numbers

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

[root@tecmint ~]# iptables -L OUTPUT -n --line-numbers
Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
Giả sử ta muốn xóa luật thứ 5 trong INPUT, ta phải nhập lệnh sau:
[root@tecmint ~]# iptables -D INPUT 5

Giả sử ta muốn thêm một luật vào giữa luật số 4 và 5 của INPUT ta dùng lệnh sau:
[root@tecmint ~]# iptables -I INPUT 5 -s ipaddress -j DROP
Trên đây là những kiến thức cơ bản với iptables. Để có thể hiểu thêm chi tiết về Iptables tôi sẽ mạn phép trình bày ở một bài viết khác.

03 tháng 5, 2012

crontab trong Linux

Crontab trong linux tương tự như một tiến trình lập lịch, nó giúp người dùng có thể chỉ định khi nào thì hệ thống sẽ chạy một lệnh, kịch bản,.... đã định sẵn.
Tương ứng với mỗi người dùng sẽ có một crontab riêng.
Crontab sẽ không bị xóa khi hệ thống bị khởi động lại.
Crontab không hoạt động thay thế chức năng startup, và hoàn toàn không giống chức năng startup của hệ điều hành.
Để tạo mới, sửa một crontab, ta dùng lệnh sau:
crontab -e
Cấu trúc nội dung một crontab như sau:
Ví dụ: 0 12 14 2 * ls -l > /var/log/log.log
  • Mỗi lệnh trong crontab được đặt trong một dòng.
  • Comment được bắt đầu bằng ký tự "#"
  • Cấu trúc lệnh trong crontab:
    [min][space][hour][space][dayofmonth][space][monthofyear][space][dayofweek][space][command]
  • Trong đó:
    min: phút, (0-59)
    hour: giờ trong ngày, (0-23)
    dayofmonth: ngày trong tháng, (1-31)
    monthofyear: tháng trong năm, (1-12)
    dayofweek: ngày trong tuần (0-6, tương đương với Sunday-Saturday)
    command: là bất cứ lệnh hệ thống nào, cho phép gọi tới một file có quyền x.
  • Chú ý: crontab cho phép sử dụng các ký tự thay thế.
    Kiểu thay thế: * tương đương với bất cứ giá trị nào.
    Kiểu mỗi: */5 tương đương với cứ mỗi 5 đơn vị thời gian.
    Kiểu liệt kê: 2, 4, 6 cứ vào thời điểm 2, 4, 6 đơn vị thời gian.
    Kiểu khoảng: 9-17 lấy bất cứ giá trị nào nằm trong khoảng  từ 9 đến 17
Lệnh crontab:
crontab [-u user] [option] file
-u user: chỉ ra người dùng mà crontab của họ sẽ được chỉnh sửa.
-l : hiển thị nội dung crontab ra thiết bị hiển thị mặc định, ví dụ màn hình.
-r : xóa crontab.
-e : chỉnh sửa nội dung crontab ở chế độ soạn thảo.
-i : xóa crontab sau khi được người dùng chọn y/Y.
-s : unknow.

20 tháng 4, 2012

Các tạo virtual IP (VIP) cho các máy chạy Linux

VIP là chức năng cho phép 1 card mạng có thể có nhiều ip.
Với khả năng này, một máy chủ duy nhất có thể triển khai nhiều webserver với nhiều địa chỉ ip khác nhau hoặc dùng vào mục đích cluster,...
Cách 1: sử dụng lệnh ifconfig.
Để tạo VIP, ta dùng lệnh sau:
ifconfig eth0:0 192.168.1.3
Lệnh này sẽ tạo thêm một VIP với tên thiết bị là eth0:0 và địa chỉ IP là 192.168.1.3.
Để kiểm tra lại ta gõ lệnh:
ifconfig eth0:0
eth0:0 Link encap:Ethernet HWaddr 00:14:6C:83:39:92
inet addr:192.168.1.28 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:33442 errors:0 dropped:0 overruns:0 frame:0
TX packets:38225 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:20240563 (19.3 Mb) TX bytes:3483829 (3.3 Mb)
Interrupt:18
Sau khi tạo ra, VIP có thể được sử dụng như một card mạng thông thường.
Để xóa VIP ta dùng lệnh sau:
ifconfig down eth0:0
Cách 2: sử dụng lệnh iproute.
Để tạo VIP ta dùng lệnh sau:
ip addr add 192.168.1.28 dev eth1
với addr, add, dev là từ khóa.
192.168.1.28 là địa chỉ ip cần gán.
eth1: tên thiết bị thực tế sẽ thiết lập cho VIP.
Sau đó chạy lệnh:
ip show addr
để enable VIP đã tạo ra.
Kiểm tra lại bằng lệnh:
ifconfig
3: eth1: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:14:6c:83:39:92 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.10/24 brd 192.168.1.255 scope global eth1
inet 192.168.1.28/32 scope global eth1
Để xóa VIP ta dùng lệnh:
ip addr del 192.168.1.28/32 dev eth1
với addr, del và dev là từ khóa
192.168.1.28/32 là địa chỉ ip của VIP (không cần phải dùng /32)
eth1 là tên card đã tạo VIP.
Link tham khảo: How to creating virtal ip address on linux
http://www.tecmint.com/create-multiple-ip-addresses-to-one-single-network-interface/

05 tháng 4, 2012

Một số nguyên tắc bảo mật cơ bản cho máy chủ chạy Linux


  1. Bảo mật tài khoản đăng nhập
  • Không enable tài khoản root của hệ thống. Không cần thiết phải disable các account mặc định của hệ thống bởi vì với các hệ điều hành Linux hiện tại thì hacker không thể lợi dụng các tài khoản này để xâm nhập vào hệ thống nữa.
    Gõ lệnh: sudo passwd root -l trên Ubuntu để lock lại tài khoản root nếu bạn đã "lỡ" mở ra.
  • Hãy tạo ra một account của riêng bạn để đăng nhập vào hệ thống theo nguyên tắc sau:
    Tên account: là một tên ngẫu nhiên, không nên là tên bạn hoặc những gì thân quen với bạn(viết tắt, viết biến tấu, người yêu, thằng ngồi bên trái, ..), ví dụ nên đặt một cái tên đăng nhập là: omaynaythatlabaomat --> nguyên tắc đặt tên này sẽ giúp kẻ tấn công không thể dò ra được account login là gì (đa phần các vụ brute force sẽ dò theo một danh sách những account có sẵn, mà account như này thì chắc chắn không có trong danh sách của kẻ tấn công rồi)
    Mật khẩu: hãy cố gắng đặt càng dài càng tốt, có kết hợp các biến tấu theo quy tắc chỉ bạn nghĩ ra. Ví dụ đơn giản thế này: matkhaunaythatladaivaphuctap -->MaTkHaUnAyThAtLaDaIvAPhUcTaP (biến lần 1 theo nguyên tắc 1 hoa 1 thường) -->M@TkH@uN@yTh@tL@D@!v@PhUcT@p (biến lần 2 bằng cách thay a = @) --> MaTkH2uN@yTh2tL@Da!v2PhucT2p (biến lần 3, trộn lẫn giữa số ,chữ và ký tự !) --> Điều này đảm bảo làm khó ngay cả cho những kẻ tấn công kiên trì nhất cũng phải nản lòng (tôi đảm bảo kể cả kẻ tấn công có đứng nhìn bạn gõ mật khẩu hắn cũng không thể nhớ được là bạn đã gõ những gì)
     2. Ngăn không cho người dùng đăng nhập hệ thống.
  • Xóa public key trong file ~/.ssh/authorized_key
  • Xóa không cho người dùng dùng password sudo: passwd -d username (Xóa password của user) hoăc passwd -l username (Lock password của user)
  • Dùng visudo: xóa tất cả các user có quyền NOPASSWD

Một số thủ thuật hay trên Linux (Cập nhật ngày 25/03/2019)

Bài viết này tôi muốn mang tới cho các bạn một số thủ thuật thú vị khi làm việc trên môi trường Linux. Thiết nghĩ, nội dung bài này sẽ có ích nhiều cho các bạn đang và có mong muốn bước chân vào thế giới lập trình shell, perl trên các hệ thống Linux nhiều hơn. Cụ thể hơn, nội dung sẽ được trình bày theo dạng Hỏi - Đáp để  thuận tiện cho các bạn tra cứu sau này.
1 - Làm thế nào để liệt kê các thư viện đã được cài trong máy?
Bạn chạy lệnh này để liệt kê các thư viện đã được cài:
/sbin/ldconfig -p
2 - Làm thế nào để xác định có những chương trình nào đã cài trên máy chạy linux?
Tùy theo hệ điều hành, bạn có thể dùng các lệnh sau:
Với các dòng RPM based:
rpm -qa
Với các dòng Debian hoặc Ubuntu
dpkg --list
Với các dòng OpenBSD
pkg_info  
3 - Làm thể nào để liệt kê có các cổng nào đang mở và các chương trình nào đang chiếm giữ cổng đó?
Chạy với quyền root lệnh sau:
netstat -tulpn 
Hoặc:
nmap -sT -O localhost 
4 - Tôi muốn biết thông tin về một hostname hoặc một địa chỉ ip?
Để biết thông tin về hostname hãy gõ:
whois hostname
Để biết thông tin về địa chỉ ip hãy gõ:
dig -x ip 
5 - Tôi muốn biết thông tin về phần cứng của máy, tôi phải làm thế nào?
Để biết thông tin về CPU hãy gõ:
cat /proc/cpuinfo
Để biết thông tin về bộ nhớ hãy gõ:
free -m
Để biết thông tin về ổ cứng hãy gõ:
sudo fdisk -l
Để biết thông tin về dung lượng đã dùng của ổ cứng hãy gõ:
df -h
Để biết thông tin về các card PCI hãy gõ:
lspci
Để biết thông tin về dung lượng các tập tin sử dụng hãy gõ:
du
Để biết thông tin về các công việc đang chạy hãy gõ:
 lsdev
Để biết thông tin về các ổ USB hãy gõ:
lsusb
Để biết thông tin phần cứng RAM, hãy gõ:
sudo dmidecode --type 17
6 - Tìm kiếm file có chứa một xâu chỉ định
Để tìm kiếm file có chứa một xâu chỉ đinh, bạn gõ:
grep -r "string" /path
7 - Tìm kiếm các file có dung lượng lớn:
Để tìm kiếm các file có dung lượng lớn trên hệ thống, ta có thể dùng lệnh sau:
find /đường_dẫn -size +dung_lượng_tối_thiểu -size -dung_lượng_tối_đa
8 - Tôi muốn xem dịch vụ nào đang chiếm port nào trong hệ thống:
Bạn sử dụng lênh:
lsof -Pnl +M -i4 : dành cho các địa chỉ IPv4.
lsof -Pnl +M  -i6: dành cho các địa chỉ IPv6
9 - Tôi gõ lệnh cat /đường_dẫn/file | grep "text" thì bị lỗi "Binary file (standard input) matches"
Bạn thử lại với lệnh: cat /đường_dẫn/file | grep "text" --text
10 - Tôi muốn chạy lệnh netstat ở chế độ thời gian thực, tôi phải làm như nào?
Trong linux có lệnh watch để chạy một lệnh nào đó lặp lại trong một khoảng thời gian nào đó. Bạn có thể tận dụng lệnh này để làm việc này. Mẫu lệnh có dạng:

watch -n 30 "netstat -ntu | awk '{print \$5}' | cut -d: -f1 | sort | uniq -c | sort -n"
 
Bạn gõ lệnh man hoặc help để biết thêm chi tiết cách sử dụng của lệnh watch 
11 - Tôi muốn tìm kiếm thông tin một process thông qua process Id:
Bạn chạy lệnh sau:
ps -p PID
12 - Tôi muốn xem trong hệ thống đang có những user nào
Để xem danh sách các user đang có trong hệ thống, bạn chạy lệnh sau:
cat /etc/passwd

26 tháng 3, 2012

Những lệnh Linux người quản trị cần biết (update 10-08-2021)

Phần này mình chỉ đề cập đến những câu lệnh cần thiết mà một người quản trị hệ thống Linux cần biết và nắm rõ. Nội dung diễn giải cho các lệnh được viết theo ý hiểu của tác giả thế nên các bạn không nên thắc mắc tại sao nó lại thế nhé. Các lệnh sẽ được sắp xếp theo thứ tự abc và sẽ được update dần theo thời gian.
A
1. Adduser command
  • Chức năng: Thêm user vào quyền sudo
  • Hệ điều hành: Linux, *nix
  • Có sẵn: có
  • Cấu trúc lệnh: adduser user_name sudo
B
C
1 - Chage command
  • Chức năng: Xem thông tin user trong hệ thống.
  • Hệ điều hành: Linux, *nix.
  • Có sẵn: Có.
  •  Cấu trúc lệnh: 
    • chage -l user
    • chage -E yyyy-mm-dd user: Thay đổi thông tin hết hạn của user.
D
1 - Dig command
  • Chức năng: truy vấn các bản ghi trên DNS
  • Hệ điều hành: Linux, *nix
  • Có sẵn: Có
  • Cấu trúc lệnh: dig [option] domain.com
    Trong đó:
    dig: tên lệnh
    domain.com: tên miền cần truy vấn
    Option: tùy chọn
  • Option bao gồm:
    mx: truy vấn bản ghi MX
    a: truy vấn bản ghi A
2 - dpkg-reconfigure:

  • Chức năng: cấu hình lại tham số một số biến môi trường.
  • Hệ điều hành: Linux, *nix
  • Có sẵn: Có
  • Cấu trúc lệnh: dpkg-reconfigure tên_tham_số
    Trong đó:
    dpkg-reconfigure: tên lệnh
    Tên tham số: có thể là tzdata(nếu muốn đổi timezone của máy), java (nếu muốn đổi các thông số liên quan tới java),....
 3 - date
  • Chức năng: xem thông tin thời gian trên hệ thống + chỉnh lại thông tin thời gian trên hệ thống
  • Hệ điều hành: Linux, *nix
  • Có sẵn: Có
  • Cấu trúc lệnh: date tham_số
    Trong đó:
    date: tên lệnh
    Tham số: 04 (Month) 12 (Day) 1600 (Time in 24hour) 2011 (Year). Ví dụ: 041216002011 sẽ đổi giờ hệ thống thành ngày 12 tháng 4 năm 2011 lúc 16h00 
4 - dpkg -l
  •  Chức năng: xem thông tin các gói đã cài đặt trong hệ thống.
  • Hệ điều hành: Linux, *nix
  • Có sẵn: Có.
5 - df:
  • Chức năng: Xem thông tin về dung lượng ổ đĩa trong hệ thống.
  • Hệ điều hành: Linux, *nix
  • Có sẵn: Có.
E
F
1 - fg command
  • Chức năng: đưa một tiến trình đang chạy từ chế độ background sang foreground
  • Hệ điều hành: Linux, *nix
  • Có sẵn: có
  • Cấu trúc lệnh: fg [process number]
    Trong đó:
    fg: tên lệnh.
    process number: số thứ tự của background process, xem thông qua lệnh jobs.
2 - fping command:
  • Chức năng: một kiểu ping nâng cao
  • Hệ điều hành: Linux, *nix.
  • Có sẵn: không, phải cài thêm.
  • Cấu trúc lệnh: fping domain.com
    Trong đó:
    fping: tên lệnh
    domain.com: địa chỉ remote server
3 - find command:
  • Chức năng: tìm kiếm một tập tin, thư mục chỉ định trong hệ thống.
  • Hệ điều hành: Linux, *nix
  • Có sẵn: có.
  • Cấu trúc lệnh: find [path...] [expression]
    Trong đó:
    find : tên lệnh.
    path: đường dẫn cần thực hiện tìm kiếm.
    expression: yêu cầu tìm kiếm
  • Vui lòng xem thêm với lệnh find --help
  • Ví dụ: find /opt/ -name "test*" sẽ tìm kiếm trong thư mục opt tất cả các file có tên bắt đầu là test.
G
1 - Gzip command:
  • Chức năng: nén và giải nén cho định dạng gz.
  • Hệ điều hành: Linux
  • Có sẵn: có
  • Cấu trúc lệnh: gzip [option] filesource [filedestination]
    Trong đó:
    gzip: tên lệnh.
    option: các tùy chọn.
    filesource: file gốc
    filedestination: file đích.
  • option:
    d: giải nén
H
1 - Hostname command
  •  Chức năng: xem hostname của máy
  • Hệ điều hành: Linux, *nix
  • Có sẵn: có
  • Cấu trúc lệnh: hostname [option]
    Trong đó:
    hostname: tên lệnh
    option: các tùy chọn
2 - Hwinfo command:
  •  Chức năng: xem thông tin phần cứng của máy.
  • Hệ điều hành: Linux
  • Có sẵn: không.
  • Câu trúc lệnh: hwinfo [option]
I
1 - ifconfig command
  • Chức năng: xem thông tin card mạng của máy.
  • Hệ điều hành: Linux, *nix
  • Có sẵn: có
  • Cấu trúc lệnh: ifconfig [option] tên_card_mạng
    Trong đó:
    ifconfig: tên lệnh
    option: tùy chọn
    tên_card_mạng: có thể là eth0, eth1, wlan0,..
J
K
1 - ssh-keygen
  • Chức năng: unknow
  • Hệ điều hành: Linux, *nix
  • Có sẵn: có
  • Cấu trúc lệnh:
  • Ví dụ: keygen-shh -r : loại bỏ key của một host đã lưu trong hệ thống.
L
1 - lastlog comman
  • Chức năng: liệt kê danh sách các tài khoản đã từng đăng nhập vào hệ thống
  • Hệ điều hành: Linux, *nix
  • Có sẵn: có
  • Cấu trúc lênh: laslog.
2 - ls command
  • Chức năng: xem thông tin của tập tin, thư mục trong hệ điều hành.
  • Hệ điều hành: Linux, *nix
  • Có sẵn: Có.
  • Cấu trúc lệnh:
    ls [options]
  • Options:
    -i : xem thông tin inode
    -l : xem dạng thông tin file dài
3 - ldd command:
  • Chức năng: xem các thư viện được sử dụng cho một ứng dụng trên Linux
  • Hệ điều hành: Linux, *nix
  • Có sẵn: Có.
  • Cấu trúc lệnh: ldd [OPTION]... FILE...
  • Options:
4. last

  • Chức năng: Xem người dùng truy cập gần nhất trên hệ thống.
  • Hệ điều hành: Linux, *nix.
  • Có sẵn: có.
  • Cấu trúc lệnh: last.

M
N
1 - nmap command:
  • Chức năng: Hiện tại mình hay dùng lệnh này để xem một remote server đang mở những cổng gì (ngoài ra còn khá nhiều các chức năng khác nhưng mình ít dùng nên không nêu ra ở đây)
  • Hệ điều hành: Linux, *nix
  • Có sẵn: không, phải cài thêm.
  • Cấu trúc lệnh: nmap [option] domain.com
    Trong đó:
    nmap: tên lệnh
    option: các tùy chọn
    domain.com: địa chỉ của remote server.
  • Option bao gồm:
    -p: chỉ quét các cổng chỉ định, ví dụ: nmap -p143 10.2.10.123 --> chỉ quét cổng 143 máy có địa chỉ 10.2.10.123
2 - nload command:
  • Chức năng: xem lưu lượng vào ra trên một card mạng
  • Hệ điều hành: Linux, *nix
  • Có sẵn: không, phải cài thêm
  • Cấu trúc lệnh: nload [option] card_name
    Trong đó:
    nload: tên lệnh
    [option]: các tùy chọn
    card_name: tên card, ví dụ eth0, eth1, wlan0,...
  • option:
    K: xem lưu lượng ở dạng kilobyte
    M: xem lưu lượng ở dạng MB
    G: xem lưu lượng ở dạng GB
    H: auto
    u: thiết lập kiểu đơn vị vào ra cho từng thành phần
    U: thiết lập kiểu đơn vị vào ra cho phần tính tổng lưu lượng
3 - nmblookup command
  • Chức năng: xem thông tin của một máy từ xa.
  • Hệ điều hành: Linux, *nix
  • Có sẵn: có
  • Cấu trúc lệnh: nmblookup [option] địa_chỉ_máy
    Trong đó:
    nmblookup: tên lệnh.
    option: các tùy chọn
    địa_chỉ_máy: địa chỉ máy cần xem
  • Option: bao gồm
    a : xem tất cả mọi thông tin
4 - nohup:
  • Chức năng: giữ cho một tiến trình chạy ngay cả khi terminal bị tắt.
  • Hệ điều hành: Linux
  • Có sẵn: có
  • Cấu trúc lệnh: nohup lệnh [tùy chọn] &
    Trong đó:
    nohup: tên lệnh
    lệnh: lệnh cần giữ.
    tùy chọn: các tùy chọn của lệnh cần giữ.
    &: đẩy lệnh cần giữ xuống chạy nền.
  •  Sau khi chạy, gõ ctrl + D để thoát khỏi màn hình ssh.
  • Ví dụ: để chạy lệnh nohup ta làm như sau:
  • nohup command &   # create nohup.out
    nohup command >/dev/null 2>&1 &   # doesn't create nohup.out 
     
O
P
1 - perldoc command
  • Chức năng: xem thông tin trợ giúp về các hàm, lớp trong ngôn ngữ Perl.
  • Hệ điều hành: Linux,*nix.
  • Có sẵn: không rõ.
  • Cấu trúc lệnh: perl Tên_hàm_lớp_cần_truy_vấn.
  • Ví dụ: perldoc File::Copy
2 - pidoff command
  • Chức năng: xem id của một tiến trình.
  • Hệ điều hành: Linux, *nix
  • Có sẵn: Có
  • Cấu trúc lệnh: pidof tên_chương_trình
3 - passwd
  • Chức năng: đổi mật khẩu của user.
  • Hệ điều hành: Linux, *nix.
  • Có sẵn: Có.
  • Cấu trúc lệnh: passwd
  • Trong đó option là:
    • l: loại bỏ password của người dùng.
Q
R
S
1 - ssh command
  • Chức năng: tạo một kết nối SSH tới một remote server
  • Hệ điều hành: Linux
  • Có sẵn: có
  • Cấu trúc câu lệnh:
    ssh user@domain.com
    Trong đó:
    ssh: tên lệnh
    user: tên user cần kết nối trên remote server
    domain.com: địa chỉ ip hoặc domain của remote server
2 - stat command:
  • Chức năng: xem thông tin thống kê của một tập tin.
  • Hệ điều hành: Linux
  • Có sẵn: Có.
  • Cấu trúc câu lệnh:
    stat /đường/dẫn/tới/file.
3 - scp command:
  • Chức năng: Copy tập tin giữa hai máy tính
  • Hệ điều hành: Linux, Unix
  • Có sẵn: Có.
  • Cấu trúc câu lệnh:
    scp [option]  [[user@]host1:]file1 ... [[user@]host2:]file2
  • Trong đó:option là các tùy chọn
    • -P: Port sử dụng
T
1 - Top command
  • Chức năng: xem thông tin tiến trình và các tài nguyên hệ thống.
  • Hệ điều hành: Linux, *nix.
  • Có sẵn: có
  • Cấu trúc lệnh: top
2 - Tail command:
  • Chức năng: xem nội dung một file.
  • Hệ điều hành: Linux, *nix
  • Có sẵn: có
  • Cấu trúc lệnh: tail [option] path
    Trong đó:
    tail: tên lệnh
    option: các tùy chọn
    path: đường dẫn tới file cần xem.
  • Option bao gồm:
    f: xem nội dung file theo thời gian thực
    chữ số: xem số dòng cuối cùng của file đúng bằng số đã nhập vào.
3 - Traceroute command
  • Chức năng: rà tuyến đường của gói tin tới một địa chỉ đích
  • Hệ điều hành: Linux, *nix
  • Có sẵn: có.
  • Cấu trúc lệnh: traceroute [option] địa_chỉ_đích
    Trong đó:
    traceroute: tên lệnh
    địa_chỉ_đích: địa chỉ máy đích cần tìm đường
    option: các tùy chọn của lệnh
4 - Tar command
  •  Chức năng: nén và giải nén tập tin, thư mục trong linux.
  • Hệ điều hành: Linux, *nix
  • Có sẵn: có.
  • Cấu trúc lệnh: tar [options] tên_file_nén tên_file_hoặc_thư_mục_cần_nén
    Trong đó:
    tar: tên lệnh
    options: các tùy chọn
  • ví dụ để nén một thư mục ta gõ lệnh tar -zcvf file.tar.gz /home/user/data
  • Để nén một thư mục ta dùng lệnh sau: tar -zcvf prog-1-jan-2005.tgz /home/jerry/prog
U
1 - uname command
  • Chức năng: xem thông tin  tổng quan về hệ điều hành
  • Hệ điều hành: dòng debian
  • Có sẵn: có
  • Cấu trúc lệnh: uname [option]
    Trong đó:
    uname: tên lệnh
    option là các tham số đầu vào.
  • Option có thể là:
    a : xem tất cả
2. Useradd command
  • Chức năng: tạo tài khoản mới cho hệ thống
  • Hệ điều hành: Linux, *nix
  • Có sẵn: Có.
  • Cấu trúc lệnh:  useradd [option] user_name
    Trong đó:
    user_name: là tên tài khoản cần thêm
    option là các tùy chọn
  • Ví dụ:
    useradd -e {yyyy-mm-dd} {username} - Thêm user và ngày user này sẽ bị hết hạn - useradd -e 2008-12-31 jerryuseradd -f {days} {username} - Thêm user và ngày hết hạn mật khẩu - useradd -e 2009-12-31 -f 30 jerry

V
W
1 - Whois command
  • Chức năng: tra cứu thông tin của một tên miền (thực ra theo đúng định nghĩa thì là tra cứu thông tin một đối tượng trong cơ sở dữ liệu RFC 3291)
  • Hệ điều hành: Linux, *nix
  • Có sẵn: Không
  • Cấu trúc lệnh: whois [option] tên_miền
    Trong đó:
    whois: tên lệnh
    option: các tùy chọn
    tên_miền: tên miền cần tra cứu
X
Y
Z

06 tháng 3, 2012

RAID và các kỹ thuật RAID trên Ubuntu

Bài viết này được thực hiện từ thực tế khi đi triển khai người viết đã gặp phải.
RAID là viết tắt của Redundant Array of Independent Disk: tâp hợp các ổ đĩa có khả năng chịu lỗi. Các hệ thống sử dụng RAID cho phép người quản trị có thể nhanh chóng xác định ổ đĩa bị lỗi và thay nóng (hot plug) ngay ổ đĩa bị hỏng mà không gây ảnh hưởng tới các dữ liệu trên máy.
RAID thường được áp dụng trên các máy chủ (cả Windows và Linux) nhằm tăng độ an toàn cho dữ liệu của máy chủ.
Có rất nhiều loại RAID: RAID 0, RAID 1, RAID 5, RAID 10, RAID 0 + 1,…. (ở đây ta sẽ không đi sâu vào kỹ thuật áp dụng trên từng loại RAID)
Hiện tại trên thị trường có 3 loại hình RAID: Hardware RAID, Software RAID và fake RAID.
Hardware RAID: là kỹ thuật RAID mà việc điều khiển đọc ghi lên các ổ đĩa sẽ do một nhóm các phần cứng đặc biệt điều khiển. Loại RAID này hoạt động hoàn toàn trong suốt với hệ điều hành, không cần phải có driver, và không phụ thuộc là bạn đang dùng hệ điều hành gì.
Software RAID: là kỹ thuật RAID mà việc điều khiển đọc ghi lên các ổ đĩa sẽ do kernel của hệ điều hành điều khiển. Loại RAID này có ưu điểm là không cần phải có một phần cứng hỗ trợ RAID do đó sẽ giảm giá thành đầu tư cho máy chủ. Phải cài software RAID ngay khi cài hệ điều hành.
Fake RAID: là một kỹ thuật RAID lai giữa 2 kỹ thuật kể trên, sử dụng phần cứng để điều khiển việc đọc ghi lên ổ cứng nhưng không sử dụng các phần cứng chuyên biệt mà thực sự lại do một phần mềm nhỏ (gọi là BIOS trên card RAID) để điều khiển đọc ghi. Loại RAID này có ưu điểm là giá thành rẻ hơn Hardware RAID tuy nhiên khi hoạt động lại yêu cầu hệ điều hành phải load được driver điều khiển RAID lên dẫn tới việc đòi hỏi hoặc hệ điều hanh phải tích hợp sẵn driver của card hoặc phải yêu cầu hệ điều hành preload các driver lên trước khi đi vào quá trình boot. Nếu  hệ điều hành không hỗ trợ loại BIOS trên thiết bị RAID, dù có cấu hình như thế nào thì khi vào hệ điều hành, ta vẫn chỉ nhìn thấy các ổ đĩa riêng lẻ thay vì hệ thống ổ RAID như mong muốn.
Theo khảo sát trên mạng thì ta có thể so sánh các kỹ thuật RAID như sau (số liệu chỉ tính trên các máy chủ chạy kernel Linux):
Tốc độ đọc/ghi: Hardware RAID à Fake RAID à Software RAID
Khả năng bảo đảm an toàn dữ liệu: Hardware RAID à Software RAID à Fake RAID

Cơ chế quản lý startup trên Linux.

Cái này nếu ai dùng windows nhiều thì sẽ biết rất rõ. Nhưng với linux thì liệu có cơ chế này không, nếu có thì phải sử dụng như thế nào. Bài viết này sẽ giới thiệu cho mọi người sơ lược về cơ chế startup và cách sử dụng nó trên Linux như thế nào.
Trên Linux, Debian và các dòng dựa trên Unix về cơ bản sẽ có 6 cấp hoạt động (gọi là runlevel), có thể số lượng thay đổi tùy theo các bản phân phối. Chúng bao gồm:
·         Runlevel 0: rc0.d – Tương ứng với trạng thái Halts của máy
·         Runlevel 1: rc1.d – Tương ứng với trạng thái máy khởi động cho người quản trị.
·         Runlevel 2: rc2.d – Tương ứng với trạng thái máy khởi động không có các dịch vụ mạng (tương tự safemode trên windows)
·         Runlevel 3: rc3.d – Tương ứng với trạng thái máy khởi động bình thường
·         Runlevel 4: rc4.d – Đây là trạng thái chưa sử dụng.
·         Runlevel 5: rc5.d – Tương ứng với trạng thái máy khởi động với trình điều khiển đồ họa như gdm hay x-system.
·         Runlevel 6: rc6.d – Tương ứng với trạng thái reboot. (Khi máy reboot thì sẽ gọi các script trong thư mục này trước)
Ngoài ra còn có 2 runlevel là:
·         Rc.local: được gọi trước khi gọi các rcx.d (x là runlevel tương ứng)
·         rcS.d: được gọi sau khi máy chạy hết các script trong rcx.d (x là runlevel tương ứng).
Nội dung trong mỗi rcx.d bao gồm:
·         Các file có tên theo cấu trúc sau: SscriptNN (S: là từ khóa, NN: là số thứ tự, script: là tên script) là file khởi động dịch vụ và thứ tự khởi động là NN.
·         Các file có tên theo cấu trúc sau: KscriptNN (K: là từ khóa, NN: là số thứ tự, script: là tên script) là file tắt dịch vụ và thứ tự tắt là NN.
·         Các file có NN càng nhỏ thì thứ tự khởi động càng sớm, tức là 1 sẽ phải được gọi trước 2.
Để kiểm tra trạng thái máy chủ đang chạy ở runlevel nào có thể sử dụng lệnh: runlevel
Ví dụ ta thu được đầu ra là 2, tức là máy khi khởi động sẽ gọi các script chứa trong thư mục rc2.d
Các script trong rcx.d đều là các liên kết tới các script nằm trong thư mục /etc/init.d (có thể xem bằng lệnh ls –l /etc/rc*)
Vậy ta có thể sử dụng cơ chế startup trên linux như thế nào:
·         Để sử dụng ta phải sử dụng lệnh “update-rc.d
·         Update-rc.d tìm các script trong thư mục /etc/init.d/
·         Cấu trúc lệnh update-rc.d như sau:
o   Để loại bỏ một script ta dùng lệnh:
update-rc.d –f script_name remove.
o   Để tạo một script khởi động ta dùng lệnh
update-rc.d script_name start 48 1 3 6 . stop 36 0 2 5.
Trong đó:
script_name: tên script đặt trong thư mục /etc/init.d/ và có quyền excute (quyền “x”)
48: thứ tự Start
1, 3, 6: runlevel
dấu “.” Là bắt buộc, có 2 dấu “.” Trong đoạn script
36: thứ tự stop
0, 2, 5: runlevel