You are on page 1of 170

Giới thiệu Linux

1. Giới thiệu Linux


1.1 Lịch sử phát triển của Linux và giới thiệu các phiên
bản Linux
Linux là một HDH dạng UNIX (Unix-like Operating
System) chạy trên máy PC với bộ điều khiển trung tâm (CPU)
Intel 80386 trở lên, hay các bộ vi xử lý trung tâm tương thích
AMD, Cyrix. Linux ngày nay còn có thể chạy trên các máy
Macintosh hoặc SUN Sparc . Linux thỏa mãn chuẩn POSIX.1.
Linux được viết lại toàn bộ từ con số không, tức là không
sử dụng một dòng lệnh nào của Unix để tránh vấn đề bản quyền
của Unix. Tuy nhiên hoạt động của Linux hoàn toàn dựa trên
nguyên tắc của hệ điều hành Unix. Vì vậy nếu một người nắm
được Linux, thì sẽ nắm được UNIX. Nên chú ý rằng giữa các
Unix sự khác nhau cũng không kém gì giữa Unix và Linux.
Năm 1991 Linus Torvalds, sinh viên của đại học tổng hợp
Helsinki, Phần lan, bắt đầu xem xét Minix, một phiên bản của
Unix làm ra với mục đích nghiên cứu cách tạo ra một hệ điều
hành Unix chạy trên máy PC với bộ vi xử lý Intel 80386.
Ngày 25/8/1991, Linus cho ra version 0.01 và thông báo
trên comp.os.minix của Internet về dự định của mình về Linux.
1/1992, Linus cho ra version 0.12 với shell và C compiler.
Linus không cần Minix nữa để recompile HDH của mình. Linus
đặt tên HDH của mình là Linux.
1994, phiên bản chính thức 1.0 được phát hành.
Quá trình phát triển của Linux được tăng tốc bởi sự giúp đỡ
của chương trình GNU (GNU’s Not Unix), đó là chương trình
phát triển các Unix có khả năng chạy trên nhiều platform. Đến

1
hôm nay, cuối 2001, phiên bản mới nhất của Linux kernel là
2.4.20, có khả năng điều khiển các máy đa bộ vi xử lý ( hiện tại
Linux hỗ trợ máy tính có tối đa 16 CPUs) và rất nhiều các tính
năng khác.
Phiên bản mới nhất có thể tìm thấy tại
http://www.kernel.org

1.2 Vấn đề bản quyền của GNU project


Các chương trình tuân theo GNU Copyleft or GPL (General
Public License http://www.linux.org/info/gnu.html ) có bản
quyền như sau :
1. Tác giả vẫn là sở hữu của chương trình của mình.
2. Ai cũng được quyền bán copy của chương trình với giá
bất kỳ mà không phải trả cho tác giả ban đầu.
3. Người sở hữu chương trình tạo điều kiện cho người
khác sao chép chương trình nguồn để phát triển tiếp
chương trình.

1.3 Why Linux ?


Linux là miễn phí (free). Đối với chúng ta hôm nay không
quan trọng vì ngay WindowsNT server cũng "free". Nhưng trong
tương lai, khi chúng ta muốn hòa nhập vào thế giới, khi chúng ta
muốn có một thu nhập chính đáng cho người lập trình, hiện tượng
sao chép trộm phần mềm cần phải chấm dứt. Khi đó, "free" là
một thông số rất quan trọng để chọn Linux.
Linux rất ổn định. Trái với suy nghĩ truyền thống "của rẻ là
của ôi ", Linux từ những phiên bản đầu tiên cách đây 5-6 năm đã

2
rất ổn định. Ngay cả server Linux phục vụ những mạng lớn (hàng
trăm máy trạm) cũng hoạt động rất ổn định.
Linux đầy đủ. Tất cả những gì bạn thấy ở IBM, SCO, Sun
… đều có ở Linux. C compiler, perl interpeter, shell , TCP/IP,
proxy, firewall, tài liệu hướng dẫn ... đều rất đầy đủ và có chất
lượng. Hệ thống các chương trình tiện ích cũng rất đầy đủ .
Linux là HDH hoàn toàn 32-bit. Như các Unix khác, ngay
từ đầu, Linux đã là một HDH 32 bits. Hiện nay đã có những
phiên bản Linux 64 bits chạy trên máy Alpha Digital hay Ultra
Sparc.
Linux rất mềm dẻo trong cấu hình. Linux cho người sử
dụng cấu hình rất linh động, ví dụ như độ phân dải màn hình
Xwindow tùy ý, dễ dàng sửa đổi ngay cả kernel
Linux chạy trên nhiều máy khác nhau từ PC 386, 486 tự lắp
cho đến SUN Sparc.
Linux được trợ giúp. Ngày nay, với các server Linux sử
dụng dữ liệu quan trọng, người sử dụng hoàn toàn có thể tìm
được sự trợ giúp cho Linux từ các công ty lớn. IBM đã chính
thức chào bán IBM server chạy trên Linux. Tài liệu giới thiệu
Linux ngày càng nhiều, không thua kém bất cứ một HDH nào
khác.
Với nguồn tài liệu phong phú, chương trình từ kernel cho
đến các tiện ích miễn phí và bộ mã nguồn mở, Linux là người bạn
đồng hành lý tưởng cho những ai muốn đi vào HDH chuyên
nghiệp UNIX và công cụ tốt nhất cho công tác đào tạo CNTT
trong các trường đại học.
Các phiên bản của Linux. Các phiên bản của HDH Linux
được xác định bởi hệ thống số dạng X.YY.ZZ. Nếu YY là số
chẵn => phiên bản ổn định. YY là số lẻ => phiên bản thử nghiệm
.

3
Các phân phối (distribution) của Linux quen biết là
RedHat, Debian, SUSE, Slakware, Caldera …
Chú ý phân biệt số phiên bản của hệ điều hành (Linux
kernel) với phiên bản của các phân phối (ví dụ RedHat 7.1 với
kernel Linux 2.4.2-14).

2. Các ứng dụng trên linux


2.1 Các ứng dụng văn phòng & multimedia
Cùng với thời gian, hệ điều hành Linux ngày càng được hoàn
thiện, nhiều hãng sản xuất cùng với các lập trình viên đã xây
dựng được một kho thư viện phần mềm khổng lồ đáp ứng phần
lớn nhu cầu của người dùng.

4
Nếu như trong Windows có bộ Microsoft Office thì trong Linux
có những bộ Office khác như KOffice hoặc bộ Start Office của
hãng Sun Microsystem được phân phối miễn phí .

5
2.2 Các ứng dụng giải trí
Ngoài các ứng dụng văn phòng ra, Linux cũng có khá nhiều
games phục vụ nhu cầu thư giãn và giải trí của người dùng.

6
7
2.3 Hệ điều hành mạng và các ứng dụng mạng
Có thể nói các ứng dụng mạng là tập hợp những ứng dụng nổi bật
nhất của hệ điều hành Linux. Những khả năng mà các ứng dụng
mạng trên Linux có thể thực hiện được làm cho hệ điều hành này
trở nên vượt trội hơn so với Windows.
Linux cho phép người dùng có thể cấu hình 1 server với đầy đủ
các ứng dụng cơ bản nhất của Internet :
Domain Name Service (DNS)
Web Server
Web Proxy Server
Routing
SMTP Server
Pop3 Server

8
Firewall
2.4 Các ứng dụng Web
Với sự bùng nổ các ứng dụng trên Internet , hệ điều hành Linux
hỗ trợ một môi trường lý tưởng cho các server ứng dụng.
Các hãng phần mềm nổi tiếng đều nghiên cứu để làm sao có thể
cài các ứng dụng của họ lên Linux. Tiêu biểu là các ứng dụng
sau:
Oracle Internet Application Server 9i
IBM WebSphere
2.5 Các ứng dụng cơ sở dữ liệu
Các ứng dụng cơ sở dữ liệu là không thể thiếu trong lãnh vực
CNTT cũng như các ngành khác. Một khi đã nói đến sự tin học
hoá trong mọi lãnh vực của đời sống thì dù ít, dù nhiều cũng phải
liên quan đến cơ sở dữ liệu .
Linux hỗ trợ khá mạnh các hệ quản trị cơ sở dữ liệu từ miễn phí
đến các hệ chuyên nghiệp như :
Postgres SQL
MySQL
Oracle Database Server 9i
IBM DB2
2.6 Các ngôn ngữ lập trình
Hệ điều hành Linux được viết lại hoàn toàn từ đầu bằng ngôn ngữ
C nhằm tránh vấn đề bản quyền của Unix . Do đó ngôn ngữ lập
trình C được hỗ trợ mạnh mẽ và khá đầy đủ cho việc phát triển
các ứng dụng mạng.

9
Tuy nhiên ngôn ngữ C không phải là sự lựa chọn duy nhất cho
việc lập trình trên Linux. Có nhiều ngôn ngữ lập trình khác cũng
được hỗ trợ bởi Linux được liệt kê dưới đây:
Ada, C, C++, Forth, Fortran, Icon, Java, Lisp,
Modular 2, Modular 3,Oberon,Objective C,
Pascal, Perl , Prolog, Python, Smalltalk, SQL,
Tck/Tl, Shell

10
CÀI ĐẶT LINUX

1. Thao tác chuẩn bị


Phần cứng:
Hệ điều hành Linux ban đầu được viết nên với tiêu chí hệ điều
hành con nhà nghèo  Có nghĩa là Linux có thể chạy tốt trên một
máy 386 với cấu hình thấp. Như phiên bản RedHat Linux 6.0
chúng tôi đã thử cài đặt và chạy tốt trên một máy 386 có cấu hình
như sau:
CPU 66MHz, Ram 8M, HDD 1,2 Gb
Tuy nhiên với sự phát triển của phần mềm lẫn phần cứng và giá
cả máy vi tính ngày càng giảm thì việc cài đặt một hệ điều hành
Linux trên một máy PC intel based là không có gì khó khăn.
Ngày nay Linux đã được phát triển một cách vượt bực và có thể
cài đặt trên khá nhiều nền tảng phần cứng khác nhau : các máy
nhái (clone ) intel base, compaq, ibm, hp, …
Ngoài ra Linux còn có thể cài đặt trên các máy chủ có cấu hình
mạnh , đa xử lý như IBM e-series 240 ( 2CPU , 1GB RAM) hay
Compaq Proliant 2CPUs, 1GB Ram

Phần mềm
Việc tiếp theo là ta phải chuẩn bị một bộ đĩa chứa hệ điều hành
Linux dùng để cài đặt .
Do Linux được nhiều hãng sản xuất ra nên sẽ có rất nhiều thương
hiệu Linux khác nhau như: RedHat Linux, Suse Linux, Debian
linux, Mandrake Linux, Calendra Linux, Corel Linux, ….

11
Trên thị trường Việt Nam hiện nay RedHat Linux là phổ biến
nhất và có lẽ là được sử dụng rộng rãi nhất ( hệ thống server
chính của Đại Học Quốc Gia Tp Hồ Chí Minh đều chạy hệ điều
hành RedHat Linux)
Do đó trong phần trình bày này chúng tôi xin giới thiệu chủ yếu
là trên hệ điều hành RedHat Linux.
Đối với RedHat Linux cũng có khá nhiều phiên bản khác nhau:
 RedHat 6.0: 1 đĩa CD
 RedHat 6.1: 1 đĩa CD
 RedHat 6.2: 1 đĩa CD
 RedHat 7.1: 2 đĩa CD ( ngoài ra còn một số đĩa
Sources, document đi kèm)
 RedHat 7.2: 3 đĩa CD ( có một số đĩa Sources,
document đi kèm)
2. Phân hoạch đĩa cứng và khái niệm
mount point
Việc cài đặt hệ điều hành Linux lên một máy mới hoàn toàn,
chưa có chứa dữ liệu gì cả (khi đĩa cứng chưa fdisk càng tốt ) thì
thật dễ dàng và nhanh chóng. Nhưng đa số người sử dụng máy vi
tính đều khá quen thuộc với hệ điều hành Microsoft Windows do
đó hầu hết các máy tính hiện nay đều cài đặt sẵn hệ điều hành này
! Một vấn đề đặt ra là làm sao đối với học viên học Linux là có
thể cài đặt Linux lên máy đã có sẵn một hệ điều hành Windows
rồi mà không làm mất dữ liệu .
May mắn thay, các nhà phát triển Linux đã để ý đến điểm này và
một chương trình tiện ích LILO ( linux loader) được viết ra để
giúp cho người dùng có thể khởi động máy từ các hệ điều hành
khác nhau.

12
Đối với hệ điều hành Linux ngày nay nó đòi hỏi phải có ít nhất 2
partion của đĩa cứng để có thể cài đặt thành công.
 Parttion thứ nhất: dùng để chứa hđh. Dung lượng cho
parttion này tuỳ theo các package mà bạn cài đặt, thông
thường khoảng 2Gb là đủ.

 Parttion thứ hai : dùng để làm swap. Dung lượng cho


parttion này không cần lớn lắm, chỉ cần bằng hoặc gấp đôi
dung lượng của RAM là vừa đủ ! Nếu ta khai báo lớn quá
thì hệ thống cũng sẽ không dùng hết dẫn đến phí tài
nguyên đĩa. Còn nếu ta khai báo dung lượng nhỏ quá thì
sẽ dẫn đến hiệu suất hoạt động của hệ thống giảm do
không đủ swap space.

Đặc biệt đối với các hệ thống Linux mà sau này muốn cài đặt hệ
quản trị CSDL Oracle lên thì ta phải cho swap space lớn hơn
hoặc bằng 500MB vì đây là một trong những khuyến cáo của
Oracle. Ta phải để ý đến trường hợp này, nếu không khi hệ thống
đã cài xong, các parttion đã ổn định rồi thì không thể thay đổi
được !
Sau khi đã xác định những gì cần làm ta sẽ bắt tay vào cài đặt
Linux.
Cũng như các hệ điều hành khác, Linux yêu cầu ta chia các
partion cần thiết để chứa dữ liệu. Vấn đề là hiện tại máy tính của
ta đang có sẵn Windows và trong Windows, ta có rất nhiều dữ
liệu quan trọng không muốn bị mất thì ta phải làm thế nào.
Giả sử ta có một đĩa cứng 20GB, có chia 2 partion thành 2 đĩa
Logic C và D với dung lượng C: 10Gb, D: 10Gb. Và ổ đĩa C là ổ
đĩa hệ thống chứa hệ điều hành Windows ổ đĩa D dùng để ta lưu
back up dữ liệu . Để cài đặt ta phải dành trọn phần partition D để
install Linux. Không những thế ta phải cắt partition D thành 2
parttition: 1 dùng để cài đặt chương trình, một dùng để làm swap
.

13
Đối với các hệ điều hành từ RedHat 6.2 trở về trước thì Lilo
không thể boot được nếu ta cài đặt partition chứa file boot của hệ
thống nằm xa quá 4Gb. Để khắc phục tình trạng này ta phải cài
đặt Linux nằm trong khoảng từ phần đĩa từ 3G trở đi là tốt nhất,
phần từ 0 đến 3Gb sẽ dành cho Windows

3. Cài đặt từ đĩa CD


Thao tác cài đặt thật đơn giản
Bước 1: Bỏ đĩa CD vào ổ đĩa và cho hệ thống boot từ CDRom
. Màn hình như sau sẽ hiện ra

14
Bước 2: Ta nhập ngay dấu nhắc lệnh chữ text dùng để cho
chương trình setup chạy trên chế độ text .
RedHat Linux có hai chế độ giao diện cài đặt
 Giao diện đồ họa – GUI: Giao diện hướng dẫn cài đặt
RedHat Linux bằng hình ảnh đồ hoạ. Tương tự như hướng
dẫn cài đặt Windows. Nếu ta chọn giao diện này thì quá
trình cài đặt thường chậm hơn bởi vì ta sử dụng thiết bị
input chủ yếu là mouse.
 Giao diện văn bản – text : Giao diện cài đặt RedHat
Linux toà bằng menu dòng lệnh. Sử dụng giao diện cài
đặt này thường thuận lợi và nhanh chóng hơn vì tất cả đều
sử dụng bàn phím nên thao tác sẽ nhanh hơn.

15
Trong phần này Redhat hỏi chúng ta ngôn ngữ sử dụng trong
phần cài đặt hệ điều hành này là gì ( mặc định sẽ là English)
Một số ngôn ngữ được hỗ trợ như: Czech, English, French,
German, Hungarian, Icelandic, Italian, Norwegian, Romanian,
Russian, Turkis, Zimbabue, …
Bước 3: Chọn bàn phím ( ta chọn mặc định là us )
Có nhiều kiểu bàn phím được hỗ trợ, nhưng bàn phím được sử
dụng phổ biến nhất tại Việt Nam hiện nay là bàn phím us.
Ta không nên chọn các loại bàn phím không chuẩn khác vì sẽ gặp
rắc rối trong các phím ký hiệu đặc biệt :
~!@#$%^&*()-_=+|\{[]}/?<,.>‘`"
Trong đó các ký hiệu : $ # % ! rất được sử dụng trong các thao
tác lập trình shell. Nếu ta chọn bàn phím không chuẩn sẽ bị rắc
rối trong quá trình thao tác sau này.

16
Bước 4:

Màn hình chào mừng hiện ra, ta bấm Enter để tiếp tục
Bước 5: Chọn mode cài đặt.
GNOME Workstation
KDE Workstation

17
Server System : Mode này dùng để cài đặt máy
chủ. Tuy nhiêu khi chọn chế độ này thì Linux sẽ
tự động chia các partition theo ý nó ! Và ta sẽ bị
mất hết cấu trúc đĩa cũ.
 Mode này tuyệt đối tránh khi ta muốn cài đặt hệ điều
hành Linux chung với hệ điều hành khác đặc biệt là
Windows.
Custom System: Mode này dành cho những ai có
biết sơ qua Linux ! Các bạn đang học Linux thì
nên chọn mode cài đặt này.
Upgrade Existing Installation : Nâng cấp hệ thống
đã có (ví dụ từ RedHat 6.2 lên RedHat 7.1)

Bước 6: Phân hoạch đĩa cứng (partition)


Chọn 2 chương trình tiện ích để chia partition :
 FDisk: là một chương trình dạng dòng lệnh (command
line)

 Disk Druid: là một chương trình dạng menu

18
Bước 7:

Bước 8:

Bước 9: Chọn nơi để install bootloader

19
Ta chọn mode Master Boot Record để Lilo có thể cho ta tuỳ chọn
boot theo hệ điều hành nào sau khi cài đặt xong.
Bước 10:

Đặt tên cho máy, ta có thể thay đổi một cách dễ dàng sau này.
Bước 11: Thiết lập địa chỉ IP cho máy

20
Thiết lập địa chỉ IP cho máy: Nếu trong mạng nơi ta làm việc có
một DHCP Server thì ta có thể chọn chế độ [] Use bootp/dhcp
Bước 12:

Thiết lập tham số cho mouse


Bước 13:

21
Chọn múi giờ cho hệ thống: Asia/Saigon
Bước 14:

Đặt password cho root. Đây là password của user quan trọng nhất
trong hệ thống. Do đó phải ghi nhớ cẩn thận
Bước 15:
Sau đó click OK 2 lần để tiếp tục quá trình Install

22
Bước 16: Chọn các tập hợp package để install

Bước 17:
Sau khi đã chọn xong các package , redhat sẽ tự động install

4. Cài đặt từ mạng

23
Linux là một hệ điều hành mạng rất linh hoạt và mạnh mẽ, ta có
thể install nó từ một server khác, không cần phải có CD cục bộ.
Các thao tác chuẩn bị :
Một Anonymous FTP server hoặc Webserver: Không phụ
thuộc hệ điều hành. Chỉ cần server đáp ứng đầy đủ các
chuẩn của FTP hoặc HTTP. Sau đó ta chép bộ source vào
các thư mục của Webserver hoặc FTP server sao cho ta có
thể truy cập từ bên ngoài.
Ví dụ: ftp://ftp.citd.edu.vn/redhat hoặc
http://software.citd.edu.vn/: trong thư mục này ta chứa toàn
bộ các cdrom chứa chương trình cài đặt của Linux
Một đĩa mềm boot được tạo ra từ tập tin bootnet.img: Ta
chép hai tập tin rawrite.exe và bootnet.img từ đĩa CD Rom
thứ nhất của bộ cài đặt Linux trong thư mục dosutils và
images ra một thư mục tạm c:\temp của một máy Windows
để tạo đĩa mềm bootnet. Chạy chương trình rawrite để chép
bootnet.img vào đĩa mềm.

24
Hoặc ta có thể sử dụng trình tiện ích rawritewin để tạo đĩa mềm
boot.
Sau đó ta khởi động lại máy và boot từ đĩa mềm và làm theo
hướng dẫn để có thể cài đặt từ mạng.
5. Quá trình khởi động và kết thúc của
UNIX
Như thông lệ, khi một máy tính được khởi động, sau khi kiểm tra
các thiết bị phần cứng gắn trên máy tính qua các chương trình
kiểm tra ghi trong ROM, hệ điều hành được tải lên bộ nhớ. Công
tác đầu tiên của hệ điều hành là kiểm tra các thiết bị ngoại vi và
tải các chương trình điều khiển (driver) cần thiết lên bộ nhớ. Sau
các công tác này, bắt đầu giai đoạn định hình hệ thống và mỗi hệ
25
điều hành, thậm trí mỗi phiên bản của một hệ điều hành thực hiện
một khác. Chúng tôi xin giới thiệu cách thức khởi động và cấu
hình hệ thống của Linux RedHat 6.x .
Tập tin đầu tiên mà hệ điều hành xem xét đến là /etc/inittab
[root@pascal root]# less /etc/inittab

# inittab

# Default runlevel. The runlevels used by RHS are:

# 0 - halt (Do NOT set initdefault to this)

# 1 - Single user mode

# 2 - Multiuser, without NFS (The same as 3, if

# you do not have networking)

# 3 - Full multiuser mode

# 4 - unused

# 5 - X11

# 6 - reboot (Do NOT set initdefault to this)

id:3:initdefault:

# System initialization.

si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0

l1:1:wait:/etc/rc.d/rc 1

l2:2:wait:/etc/rc.d/rc 2

26
l3:3:wait:/etc/rc.d/rc 3

l4:4:wait:/etc/rc.d/rc 4

l5:5:wait:/etc/rc.d/rc 5

l6:6:wait:/etc/rc.d/rc 6

Mức làm việc (run level) mặc định được quy định trong tập tin
này. Ví dụ trên cho thấy mức mặc định là mức 3 ở dòng cuối
cùng. Unix nói chung có 7 mức hoạt động khác nhau từ 0 đến 6.
 Mức 0 là để shutdown hệ thống.
 Mức 1 là đơn người sử dụng (single user) và thường
được dùng để sửa chữa lỗi hệ thống tập tin
 Mức 2, 3 là hai mức cho đa người sử dụng
 Mức 4 không dùng
 Mức 5 mức cho đa người sử dụng và có giao diện đồ
hoạ X-Window
 Mức 6 dùng để reboot hệ thống
Tương ứng với các mức trên, trong thư mục /etc/rc.d có các thư
mục rc0.d – rc6.d, chứa các tập tin khởi động trong từng mức (rc
là viết tắt của run command). RedHat 6.x có thư mục
/etc/rc.d/init.d chứa tất cả các tập tin khởi động. Thường các tập
tin này là các shell script (tập hợp lệnh shell). Trong các thư mục
rc?.d chỉ có các liên kết hình thức (symbolic link) đến các tập tin
khởi động trong /etc/rc.d/init.d.
Trong các phiên bản mới đây của RedHat Linux ( từ 7.0  8.0)
có thư mục chứa các scripts khởi động là /etc/init.d nhưng thực
chất đây cũng chỉ là một symbolic link đến /etc/rc.d/init.d.

27
Trong các thư mục rc?.d, các script bắt đầu bằng S (start) được
sử dụng khi khởi động, còn các script bắt đầu từ K (kill) dùng để
dừng các tiến trình trước khi qua một mức hoạt động khác.
Toàn bộ các tập tin này quyết định cấu hình làm việc của một
máy Linux sau khi hoàn thành quá trình khởi động. Việc khởi
động hệ thống các dịch vụ cũng thực hiện thông qua cơ chế như
đã miêu tả trên.
Lệnh init số_mức cho phép chuyển giữa các mức của hệ
thống.
Ví dụ :
Để chuyển hệ thống từ mức hiện hành qua mức 1 để sửa chữa.
[root@pascal /etc/rc.d]# init 1
Sau đó init 3 cho phép quay về mức 3 đa người dùng.
[root@pascal /etc/rc.d]# init 3
Shutdown hệ thống
[root@pascal /etc/rc.d]# init 0
Lệnh shutdown [-t sec] [-rhc] time [warning-message]
shutdown –h now: Shutdown hệ thống ngay lập tức
shutdown –h –t xx : Shutdown hệ thống sau xx giây
shutdown –c : Hủy (cancel) lệnh shutdown đã đánh
shutdown –r now: Reboot hệ thống sau khi shutdown
Tham số warning-message: dùng để xuất ra câu thông
báo trên tất cả các terminal nhằm báo cho người dùng biết
hệ thống sắp sửa bị shutdown và người dùng phải nhanh
chóng hoàn tất công việc của mình.
Đăng nhập và thoát khỏi hệ thống Linux

28
Để login vào hệ thống Linux ta nhập username và password tại
màn hình đăng nhập :
Red Hat Linux release 7.3 (Valhalla)
Kernel 2.4.18-3smp on an i686
login: tuanna
Password:
Last login: Sun Dec 1 09:28:51 from 192.168.254.163
[tuanna@blackboard tuanna]$
Chú ý: khi nhập password, hệ thống không xuất hiện các dấu
mask (* ) nhằm đảm bảo an toàn hơn khi login.
Login từ mạng
Dùng telnet :
[root@blackboard xinetd.d]# telnet
192.168.254.16
Trying 192.168.254.16...
Connected to 192.168.254.16.
Escape character is '^]'.
Red Hat Linux release 7.3 (Valhalla)
Kernel 2.4.18-3smp on an i686
login: tuanna
Password:
Last login: Sun Dec 1 09:28:51 from
192.168.254.163

Dùng ssh:
[tuanna@blackboard tuanna]$ ssh 172.16.10.25
The authenticity of host '172.16.10.25
(172.16.10.25)' can't be established.

29
RSA key fingerprint is
9d:08:7d:db:96:75:8e:6c:33:1d:fe:d4:7a:23:e7:c
9.
Are you sure you want to continue connecting
(yes/no)? yes
Warning: Permanently added '172.16.10.25'
(RSA) to the list of known hosts.
tuanna@172.16.10.25's password:
Last login: Sun Dec 8 09:29:50 2002 from
blackboard
[tuanna@pascal tuanna]$
Để thoát ra ta có thể dùng lệnh exit hoặc logout

6. X-Window
6.1 Giới thiệu
X Window System: Lịch sử và kiến trúc
X Window - X Window là một hệ thống windows khả chuyển,
network-transparent chạy trên một dãi rộng lớn các máy tính và
các máy đồ hoạ. Các bản thương mại đều có sẵn cho nhiều
platforms , được gọi dưới các tên:
X Window System
Version 11
Window System, Version 11
X11
Hệ thống X Window được phát triển trong Laboratory for
Computer Science tại MIT (Massachusetts Institute of
Technology) như là một phần trong dự án Athena hợp tác với
DEC, và được phát hành lần đầu vào năm 1984.

30
Người chủ trì dự án là Robert Scheifler, và phiên bản X đầu tiên
mang ơn "W" Windowing package(được phát triển bởi Paul
Asente tại Stanford) rất nhiều.
Tháng 9 năm 1987, MIT xuất phiên bản X11 đầu tiên mà chúng
ta còn sử dụng đến ngày nay.
Rất nhiều ý tưởng đến với X Window cũng đến từ việc nghiên
cứu tại tập đoàn Xerox Corporation's Palo Alto Research Center
(PARC), họ đã làm việc trên các máy tính như Parc và Star trong
các thập niên 70. Không có máy tính nào được thương mại hoá,
nhưng khi Xerox demo một hệ Window để chạy smalltalk 80 thì
mọi người thật sự bị cuốn hút. Các dòng sản phẩm của 3 máy tính
đã hiện thực giao diện WIMP (Windows, Icons, Menus, Pointer)
hoàn hảo đến mức nó làm nổ ra một cuộc cách mạng trong ngành
máy tính lúc này. Trong vòng 1 vài năm nhiều người sử dụng
máy tính đã nếm vị ngọt của hệ window và một cách tự tin bạn có
thể nói rằng họ không bao giờ nhìn lại.
X Window hiện tại được phát triển và phân phối bởi X
Consortium, Tuy nhiên, bản quyền thư viện hiện có phục vụ cho
việc phát triển X là miễn phí hoặc phí rất thấp, chính điều này đã
thúc đẩy cho việc phát triển X ngày càng rộng rãi hơn.
Một phiên bản của MIT X Window system version 11 release 6
(X11R6) cho cho các 80386/80486/Pentium UNIX systems được
phát triển bởi một nhóm các lập trình viên mà dẫn đầu là David
Wexelblat dwex@XFree86.org . Trong đó XFree86 là một bộ
sưu tập của các X servers cho các hệ điều hành Unix-like trên các
máy Intel x86.
Công việc được bắt đầu từ X386, và đóng góp rất nhiều cho sự
phát triển X11R6 sau đó. Chúng ta hãy nghĩ đến XFree86, vì tất
cả các ý định và mục đích, để trở thành X Window cho Linux,
nếu không chúng ta sẽ phải trả giá khá nhiều cho một X server.
X Window được xây dựng trên rất nhiều toolkits, hay libraries.
Nó được xây dựng trên X Toolkit Intrinsics và Athena Widgets.

31
Nhiều chương trình dùng XView hay Motif tools. Nhiều chương
trình ngày càng được hoàn thiện, thống nhất hệ Window và
truyền thông, như GNOME hay KDE. Nếu bạn thấy rất nhiều các
chương trình chưa biên dịch hay bạn cảm thấy lạc lõng hoặc gặp
các lỗi không tthể giải thích được bạn chỉ có thể ao ước rằng
mình đã cài đặt X đúng , bởi vì hầu hết các libraries (ngoại trừ
Motif) là miễn phí và được preinstalled với X trên hệ thống của
bạn.
X Window System servers chạy trên các máy tính có màn hình
đồ hoạ. Server phân phát các input của người dùng và chấp nhận
các output request từ nhiều chương trình client. Thông qua nhiều
kênh giao tiếp giữa các process. (through a variety of different
interprocess communication channels) . Mặc dù hầu hết các
trường hợp thông thường là chương trình client được chạy trên
một máy cùng với server, clients có thể chạy một cách trong suốt
từ một máy khác ( bao gồm cả các máy có cấu trúc hoặc hệ điều
hành hoàn toàn khác) .
6.2 Thành phần của Desktop
Có một số luật và các thành ngữ cơ bản mà ta phải quen thuộc để
làm cho việc sử dụng X được dễ dàng.
Screen là toàn bộ ``desktop'' của bạn , và 2 từ này có thể được
hoán chuyển cho nhau và . Về mặt kỹ thuật mà nói, screen là
primary video display bạn có thể xem X và bạn có thể có nhiều
hơn một screen, do đó bạn có thể có nhiều hơn một máy tính
đang chạy X trên một X-server , do đó ta cũng để ý đến sự khác
biệt .
Root window là background của screen. Nó được đề cập đến như
là một window đơn lẻ, nó không đối xử như bất kỳ các window
khác , nhưng thay vào đó bạn chạy các ứng dụng trên root
window, đặt một hình lên đó hay chỉ là một màu đơn trên nó.

32
Window manager là phần giao tiếp chính giữa X Window system
và người dùng. Window manager cung cấp các chức năng như
window borders, menus, icons, virtual desktops, button bars, tool
bars, và cho phép user có thể customize nó .
Con trỏ là một mũi tên hoặc bất kỳ một hình nào dùng để chỉ vị
trí mouse (hay các thiết bị chỉ điểm khác ) tương ứng trên màn
hình.
Active window được gọi là ``focus,'' các windows còn lại trên
desktop là ``unfocused.''
Các cách làm việc của menus và icons trên X tương tự như trên
các họ windowing systems, vàc các luật chung nhất cũng được áp
dụng. Windows chỉ có text được gọi là terminal emulators, như là
xterm, nhưng nó cho phép bạn có nhiều hơn một xterm trong
cùng một lúc .
Khởi động X Window
Có rất nhiều cách để khởi động X server và khởi động các ứng
dụng clients. Phương pháp cụ thể phụ thuộc vào OS nào bạn đang
sử dụng và bạn sự dụng hệ Windows nào thay vì X-Window.
xdm (the X Display Manager)
Nếu bạn muốn luôn luôn có X-window chạy trên màn hình của
mình thì, administrator của bạn có thể cấu hình máy bạn có thể
dùng X Display Manager xdm. Chuơng trình này thường được hệ
thống khởi động lên bởi hệ thống khi boot và trông coi server
running và việc logged in của users . Nếu bạn đang chạy xdm,
bạn sẽ thấy Welcome window trên màn hình và hỏi username &
password của bạn. Công việc của bạn thật đơn giản là nhập
username & password vào và làm việc bình thường .
xinit (run manually from the shell)
Các sites hỗ trợ nhiều hơn một window system có thể chọn dùng
chương trình xinit để khởi động X manually. Nếu điều này đúng
trên hệ thống của bạn thì bạn có thể dùng các lệnh :
33
startx, x11, xstart để khởi động X-window.
DISPLAY NAME
Nhìn từ góc độ người sử dụng server có display name theo dạng
sau:
hostname: displaynumber.screennumber
Thông tin này được dùng bởi ứng dụng để phát hiện làm thế nào
nó có thể nối tới server và màn hình nào nó có thể sử dụng mặc
định (trên các máy có nhiều monitors):
Hostname: Tên máy cụ thể của máy mà màn hình vật lý được kết
nối. Nếu tên máy không được chỉ định thì cách dễ nhất là giao
tiếp với server trên cùng một máy .
Displaynumber: Từ "display" được dùng để chỉ tập hợp các
monitors mà chia sẻ bàn phím và các thiết bị chỉ điểm (mouse,
tablet, etc.). Hầu hết các workstations đều có 1 keyboard, và do
đó , chỉ có 1 display. Trong các hệ thống khác lớn hơn, đa người
dùng thường có nhiều màn hình do đó có nhiều hơn 1 người có
thể cùng làm việc . Ðể tránh nhầm lẫn mỗi màn hình trên một
máy được gán cho 1 con số (bắt đầu từ 0) khi X server cho màn
hình được khởi động. Display number phải luôn được ghi trong
tên màn hình.
Screennumber: Một vài màn hình chia sẻ 1 keyboard và một thiết
bị chỉ điểm giữa 2 hoặc nhiều monitors. Khi mỗi monitor có một
tập các windows, mỗi screen được gán một screen number (bắt
đầu từ 0) khi X server cho display này được khởi động.
XHOST
xhost - server access control program for X
Công dụng: cho phép một X-Client được phép xuất màn hình của
mình lên X server đang chạy.
Cách dùng

34
xhost [[+-]name ...]
Ví dụ :
# xhost +172.16.1.5
Cho phép X-window trên máy 172.16.1.5 xuất màn hình đồ hoạ
lên máy hiện tại.
Mô tả
Chương trình xhost được dùng để thêm hoặc bớt host names vào
một danh sách các kết nối được phép nối vào X server.
OPTIONS
Xhost chấp nhận các lệnh được mô tả dưới đây. Vì mục đích
security, chỉ các host được kiểm soát mới được kết nối vào X-
server. Có nghĩa là dù cho ta có export DISPLAY lên một máy
nào mà máy đó không cho phép ta kết nối thì việc xuất màn hình
cũng không thành công . Ðối với máy trạm unix, X-server chạy
cùng trên máy đó.
+name : Tên của máy được phép kết nối vào X server. name có
thể là IP address của máy đó (Trong trường hợp DNS có khai báo
host name đó ).
-name : Tên của máy bị xoá khỏi danh sách các X-Client được
phép kết nối vào X server.
Các thao tác phải làm để xuất một màn hình từ Computer A sang
Computer B

35
7. Chọn Window Manager
Thông thường khi cài đặt Linux có rất nhiều Window manager để
cho chúng ta chọn lựa . Nhưng đối với các version Linux sau này
người ta thường chọn GNOME mặc định cho chúng ta. Khiến đôi
khi ta lầm tưởng màn hình X Window chỉ có GNOME. Ðể chọn
các kiểu X Window ta có thể vào tập tin Xclients để thay đổi các
kiểu window bằng cách comment các dòng lại
#!/bin/bash

# (c) 1999, 2000 Red Hat, Inc.

PREFERRED=

if [ -f /etc/sysconfig/desktop ]; then

if [ -n "`grep -i GNOME /etc/sysconfig/desktop`" ];


then

PREFERRED=gnome-session

elif [ -n "`grep -i KDE /etc/sysconfig/desktop`" ];


then

PREFERRED=startkde

elif [ -n "`grep -i AnotherLevel

36
/etc/sysconfig/desktop`" ]; then

PREFERRED=AnotherLevel

fi

fi

if [ -n "$PREFERRED" -a "$PREFERRED" !=
"AnotherLevel" ] && \

which $PREFERRED >/dev/null 2>&1; then

PREFERRED=`which $PREFERRED`

exec $PREFERRED

fi

# now if we can reach here, either they want


AnotherLevel or there was

# no desktop file present and the PREFERRED variable


is not set.

if [ -z "$PREFERRED" ]; then

GSESSION=gnome-session

STARTKDE=startkde

# by default, we run GNOME.

if which $GSESSION >/dev/null 2>&1; then

exec `which $GSESSION`

fi

# if GNOME isn't installed, try KDE.

if which $STARTKDE >/dev/null 2>&1; then

37
exec `which $STARTKDE`

fi

fi

# Last, try AnotherLevel

# these files are left sitting around by


TheNextLevel.

rm -f $HOME/Xrootenv.0

rm -f /tmp/fvwmrc* 2>/dev/null

# First thing - check the user preferences

if [ -f $HOME/.wm_style ] ; then

WMSTYLE=`cat $HOME/.wm_style`

case "$WMSTYLE" in

Afterstep | AfterStep)

exec /usr/X11R6/bin/RunWM --AfterStep

;;

WindowMaker | Windowmaker | WMaker | wmaker)

exec /usr/X11R6/bin/RunWM --WindowMaker

;;

Fvwm95 | fvwm95)

exec /usr/X11R6/bin/RunWM --Fvwm95

;;

Mwm | MWM | Lesstif)

38
exec /usr/X11R6/bin/RunWM --FvwmMWM

;;

esac

fi

KDE
Nếu bạn chạy KDE lần đầu tiên thì màn hình sau sẽ xuất hiện

39
40
41
42
43
Các dialog trên xuất hiện cho phép ta thiết lập các tùy chọn theo
quốc gia, ngôn ngữ hiển thị và chế độ KDE , chi tiết hay không
chi tiết.
Và sau cùng khi cài đặt thành công, màn hình sau sẽ xuất hiện:

44
45
Quản trị người dùng
1. Giới thiệu người dùng và nhóm
1.1 Người dùng – users
Mọi truy nhập vào hệ thống đều thông qua một tài khoản của
người sử dụng. Mỗi tài khoản được thiết lập bởi người quản trị hệ
thống ngoại trừ tài khoản root (và một số tài khoản hệ thống).
Mặc dù một số hệ Linux chỉ có một người dùng nhưng cũng
không nên dùng tài khoản root cho các hoạt động thường ngày.
Hầu hết các hệ thống cho phép nhiều người truy nhập vào. Vậy
việc quản lý các tài khoản, các thư mục liên quan là một khía
cạnh quan trọng trong việc quản trị hệ thống Linux
Tài khoản của người quản trị
Trong quá trình cài đặt Linux chúng ta khởi tạo người sử dụng
root cho hệ thống. Đây là superuser, tức là người sử dụng đặc
biệt có quyền không giới hạn. Sử dụng quyền root chúng ta rất
thấy thoải mái vì chúng ta có thể làm được thao tác mà không
phải lo lắng gì đết xét quyền truy cập này hay khác. Tuy nhiên,
khi hệ thống bị sự cố do một lỗi lầm nào đó, chúng ta mới thấy sự
nguy hiểm khi làm việc như root.
Hãy chỉ dùng quyền root khi bạn không có cách nào khác.
Một điều quan trọng là không phải tài khoản superuser nào cũng
gọi là root, mặc dù nó được tạo mặc định là root khi cài đặt
Linux. Nó có thể có tên bất kỳ nhưng thường được dùng nhất
dưới tên root. Tài khoản này được định nghĩa là tài khoản có
UserID là 0 , các userID được định nghĩa trong file /etc/passwd
Cần phân biệt bạn đang login như root hay người sử dụng thường
thông qua dấu nhắc của shell.
login: tuanna

46
Password:
Last login: Sat Oct 28 14:30:15 from 172.16.10.199
[tuanna@pascal tuanna]$ su –l root
Password:
[root@pascal /root]#
Dòng thứ tư với dấu $ cho thấy ta đang kết nối như một người sử
dụng thường (tuanna). Dòng cuối cùng với dấu # cho thấy bạn
đang thực hiện các lệnh như root. Lệnh su user_name cho phép
bạn thay đổi login dưới một user khác (user_name) mà không
phải logout rồi login lại.
Bạn cần tạo các tài khoản (account) cho người sử dụng thường
sớm nhất có thể được (đầu tiên là cho bản thân bạn). Với những
server quan trọng và có nhiều dịch vụ khác nhau, thậm trí bạn có
thể tạo ra các superuser thích hợp cho từng dịch vụ để tránh dùng
root cho các công tác này. Ví dụ như superuser cho công tác
backup chỉ cần chức năng đọc (read-only) mà không cần chức
năng ghi.

1.2 Nhóm - groups


Mọi người dùng trong các hệ unix hay Linux đều thuộc về một
nhóm. Nhóm dùng để gom nhóm các users có chung một quyền
hoặc chính sách riêng đối với hệ thống nhằm tạo thuận lợi trong
việc quản trị hệ thống Linux. Ví dụ như trong một cơ quan, có
nhiều phòng ban, mỗi phòng ban có các users và các users của
các phòng ban khác nhau sẽ có các chính sách bảo mật khác
nhau. Các users thường chỉ được sử dụng tài nguyên hệ thống
một cách có hệ thống. Chẳng hạn các users của văn phòng và các
phòng nghiên cứu được sử dụng các tài nguyên sau:
Truy cập Web

47
Sử dụng e-mail để trao đổi thông tin
Sử dụng các chương trình chat, icq để trao đổi tin tức
Truy cập đến các file server trong công ty
Không được login vào các máy chủ, không được chạy
chương trình trên máy chủ
Tuy nhiên các users của phòng quản trị hệ thống có thể có các
quyền ưu tiên hơn:
Bao gồm các quyền của người dùng bình thường trên
Có quyền thực thi một số lệnh đặc biệt dành cho quản trị
hệ thống
Có thể login vào server.
Các nhóm được đặt quyền để các thành viên của nó có thể truy
nhập đến các thiết bị, file, hệ thống file hoặc toàn bộ máy tính mà
những người khác nhóm có thể bị hạn chế.
Các thông tin về nhóm được lưu trong file /etc/groups
suse:~ # more /etc/group

root:x:0:root

bin:x:1:root,bin,daemon

daemon:x:2:

sys:x:3:

kmem:x:9:

wheel:x:10:

mail:x:12:cyrus

news:x:13:news

48
uucp:x:14:uucp,fax,root,fnet,tuanna

shadow:x:15:root,gdm

named:x:44:named

dbmaker:x:52:

oinstall:x:54:

dba:x:55:oracle

localham:x:56:dpbox

logmastr:x:57:

users:x:100:

nogroup:x:65534:root

suse:~ #

Các dòng có dạng như sau:


 group name:group password:group ID:users

 group name: Tên duy nhất xác định một nhóm, thường dài
tối đa 8 ký tự

 group password:Trường mật khẩu đã được mã hoá,


thường để trắng hoặc là dấu *. Cũng có thể là mật khẩu
mà user muốn gia nhập nhóm phải nhập vào. Tuy nhiên
không phải phiên bản nào của Unix đều sử dụng trường
này do đó nó được để trống để tương thích với nhau.

 group ID: Số duy nhất cho mỗi nhóm, được sử dụng bởi
hệ điều hành

49
 users : Chứa danh sách mọi tên người dùng thuộc nhóm
đó, phân cách bởi dấu ",". Danh sách này không kể những
người dùng thuộc nhóm đó theo số hiệu nhóm đã được
ghi trong file /etc/passwd của người đó (tức là những
thành viên mặc định của nhóm).

Mọi hệ Linux đều có một số các nhóm mặc định thuộc hệ điều
hành. Các nhóm này thường là bin,mail,uucp,sys,… Do vậy
không nên cho một người sử dụng thuộc vào nhóm này vì chúng
sẽ có quyền tương đương như root. Chỉ có các đăng nhập hệ
thống mới cho phép truy nhập đến các nhóm của hệ điều hành .
Các nhóm mặc định của hệ thống:
1 root/wheel/system: thường dùng để cho phép người
dùng sử dụng lệnh su để chuyển lên quyền root.
2 deamon: dùng để chỉ những người làm chủ thư mục
spool ( mail, squid, lpd,…)
3 kmem: dùng cho các chương trình truy cập đến kernel,
bộ nhớ trực tiếp ( ps )
4 tty: làm chủ tất cả các file đặc biệt dùng làm việc với
terminal
Thêm nhóm
groupadd hoặc addgroup
Xoá nhóm
groupdel hoặc delgroup

2. Tập tin /etc/passwd


Tập tin /etc/passwd đóng một vai trò sống còn đối với một hệ
thống Unix. Mọi người đều có thể đọc được tập tin này nhưng chỉ

50
có root mới có quyền thay đổi nó. Tập tin /etc/passwd được lưu
dưới dạng text như đại đa số các tập tin cấu hình của Unix.
[oracle@appserv oracle]$ more /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:
...
tuanna:x:501:501:Tuanna:/home/tuanna:/bin/bash
Mỗi user được lưu trong một dòng gồm 7 cột.
Cột 1 : tên người sử dụng
Cột 2 : mã liên quan đến passwd cho Unix chuẩn và ‘x’ đối với
Linux. Linux lưu mã này trong một tập tin khác /etc/shadow mà
chỉ có root mới có quyền đọc.
Cột 3:4 : user ID:group ID
Cột 5: Tên đầy đủ của người sử dụng. Một số phần mềm phá
password sử dụng dữ liệu của cột này để thử đoán password.
Cột 6: thư mục cá nhân
Cột 7: chương trình sẽ chạy đầu tiên sau khi login (thường là
shell) cho user
Tập tin mở đầu bởi superuser root. Chú ý là tất cả những user có
user ID = 0 đều là root!!! Tiếp theo là các user hệ thống. Đây là
các user không có thật và không thể login vào hệ thống. Cuối
cùng là các user bình thường.

3. Tập tin /etc/shadow


Unix truyền thống lưu các thông tin liên quan tới mật khẩu để
đăng nhập (login) ở trong /etc/passwd. Tuy nhhiên, do đây là tập
tin phải đọc được bởi tất cả mọi người do một số yêu cầu cho
hoạt động bình thường của hệ thống (như chuyển User ID thành

51
tên khi hiển thị trong lệnh ls chẳng hạn) và nhìn chung các user
đặt mật khẩu "yếu", do đó hầu hết các Unix phiên bản mới đều
lưu mật khẩu trong một tập tin khác /etc/shadow và chỉ co root
được quyền đọc tập tin này.
Chú ý: Theo cách xây dựng mã hóa mật khẩu, chỉ có 2 cách phá
mật khẩu là vét cạn (brute force) và đoán. Phương pháp vét cạn,
theo tính toán chặt chẽ, là không thể thực hiện nổi vì đòi hỏi thời
gian tính toán quá lớn, còn đoán thì chỉ tìm ra những mật khẩu
ngắn, hoặc "yếu", ví dụ như những từ tìm thấy trong từ điển như
god, darling ...

4. Các lệnh quản trị người dùng và


nhóm
4.1 Lệnh adduser
Để tạo một một account, bạn có thể sử dụng lệnh adduser (hoặc
useradd tùy vào phiên bản). Tất nhiên là bạn phải làm thao tác
này dưới quyền root (dấu nhắc #)
useradd [-c comment] [-d home_dir]
[-e expire_date]
[-g initial_group] [-G group[,...]]
[-p passwd]
[-s shell] [-u uid [ -o]] [-n] [-r] login
Trong đó các tham số :
-c comment: Lời chú thích , thường là tên đầy đủ của
người dùng
-d home_dir: thư mục gốc của người dùng
-e expire_date: ngày hết hiệu lực của account

52
-g initial_group: nhóm khởi tạo
-G group : nhóm mà người dùng thuộc vào
-p passwd: password của người dùng, password này phải
được mã hoá trước
-s shell: shell mặc định của user
-u uid : user identification
login : tên username.
Ví dụ:
[root@appserv oracle]# /usr/sbin/adduser foo
[root@appserv oracle]# passwd foo
Changing password for user foo
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully
[root@appserv oracle]#
Sau khi bạn tạo xong user bởi dòng đầu tiên của ví dụ trên, user
foo vẫn chưa kết nối được vì thiếu password. Bạn phải khởi tạo
password cho foo bởi lệnh passwd foo như thấy ở trên.
Vì vấn đề an ninh của máy Unix này và kéo theo sự an toàn của
toàn hệ thống mạng của bạn, rất quan trọng chọn đúng password.
Một password gọi là đúng nếu :
 Có độ dài tối thiểu 8 ký tự.
 Phối hợp giữa chữ thường, chữ hoa, số và các ký tự đặc biệt
 Không liên quan đến tên tuổi, ngày sinh … của bạn và
người thân
 Không có trong từ điển

53
Trong ví dụ trên, bạn khởi tạo người dùng và không quan tâm gì
đến nhóm (group) của người dùng. Rất tiện lợi nếu bạn tập hợp
nhiều người dùng vào chung một nhóm có cùng một chức năng
và cùng chia sẻ nhau dữ liệu. Khi bạn tạo người sử dụng như trên,
Linux sẽ tạo cho mỗi người một nhóm. Đọc tập tin /etc/passwd
ta thấy
[root@appserv oracle]# more /etc/passwd|grep foo
foo:x:1012:1013::/home/foo:/bin/bash
[root@appserv oracle]#
foo là user số 1012 và thuộc nhóm 1013.
Xem tập tin /etc/group ta thấy
[root@appserv oracle]# more /etc/group
root:x:0:root
……………….
users:x:100:
………………
foo:x:1013:
và ta có thể kết nạp foo vào nhóm users bằng cách thay số 1013
bằng 100, là group ID của users.

4.2 Lệnh userdel


Lệnh userdel dùng để xóa một user. Bạn cũng có thể xóa một
user bằng cách xóa đi dòng dữ liệu tương ứng trong tập tin
/etc/passwd.
Quá trình xoá bằng tay :
1. Xoá điểm nhập tương ứng với người dùng trong
/etc/passwd và trong /etc/group.
54
2. Xoá các file mail và mail alias của người dùng
3. Xoá mọi cron và at
4. Xoá thư mục cá nhân của user đó

55
Hệ thống file EXT2
1. Giới thiệu hệ thống file ext2
Giới thiệu hệ thống file ext2 được giới thiệu vào đầu năm 1993
và được thiết kế riêng cho Linux. Nó có nhiều tính năng tăng
cường để khắc phục các hạn chế của các hệ thống file khác.

Tính năng Minix EXT EXT 2

Kích thước hệ thống file 64 MB 2 GB 4 TB


lớn nhất

Kích thước file lớn nhất 64 MB 2 GB 2 GB

Chiều dài tối đa tên file 30 ký tự 255 ký 255 ký


tự tự

Kích thước block tuỳ Không Không Có


biến

2. Phân hoạch và định dạng đĩa


2.1 Phân hoạch đĩa cứng
Như hầu hết các hệ điều hành khác, Linux yêu cầu đĩa phải được
phân hoạch. Việc phân hoạch đĩa cứng làm cho ta có thể chia nhỏ
một đĩa cứng lớn thành nhiều đĩa logic nhỏ dễ quản lý.
Các phân đoạn đĩa cứng được chứa trong bản phân hoạch đĩa
được lưu trong boot record tại sector bắt đầu của đĩa cứng.

56
Bảng phân hoạch có thể chứa đến 4 partitions Để vượt qua giới
hạn này ta có thể định nghĩa một partition mở rộng với các
partition logic nằm trong partition mở rộng này.

Các loại 64 MB
partition

Primary Phần Logic của đĩa ở mức cao nhất.


Ở đây chỉ có thể có 4 partition.

Extended Không chứa dữ liệu. Partition này chỉ


dùng để chứa bảng phân hoạch đĩa
của chính nó

Logical Được tạo trong partition mở rộng.


Không có giới hạn số lượng logic
partition. Tuy nhiên trên thực tế ta
nên chọn số lượng partition không
quá 12 cho 1 đĩa.

2.2 Lệnh fdisk


Lệnh fdisk dùng để tạo partition. Có các tính năng sau:
[root@blackboard root]# fdisk /dev/sda
The number of cylinders for this disk is set to 4425. 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)

57
Command (m for help): m
n : tạo mới một partition
p : in ra partition table
q : thoát không thay đổi
t : đổi kiểu định dạng file ( DOS, FAT16, Fat 32, NTFS,…)
w : ghi những thay đổi vào đĩa và thoát
Ví dụ:
Command (m for help): p
Disk /dev/sda: 255 heads, 63 sectors, 4425
cylinders
Units = cylinders of 16065 * 512 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 8 4294 34435327+ 83 Linux
/dev/sda2 4295 4425 1052257+ 82 Linux swap
/dev/sda4 1 7 56196 fe LANstep

2.3 Định dạng đĩa


Định dạng đĩa là áp dụng một hệ thống file vào đĩa, khi đó cho
phép ta có thể ghi thông tin vào đĩa. Sau khi đĩa được phân
hoạch, nó phải được format mới có thể dùng được.
Lệnh mkfs: Make File System
Cú pháp: mkfs /dev/hdaX ( trong đó X có thể là 1,2,3,4,5,6,…)
Có các loại lệnh mkfs khác nhau:
mkfs : format đĩa với file system mặc định của Linux
mkfs.ext2 : format đĩa thành ext2 file system
mkfs.minix : format đĩa thành minix file system

58
mkfs.ext3 : format đĩa thành ext3 file system
mkfs.msdos : format đĩa thành FAT 16
mkfs.vfat : format đĩa thành FAT 32
2.4 Cấu trúc inode

3. Cấu hình và mount đĩa


3.1 Mount tự động - /etc/fstab

59
Hệ thống tập tin được OS Linux mount trong quá trình khởi động
tuân theo các thông số ghi trong tập tin /etc/fstab (một lần nữa,
nếu bạn nắm vững cú pháp của tập tin này, bạn có thể thay đổi nó
thông qua một chương trình soạn thảo văn bản text bất kỳ và có
một kiểu khởi động hệ thống tập tin như bạn muốn)
[root@blackboard root]# less /etc/fstab
LABEL=/ / ext3 defaults 1 1
none /dev/pts devpts gid=5,mode=620 0 0
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
/dev/sda2 swap swap defaults 0 0
/dev/sdb1 /export ext3 defaults 0 0
/dev/cdrom /mnt/cdrom iso9660
noauto,owner,kudzu,ro 0 0
/dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0
0
Cột 1 (fs_spec) : các trang thiết bị (device) cần mount
Cột 2 (fs_file) : điểm treo (mount point)
Cột 3 (fs_vfstype) : Kiểu của hệ thống tập tin,
Cột 4 (fs_mntops) : các options. Default = mount khi khởi động,
ro = read
only, user nếu cho phép user mount hệ thống tập tin này ...
Cột 5 (fs_freq) : hiện thị (dumped ) hay không hệ thống tập tin
Cột 6 (fs_passno) : có cần kiểm tra hay không bởi fsck

3.2 Mounting và Unmounting


Để mount một partition vào cây thư mục ta dùng lệnh sau

60
[root@blackboard root]# mount /dev/cdrom /mnt/cdrom
[root@blackboard root]# mount /dev/fd0 /mnt/floppy –t
msdos
Unmount một thư mục ta sử dụng lệnh umount ,lưu ý là umount
chứ không phải là unmount ( ở đây lệnh không có chữ n)
[root@blackboard root]# umount /mnt/cdrom
[root@blackboard root]# umount /mnt/floppy
Ngoài ra đối với cdrom ta có thể đóng mở hộc đựng cdrom ra
bằng lệnh eject mà không cần thông qua lệnh umount.
[root@blackboard root]# eject cdrom
 Lấy cdrom ra khỏi ổ đĩa
[root@blackboard root]# eject -t
 Đóng ổ cdrom lại
Lưu ý: khi có một user hay tiến trình nào đang tham chiếu đến
Cdrom thì ta không thể umount nó được . Hệ thống sẽ báo :
device busy !
4. Quản trị hệ thống file Ext2
Filesystem caching:
Nhằm tăng hiệu suất của toàn hệ thống file ext2, cache được
dùng để lưu giữ các dữ liệu được dùng thường xuyên. Thông tin
của filesystem được cache trong bộ nhớ, đôi khi được tham khảo
tới như là một bộ đệm đĩa, bởi vì việc truy cập vào bộ nhớ thì
nhanh hơn nhiều so với các đĩa vật lý. Cả hai quá trình đọc và ghi
đều được cache dữ liệu trên RAM. Hệ thống buffers đĩa càng lớn
thì filesystem đáp ứng càng nhanh cho các thao tác đọc ghi. Do
RAM là bộ nhớ tạm thời, buffer sẽ được ghi vào đĩa khi máy hoạt
động, hay khi filesystem được unmount.

61
Lệnh sync có thể dùng để ép kernel ghi tất cả các buffers vào các
file trên đĩa. Lệnh này có thể sử dụng không cần tham số.
Ví dụ: với lý do này có thể giải thích vì sao khi chép file vào đĩa
mềm ta thấy hệ thống chạy rất nhanh tuy nhiên lúc này thực sự
file chưa được ghi vào đĩa mềm. nếu để ý thì bạn sẽ thấy khoảng
5 giây sau đèn ổ mềm mới bắt đầu sáng. Nếu trước đó ta cứ
tưởng là đã chép xong file mà rút đĩa mềm ra thì sẽ không có file
nào được ghi vào đĩa cả.

5. Sữa lỗi đĩa


5.1 Lệnh fsck
Linux đòi hỏi cần được dừng theo đúng quy trình, tức là phải
shutdown máy trước khi tắt điện bằng công tắc. Mỗi khi máy
Linux bị tắt đột ngột, hệ thống tập tin bị hư hại và cần được sửa
chữa qua dịch vụ fsck (file system check). Thông thường, fsck
sửa chữa thành công một cách tự động hệ thống tập tin và Linux
khởi động lại dễ dàng. Tuy nhiên, nếu hư hỏng quá nặng, Linux
sẽ chuyển qua chế độ single mode để sửa chữa. Khi đó, chúng ta
chỉ có thể làm việc với máy trực tiếp trên bàn phím của nó. Ta sẽ
phải sử dụng lệnh
fsck thiết_bị_đĩa_cứng_bị_hư
để sửa chữa. Ví dụ như fsck /dev/hda1 sẽ sửa phân đoạn đầu của
ổ đĩa master của controller IDE số 0.
5.2 Sự phân mảnh của hệ thống file ( fragmentation)
Hệ thống ext2 được thiết kế nhằm hạn chế tối thiểu sự phân mảnh
nên ta không cần phải defragment hệ thống file ext2.
Nguyên nhân gây ra sự phân mảnh của file system là việc ghi file
nhiều lần trên ổ đĩa. Trong đó các file làm bộ nhớ mở rộng của hệ
thống trên đĩa là có nguy cơ bị phân mảnh nhiều nhất.
62
Đối với các hệ điều hành MS Windows, hệ thống bộ nhớ mở rộng
này nằm trên cùng một partition chính của hệ thống thông qua
file pagefile.sys còn trong Linux thì hệ thống bộ nhớ mở rộng này
được cho ra một partition riêng nên hạn chế rất nhiều sự phân
mảnh.
6. Các quyền trên file – umask
Do Linux là một hệ điều hành multitasking và multiuser, nhiều
người cùng có thể sử dụng một máy Linux và một người có thể
cho chạy nhiều chương trình khác nhau. Có hai vấn đề lớn được
đặt ra : quyền sở hữu các dữ liệu trên đĩa và phân chia tài nguyên
hệ thống như CPU, RAM ... giữa các process. Chúng ta sẽ bàn về
sở hữu các tập tin và các quyền truy xuất tập tin.
Tất cả các tập tin và thư mục của Linux đều có người sở hữu và
quyền truy nhập. Bạn có thể đổi các tính chất này cho phép nhiều
hay ít quyền truy nhập hơn đối với một tập tin hay thư mục.
Quyền của tập tin còn cho phép xác định tập tin có là một chương
trình (application) hay không (khác với MSDOS và MSWindows
xác định tính chất này qua phần mở rộng của tên tập tin) .Ví dụ
với lệnh ls –l chúng ta có thể thấy
-rw-r—r— 1 fido users 163 Dec 7 14:31 myfile
Cột đầu chỉ ra quyền truy cập tập tin
Cột 2 chỉ số liên kết (link) đối với tập tin hay thư mục
Cột 3, 4 chỉ chủ sở hữu và nhóm sở hữu
Cột 5 chỉ độ dài của tập tin
Cột 6 chỉ thời gian thay đổi cuối cùng
Cột 7 là tên tập tin hay thư mục
Trong ví dụ trên, các ký tự -rw-r—r— biểu thị quyền truy cập
của tập tin myfile. Sở hữu của myfile là fido và nhóm sở hữu
myfile là users . Độ dài của myfile là 163 bytes. Thời điểm

63
myfile thay đối cuối cùng là 7/12 của năm hiện hành vào lúc
14:31.
Linux cho phép người sử dụng xác định các quyền đọc (read),
viết (write) và thực hiện (execute) cho từng đối tượng sở hữu
(the owner), nhóm (the group), và những người còn lại ("others"
hay everyone else).
Quyền đọc cho phép bạn đọc nội dung của tập tin. Đối với thư
mục quyền đọc cho phép bạn sử dụng lệnh ls để xem nội dung
của thư mục.
Quyền viết cho phép bạn thay đổi nội dung hay xóa tập tin. Đối
với thư mục, quyền viết cho phép bạn tạo ra, xóa hay thay đổi tên
các tập tin trong thư mục không phụ thuộc vào quyền cụ thể của
tập tin trong thư mục. Như vậy quyền viết của thư mục sẽ vô hiệu
hóa các quyền truy cập của tập tin trong thư mục và bạn đọc phải
để ý tính chất này.
Quyền thực hiện cho phép bạn gọi chương trình lên bộ nhớ bằng
cách nhập từ bàn phím tên của tập tin. Đối với thư mục, bạn chỉ
có thể "vào" thư mục bởi lệnh cd nếu bạn có quyền thực hiện với
thư mục .
Xem xét lại ví dụ trên :
-rw-r—r— 1 fido users 163 Dec 7 14:31 myfile
Ký tự đầu tiên của quyền là ký tự "–" ám chỉ rằng đó là một tập
tin bình thường. Nếu myfile là một thư mục, ta sẽ thấy vào dàó
ký tự d. Ngoài ra còn có c cho thiết bị ngoại vi dạng ký tự (như
bàn phím), b cho thiết bị ngoại vi dạng block (như ổ đĩa cứng).
Chín ký tự tiếp theo chia thành 3 nhóm, cho phép xác định quyền
của ba nhóm sở hữu (owner), nhóm (group) và còn lại (other).
Mỗi cặp ba này cho phép xác định quyền đọc, viết và thực hiện
theo thứ tự kể trên. Quyền đọc viết tắt là "r" ở vị trí đầu tiên,
quyền viết viết tắt bằng "w" ở vị trí thứ hai và vị trí thứ ba là

64
quyền thực hiện ký hiệu bằng chữ "x" . Nếu một quyền không
được cho, tại vị trí đó sẽ có ký tự "-" .
Trong trường hợp của tập tin myfile, sở hữu có quyền rw tức là
đọc và viết. Myfile không phải là một chương trình. Nhóm cùng
với còn lại chỉ có quyền đọc tập tin (read-only). Hình sau cho ta
thấy rõ hơn cách "đọc" quyền truy cập đối với tập tin.
Quyền truy cập cơ bản của tập tin

Song song với cách ký hiệu miêu tả bằng ký tự như ở trên, quyền
thao tác tập tin còn có thể cho dưới dạng 3 số . Đối với myfile,
quyền đó là 644. Điều quan trọng là phải hiểu cách ký hiệu bằng
số vì nó liên quan đến việc thay đổi các quyền sau này. Các số có
thể nhận tất cả các giá trị từ 0 đến 7. Số đầu tiên miêu tả quyền
của sở hữu, số thứ hai cho nhóm và số thứ ba cho còn lại.
Mỗi số là tổng của các quyền theo quy tắc sau :

read permission 4

Write permission 2

Execute permission 1

Vì vậy, một tập tin với quyền 751 có nghĩa là sở hữu có quyền
read, write, và execute bằng 4+2+1=7, Nhóm có quyền read và
execute bằng 4+1=5, và còn lại có quyền execute bằng 1.

65
Nếu chúng ta xem kỹ, chúng ta sẽ thấy mọi số từ 0 đến 7 đều
tương ứng với một tổ hợp duy nhất các quyền truy nhập tập tin.
0 or —-: No permissions at all
4 or r—: read-only
2 or -w-: write-only (rare)
1 or —x: execute
6 or rw-: read and write
5 or r-x: read and execute
3 or -wx: write and execute (rare)
7 or rwx: read, write, and execute
Nếu bạn quen với hệ nhị phân, hãy suy nghĩ bằng hệ thống nhị
phân. Khi đó, rwx sẽ như số nhị phân 3 bits. Nếu quyền được
cho, số nhị phân tương ứng sẽ bằng 1, ngược lại, nó sẽ bằng 0. Ví
dụ r-x sẽ là số nhị phân 101, và theo hệ thập phân sẽ là 4+0+1,
hay 5. —x sẽ tương ứng 001, hay 0+0+1 = 1 …
Chú ý: Người sử dụng có quyền đọc thì có quyền copy tập tin và
tập tin sao chép sẽ thuộc sở hữu người làm copy như minh họa
sau
tuanna@backup tuanna]$ ls -l /etc/passwd
-rw-r--r-- 1 root root 1113 Oct 13 12:30 /etc/passwd
[tuanna@backup tuanna]$ cp /etc/passwd ./
[tuanna@backup tuanna]$ ls -l passwd
-rw-r--r-- 1 tuanna admin 1113 Oct 15 10:37 passwd
Các quyền mặc định khi tạo tập tin. Khi một tập tin hay thư
mục được tạo ra, permission mặc định sẽ được xác định bởi các
quyền trừ bớt bởi các quyền hiển thị bằng umask
[root@pascal tuanna]# su -l natuan
bash-2.05a$ umask

66
0022
bash-2.05a$ echo tao mot file > /tmp/aaa
bash-2.05a$ ls -la /tmp/
total 376
drwxrwxrwt 5 root root 40960 Dec 24 10:59 .
drwxr-xr-x 21 root root 4096 Dec 15 08:14 ..
-rw-r--r-- 1 natuan wheel 13 Dec 24 10:59 aaa
bash-2.05a$
Trong ví dụ trên, quyền mặc định lúc đầu xác định bởi
umask=002. Khi đó, tập tin tmp tạo ra sẽ có quyền là 664 và đó
chính là bù đến 6 của umask. Quyền thực hiện chương trình cần
được gán cố ý bởi người sử dụng hay các chương trình biên dịch.
Sau đó ta đổi giá trị của umask thành 022 và tập tin tạo ra có
quyền 644. Giá trị mặc định của các quyền thường được gán mỗi
khi người sử dụng login vào hệ thống thông qua các tập tin khởi
tạo biến môi trường như .profile, .bashrc. Đứng trên quan điểm
bảo mật hệ thống, giá trị 024 là tốt nhất, nó cho người cùng nhóm
có quyền đọc và không cho quyền nào với những người khác.
Lệnh chown, chgrp và chmod :
Đây là nhóm lệnh được sử dụng rất phổ biến, cho phép thay
quyền truy cập của tập tin hay thư mục. Chỉ có chủ sở hữu và
superuser mới có quyền thực hiện các lệnh này.
Cách dùng lệnh : chmod quyền_truy_cập_mới tên_file.
darkstar:~$ ls -l myfile
-rw-r—r— 1 fido users 114 Dec 7 14:31 myfile
darkstar:~$ chmod 345 myfile
darkstar:~$ ls -l myfile
—wxr—r-x 1 fido users 114 Dec 7 14:31 myfile

67
Ví dụ thay đổi và hiện thị cho thấy sự thay đổi quyền truy cập tập
tin myfile . Chú ý là ta có quyền cấp phát quyền thực hiện
(execute) mà không cần biết là tập tin có phải là một chương
trình hay không.
Phương pháp thay đổi tuyệt đối này có một số ưu điểm vì nó là
cách định quyền tuyệt đối, kết quả cuối cùng không phụ thuộc
vào quyền truy cập trước đó của tập tin. Đồng thời, dễ nói "thay
quyền tập tin thành bảy-năm-năm" thì dễ hơn là "thay quyền tập
tin thành đọc-viết-thực hiện, đọc-thực hiện, đọc-thực hiện"
Bạn cũng có thể thay đổi quyền truy nhập một cách tương đối và
dễ nhớ. Để chỉ ra nhóm quyền nào cần thay đổi, bạn có thể sử
dụng u (user), g (group), o (other), hay a (all). Tiếp theo đó là
dấu + để thêm quyền và – để bớt quyền. Cuối cùng là bản thân
các qyuyền viết tắt bởi r,w,x. Ví dụ như để bổ sung quyền thực
hiện cho nhóm và còn lại, ta nhập vào dòng lệnh
darkstar:~$ chmod go+x myfile
Đây là cách thay đổi tương đối vì kết quả cuối cùng phụ thuộc
vào quyền đã có trước đó mà lệnh này không liên quan đến. Trên
quan điểm bảo mật hệ thống, cách thay đổi tuyệt đối dẫn đến ít
sai sót hơn. Thay đổi quyền truy cập của một thư mục cũng được
thực hiện giống như đối với một tập tin. Chú ý là nếu bạn không
có quyền thực hiện (execute) đối với một thư mục, bạn không thể
thay đổi thư mục cd vào thư mục đó. Mọi người sử dụng có
quyền viết vào thư mục đều có quyền xóa tập tin trong thư mục
đó, không phụ thuộc vào quyền của người đó đối với tập tin. Vì
vậy, đa số các thư mục có quyền drwxr-xr-x. Như vậy chỉ có
người sở hữu của thư mục mới có quyền tạo và xóa tập tin trong
thư mục. Ngoài ra, thư mục còn có một quyền đặc biệt, đó là cho
phép mọi người đều có quyền tạo tập tin trong thư mục, mọi
người đều có quyền thay đổi nội dung tập tin trong thư mục,
nhưng chỉ có người tạo ra mới có quyền xóa tập tin. Đó là sticky
bit cho thư mục. Thư mục /tmp thường có sticky bit bật lên

68
drwxrwxrwt 7 root root 16384 Oct 21 15:33 tmp
Ta thấy chữ t cuối cùng trong nhóm các quyền, thể hiện cho
sticky bit của /tmp. Để có sticky bit, ta sử dụng lệnh chmod
1????????? tên_thư_mục.
Cách dùng lệnh chown:
chown tên_user tên_tập_tin
chown tên_user tên_thư_mục
chown -R tên_user tên_thư_mục
Dòng lệnh cuối cùng với tư chọn –R (recursive) cho phép thay
đổi người sở hữu của thư mục tên_thư_mục và tất cả các thư mục
con của nó. Điều này cũng đúng với lệnh chmod, chgrp.
Liên kết (link) tập tin: Trong Unix có 2 hình thức liên kết
hoàn toàn khác nhau, đó là hard link và soft link hay symbolic
link. Hard link cho phép tạo một tên mới cho tập tin. Các tên này
có vai trò hoàn toàn như nhau và tập tin chỉ bị hoàn toàn xóa bỏ
khi hard link cuối cùng của nó bị xóa. Lệnh ls –l cho phép hiển
thị số hard link đến tập tin. Symbolic link có chức năng giống
như shortcut của MS Windows. Khi ta đọc/ghi soft link, ta
đọc/ghi tập tin; khi ta xóa symbolic link, ta chỉ xóa symbolic link
và tập tin được giữ nguyên. Link được tạo bởi lệnh ln . Tự chọn
ln –s cho phép tạo symbolic link. Ví dụ
[tuanna@pascal tuanna]$ls -l
-rw------- 1 tuanna pkt 517 Oct 27 12:00 mbox
drwxr-xr-x 2 tuanna pkt 4096 Aug 31 17:50 security
[tuanna@pascal tuanna]$ln –s mbox mybox
[tuanna@pascal tuanna]$ln –s security securproj
[tuanna@pascal tuanna]$ln –l
-rw------- 1 tuanna pkt 517 Oct 27 12:00 mbox
lrwxrwxrwx 1 tuanna pkt 4 Oct 27 17:57 mymail ->
mbox

69
lrwxrwxrwx 1 tuanna pkt 8 Oct 27 17:57 secrproj ->
security
drwxr-xr-x 2 tuanna pkt 4096 Aug 31 17:50 security
[tuanna@pascal tuanna]$
Bạn đọc có thể thấy khá rõ kết quả của symbolic link qua thí dụ
trên.
Symbolic link rất có nhiều ứng dụng. Ví dụ như một tập tin XXX
của một chương trình YYY nằm trong thư mục /var/ZZZ. Nếu
phân mảnh của /var/ZZZ bị quá đầy, ta có thể "sơ tán" XXX qua
một thư mục khác thuộc phân mảnh khác và tạo một link thế vào
đó mà chương trình YYY vẫn không hề "hay biết" vì nó vẫn truy
cập đến /var/ZZZ/XXX như thường lệ.
7. Cây thư mục
Cây thư mục của Linux. Đối với hệ điều hành Linux, không có
khái niệm các ổ đĩa khác nhau. Sau quá trình khởi động, toàn bộ
các thư mục và tập tin được "gắn" lên (mount) và tạo thành một
hệ thống tập tin thống nhất, bắt đầu từ gốc ‘/’

Hình trên là cây thư mục của đa số các Unix. Với cây thư mục
trên ta không thể nào biết được số lượng ổ đĩa cứng, các phân

70
mảnh (partition) của mỗi đĩa và sự tương ứng giữa các phân
mảnh và thư mục như thế nào.
Chúng ta có thể chia đĩa cứng thành nhiều phân mảnh (partition).
Mỗi partition là một hệ thống tập tin (file system) độc lập. Sau
đó, các hệ thống tập tin này được ‘gắn ‘ (mount) vào hệ thống tập
tin thống nhất của toàn hệ thống. Chúng ta hoàn toàn có thể gắn
thêm một đĩa cứng mới, format rồi mount vào hệ thống tập tin
dưới tên một thư mục nào đó và tại một điểm (mount point) nào
đó. Đối với các chương trình chạy trên Unix, không hề có khái
niệm một thư mục nằm ở đĩa nào hay partition nào.
Hình sau đây cho thấy sự tương quan giữa vị trí vật lý trên đĩa và
vị trí logic trong cây tập tin.

Thư mục /usr/home là thư mục con của /usr trong cây thư mục,
nhưng trên đĩa vật lý, đây là hai phân mảnh (partition) cạnh nhau.
Thư mục /etc
Thư mục chứa các file cấu hình tất cả các dịch vụ và các tham số
hệ thống
Thư mục /dev
Thư mục chứa các thiết bị phần cứng. Có 2 dạng thiết bị là
character devices và block devices.
Ví dụ:
[root@starturn dev]# ll |grep ttyS

71
lrwxrwxrwx 1 root root 5 Dec 8 12:27 mouse -> ttyS1
crw-rw---- 1 root uucp 4, 64 Dec 8 21:24 ttyS0
crw-rw---- 1 root uucp 4, 65 Dec 8 21:27 ttyS1
crw-rw---- 1 root uucp 4, 66 Aug 30 19:31 ttyS2
crw-rw---- 1 root uucp 4, 67 Aug 30 19:31 ttyS3
crw-rw---- 1 root uucp 4, 68 Aug 30 19:31 ttyS4
brw-rw---- 1 root disk 3, 0 Aug 30 19:31 hda
brw-rw---- 1 root disk 3, 1 Aug 30 19:31 hda1
brw-rw---- 1 root disk 3, 2 Aug 30 19:31 hda2
brw-rw---- 1 root disk 3, 3 Aug 30 19:31 hda3
brw-rw---- 1 root disk 3, 64 Aug 30 19:31 hdb
brw-rw---- 1 root disk 3, 65 Aug 30 19:31 hdb1
Thư mục /bin, /sbin, /usr
Thư mục chứa các tập tin thực thi, các lệnh cấu hình và quản trị
hệ thống
[root@starturn bin]# ll
total 7072
-rwxr-xr-x 1 root root 4330 Aug 30 16:00 arch
-rwxr-xr-x 1 root root 10296 Aug 4 12:48 aumix-minimal
lrwxrwxrwx 1 root root 4 Dec 8 11:14 awk -> gawk
-rwxr-xr-x 1 root root 626188 Aug 23 16:01 bash
lrwxrwxrwx 1 root root 4 Dec 8 11:13 bash2 -> bash
lrwxrwxrwx 1 root root 3 Dec 8 11:15 bsh -> ash
-rwxr-xr-x 1 root root 19154 Jul 1 05:56 cat
-rwxr-xr-x 1 root root 18136 Sep 2 07:21 chgrp
-rwxr-xr-x 1 root root 18072 Sep 2 07:21 chmod

72
-rwxr-xr-x 1 root root 20120 Sep 2 07:21 chown
-rwxr-xr-x 1 root root 49548 Sep 2 07:21 cp
-rwxr-xr-x 2 root root 64706 Jun 23 10:37 cpio
-rwxr-xr-x 1 root root 21854 Jul 1 05:56 cut
-rwxr-xr-x 1 root root 40600 Aug 29 16:56 date
-rwxr-xr-x 1 root root 32044 Sep 2 07:21 dd
-rwxr-xr-x 1 root root 28972 Sep 2 07:21 df
-rwxr-xr-x 1 root root 6277 Aug 30 16:00 dmesg
lrwxrwxrwx 1 root root 8 Dec 8 11:13 dnsdomainname ->
hostname
lrwxrwxrwx 1 root root 8 Dec 8 11:13 domainname ->
hostname

Thư mục /home


Thư mục home của các người dùng trong hệ thống
Thư mục /var
Thư mục chứa các file log và nơi lưu các dữ liệu tạm thời của các
chương trình hệ thống
[root@starturn var]# ll
total 76
drwxr-xr-x 7 root root 4096 Dec 8 12:25 cache
drwxr-xr-x 2 root root 4096 Aug 5 1998 db
drwxr-xr-x 3 root root 4096 Dec 8 11:18 empty
drwxr-xr-x 6 root root 4096 Dec 8 11:27 ftp
drwxr-x--- 2 gdm gdm 4096 Dec 8 21:27 gdm
drwxr-xr-x 19 root root 4096 Dec 8 17:46 lib
drwxr-xr-x 2 root root 4096 Feb 6 1996 local
drwxrwxr-x 3 root lock 4096 Jun 23 16:26 lock
drwxr-xr-x 8 root root 4096 Dec 8 21:24 log

73
lrwxrwxrwx 1 root root 10 Dec 8 11:12 mail ->
spool/mail
drwxr-xr-x 2 named named 4096 Dec 8 11:23 named
drwxr-xr-x 2 root root 4096 Feb 6 1996 nis
drwxr-xr-x 2 root root 4096 Apr 13 2000 opt
drwxr-xr-x 2 root root 4096 Feb 6 1996 preserve
drwxr-xr-x 9 root root 4096 Dec 8 21:26 run
drwxr-xr-x 16 root root 4096 Dec 8 12:25 spool
drwxrwxrwt 2 root root 4096 Dec 8 12:27 tmp
drwx------ 2 root root 4096 Jun 23 20:42 tux
drwxr-xr-x 7 root root 4096 Dec 8 12:24 www
drwxr-xr-x 3 root root 4096 Dec 8 12:21 yp

74
Giới thiệu SHELL, vi và Emacs

1. Giới thiệu
Shell là một chương trình dùng để thực hiện các lệnh của người
dùng. Shell cung cấp cho người dùng một giao diện cho Linux
Kernel và các phần cứng của nó. Shell vừa là một trình thông
dịch lệnh ( tương tự như COMMAND.COM trong DOS) và vừa
là một ngôn ngữ lập trình.
Lưu ý: Shell là case-sensitive, phân biệt chữ hoa chữ thường.
1.1 Lệnh ls :
Lệnh ls : liệt kê tất cả các file trong thư mục. ls có các
tham số sau:

Tham số ls Hiển thị

-a Hiển thị tất cả các file ( kể cả file ẩn)

- l ( chữ L thường) Hiển thị chi tiết về file

-R Hiển thị các thư mục con

- 1 ( số một) Hiển thị mỗi file 1 hàng

1.2 Lệnh cp:


Lệnh cp : chép file
Cú pháp cp [OPTION]... SOURCE DEST

75
Tham số Công dụng

-r Chép các thư mục con

-i Chế độ đối thoại, nếu trùng tên thì


sẽ hỏi overwrite Yes/No

1.3 Lệnh mv:


Lệnh mv : di chuyển hoặc đổi tên file file
Cú pháp mv [OPTION]... SOURCE DEST
1.4 Lệnh rm:
Lệnh rm : xoá file
Cú pháp rm [OPTION]... FILE

Tham số Công dụng

-f Force: xoá không cần hỏi

-d Xoá thư mục

1.5 Lệnh cd:


Change directory
cd .. lên một cấp thư mục
cd / về thư mục gốc

2. Biến môi trường

76
2.1 Giới thiệu
Biến môi trường có giá trị chỉ cho shell hiện hành. Dùng lệnh set
để xem thông tin về các biến môi trường :
[root@blackboard ]# set

BASH=/bin/bash

BASH_ENV=/root/.bashrc

BASH_VERSINFO=([0]="2" [1]="05a" [2]="0" [3]="1"


[4]="release" [5]="i686-pc-linux-gnu")

BASH_VERSION='2.05a.0(1)-release'

COLORS=/etc/DIR_COLORS

COLUMNS=111

DIRSTACK=()

EUID=0

GROUPS=()

HISTFILE=/root/.bash_history

HISTFILESIZE=1000

HISTSIZE=1000

HOME=/root

HOSTNAME=blackboard

HOSTTYPE=i686

MACHTYPE=i686-pc-linux-gnu

MAIL=/var/spool/mail/root

77
MAILCHECK=60

OLDPWD=/root

OPTERR=1

OPTIND=1

OSTYPE=linux-gnu

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/
sbin:/usr/bin:/usr/X11R6/bin:/root/bin

PIPESTATUS=([0]="0")

PPID=20931

PS1='[\u@\h \W]\$ '

PS2='> '

PS4='+ '

PWD=/etc/xinetd.d

QTDIR=/usr/lib/qt3-gcc2.96

SHELL=/bin/bash

SHELLOPTS=braceexpand:hashall:histexpand:monitor:his
tory:interactive-comments:emacs

SHLVL=1

SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass

SSH_CLIENT='172.16.10.1 64026 22'

SSH_TTY=/dev/pts/0

SUPPORTED=en_US.iso885915:en_US:en

78
TERM=vt100

UID=0

USER=root

USERNAME=root

_=env

langfile=/root/.i18n

[root@blackboard xinetd.d]#

2.2 Khai báo biến


Biến môi trường phải tuân theo các chuẩn sau:
 Biến phải bắt đầu bằng các ký tự chữ cái [a-z] [A-Z] hoặc
dấu gạch dưới (_)
 Ký tự bắt đầu là _ hay chữ có thể được tiếp sau bằnng các ký
tự hoặc số
 Các ký tự hoặc tổ hợp các ký tự sau đây không được dùng để
khai báo biến : $#, $$, $*, $@, $-, $?, $0 $9
Ví dụ:
[root@blackboard root]# export
DISPLAY=192.168.1.1:0.0

[root@blackboard root]# echo $DISPLAY

192.168.1.1:0.0

[root@blackboard root]#

Để unset một biến môi trường ta dùng lệnh unset


VARIABLE_NAME

79
3. Trình soạn thảo văn bản vi
3.1 Giới thiệu
Chương trình vi là một chương trình soạn thảo văn bản phổ biến
trên tất cả các hệ điều hành Unix. Đầu tiên, vi được thiết kế cho
mục đích lập trình. Dần dần do tính tiện dụng của nó, vi được
xem như là một trình soạn thảo văn bản mặc định cho Unix. Cách
phát âm vi đọc là "vi – ai" .

3.2 Tạo một file mới


Tại dấu nhắc lệnh ta nhập vi hello.txt
[root@starturn root]# vi hello.txt
3.3 Các chế độ soạn thảo

80
Khi chuyển đổi qua các chế độ ta dùng phím ESC . Các phím sau
kết hợp với ESC sẽ cho ta các chế độ soạn thảo khác nhau:
ESC - i Chế độ chèn (insert) và đặt text về phía bên trái
của con trỏ
ESC - a Chế độ chèn sau (append) và đặt text về phía bên
phải của con trỏ
ESC - I Chèn text ở đầu hàng.
ESC - A Chèn text ở cuối hàng.
3.4 Các mode khác
w Lưu file
q Thoát vi
! Làm không cần hỏi lại
/ Tìm kiếm

81
4. Chương trình Emacs
4.1 Giới thiệu
EMACS có tên đầy đủ là Editor MACros, là một chương trình
miễn phí được phân phối theo chuẩn GNU GPL. Emacs hầu như
được đi kèm trong hầu hết các phiên bản của Linux và đã được
chuyển sang hầu hết các hệ điều hành kể cả Windows.
Emacs không chỉ là một trình soạn thảo văn bản đơn thuần. Nó
còn có các tính năng khác :
Email client
Spell-checking
News Client
Syntax coloring : cho các ngôn ngữ lập trình trong Linux
( chỉ trên mode X-window)

82
4.2 Các lệnh emacs
Ctrl-x-f : Mở file
Ctrl-x-d : Open Directory
Ctrl-x-i : Chèn file
Ctrl-x-w : Ghi với tên khác
Ctrl-x-c : Thoát emacs
Ctrl-Shiftx- _ : Undo
Ctrl-w : Cut
83
Ctrl-y : Paste
Ctrl-k : Cut một hàng từ vị trí cursor
Ctrl-d : xoá ký tự tại vị trí con trỏ
Ctrl – G : Huỷ lệnh đang thực thi
4.3 Tìm kiếm và thay thế trong emacs
Tìm kiếm
Ctrl – s : Tìm từ trên xuống
Ctrl – R : Tìm từ dưới lên
Thay thế
Sử dụng menu: F10  Edit  Search  Replace

84
Quản trị hệ thống
1. Quản lý tiến trình trong Linux
1.1 Giới thiệu
Linux là một HDH đa người sử dụng, đa tiến trình. Linux thực
hiện tất cả các công việc của người sử dụng cũng như của hệ
thống bằng các tiến trình (process). Do đó, hiểu được cách điều
khiển các tiến trình đang hoạt động trên HDH Linux rất quan
trọng cho công việc quản trị hệ thống.
Định nghĩa : Tiến trình (process) là một chương trình đơn
chạy trên không gian địa chỉ ảo của nó . Cần phân biệt tiến trình
với lệnh vì một dòng lệnh trên shell có thể sinh ra nhiều tiến
trình. Dòng lệnh sau
nroff -man ps.1 | grep kill | more
sẽ sinh ra 3 tiến trình khác nhau.
Có 3 loại tiến trình chính trên Linux :
Tiến trình với đối thoại (Interactive processes) : là tiến
trình khởi động và quản lý bởi shell, kể cả tiến trình
forthground hoặc background.
Tiến trình batch (Batch processes) : Tiến trình không
gắn liền đến bàn điều khiển (terminal) và được nằm trong
hàng đợi để lần lượt thực hiện.
Tiến trình ẩn trên bộ nhớ (Daemon processes) : Là các
tiến trình chạy dưới nền (background). Các tiến trình này
thường được khởi động từ đầu. Đa số các chương trình
server cho các dịch vụ chạy theo phương thức này. Đây
là các chương trình sau khi được gọi lên bộ nhớ, đợi thụ
động các yêu cầu chương trình khách (client) để trả lời
sau các cổng xác định (cổng là khái niệm gắn liền với

85
giao thức TCP/IP BSD socket). Hầu hết các dịch vụ trên
Internet như mail, Web, Domain Name Service … chạy
theo nguyên tắc này. Các chương trình được gọi là các
chương trình daemon và tên của nó thường kết thúc bằng
ký tự "d" như named, inetd … Ký tự "d" cuối được phát
âm rời ra như "đê " trong tiếng việt. Ví dụ named được
phát âm là "nêm đê".
Cách đơn giản nhất để kiểm tra hệ thống tiến trình đang chạy là
sử dụng lệnh ps (process status). Lệnh ps có nhiều tùy chọn
(option) và phụ thuộc một cách mặc định vào người login vào hệ
thống. Ví dụ :
$ ps
PID TTY STAT TIME COMMAND
41 v01 S 0:00 -bash
134 v01 R 0:00 ps
cho phép hiển thị các tiến trình liên quan tới một người sử dụng
hệ thống.
Cột đầu tiên là PID (Process IDentification). Mỗi tiến trình của
Linux đều mang một số ID và các thao tác liên quan đến tiến
trình đều thông qua số PID này. Gạch nối – trước bash để thông
báo đó là shell khởi động khi người sử dụng login.
Để hiển thị tất cả các process, ta có thể sử dụng lệnh ps –a. Một
người sử dụng hệ thống bình thường có thể thấy tất cả các tiến
trình, nhưng chỉ có thể điều khiển dược các tiến trình của mình
tạo ra. Chỉ có superuser mới có quyền điều khiển tất cả các tiến
trình của hệ thống Linux và của người khác. Lệnh ps –ax cho
phép hiển thị tất cả các tiến trình, ngay cả những tiến trình không
gắn liền đến có bàn điều khiển (tty). Chúng ta có thể coi các tiến
trình đang chạy cùng với dòng lệnh đầy đủ để khởi động tiến
trình này bằng ps –axl. Lệnh man ps cho phép coi các tham số tự
chọn khác của lệnh ps .

86
1.2 Dừng một tiến trình
Lệnh kill : Trong nhiều trường hợp, một tiến trình có thể bị
treo, một bàn phím điều khiển không trả lời các lệnh từ bàn phím,
một chương trình server cần nhận cấu hình mới, card mạng cần
thay đổi địa chỉ IP …, khi đó chúng ta phải dừng (kill) tiến trình
đang có vấn đề . Linux có lệnh kill để thực hiện các công tác này.
Trước tiên bạn cần phải biết PID của tiến trình cần dừng thông
qua lệnh ps. Xin nhắc lại chỉ có super-user mới có quyền dừng tất
cả các tiến trình, còn người sử dụng chỉ được dừng các tiến trình
của mình. Sau đó, ta sử dụng lệnh
kill -9 PID_của_ tiến_trình
Tham số –9 là gửi tín hiệu dừng không điều kiện chương trình.
Chú ý nếu bạn logged vào hệ thống như root, nhập số PID chính
xác nếu không bạn có thể dừng một tiến trình khác. Không nên
dừng các tiến trình mà mình không biết vì có thể làm treo máy
hoặc dịch vụ.
Một tiến trình có thể sinh ra các tiến trình con trong quá trình
hoạt động của mình. Nếu bạn dừng tiến trình cha, các tiến trình
con cũng sẽ dừng theo, nhưng không tức thì . Vì vậy phải đợi một
khoảng thời gian và sau đó kiểm tra lại xem tất cả các tiến trình
con có dừng đúng hay không. Trong một số hãn hữu các trường
hợp, tiến trình có lỗi nặng không dừng được, phương pháp cuối
cùng là khởi động lại máy.
Lệnh at : Linux có các lệnh cho phép thực hiện các tiến trình ở
thời điểm mong muốn thông qua lệnh at. Thời điểm thực hiện
công việc được nhập vào như tham số của lệnh at.
$ at 1:23<Return>
lp /usr/sales/reports/*<Return>
<^D>
Dấu ^D có nghĩa là cần giữ phím <Ctrl>, sau đó nhấn phím D và
bỏ cả 2 phím cùng một lúc.
87
Sau khi bạn kết thúc lệnh at, dòng thông báo giống như sau sẽ
hiện ra màn hình
job 756001.a at Sat Dec 21 01:23:00 2000
Số 756001.a cho phép tham chiếu tới công tác (job) đó, để dùng
nếu bạn muốn xóa job đó bởi lệnh
at –r job_number
Lệnh này có thể khác với các phiên bản khác nhau. Ví dụ đối với
RedHat 6.2 lệnh xóa một job là atrm job_number . Trong mọi
trường hợp coi manpage để biết các lệnh và tham số cụ thể.
Bạn có thể dùng quy tắc chuyển hướng (redirect) để lập lịch trình
cho nhiều lệnh cùng một lúc
at 10:59 < tập_lệnh
trong đó, tập_lệnh là một tập tin dạng text có các lệnh. Để kiểm
tra các tiến trình mà bạn đã nhập vào, dùng lệnh at –l
Lệnh batch. Khác với lệnh at là tiến trình được thực hiện vào các
thời điểm do người sử dụng chọn, lệnh batch để cho hệ thống tự
quyết định khi nào tiến trình được thực hiện dựa trên mức độ tải
của hệ thống. Thường là các tiến trình batch được thi hành khi
máy bận dưới 20%. Các tiến trình in ấn, cập nhật dữ liệu lớn …
rất thích hợp với kiểu lệnh này. Cú pháp của batch như sau :
$ batch<Return>
lp /usr/sales/reports/*<Return>
<^D>

1.3 Crond
Các lệnh at và batch cho phép lập kế hoạch thực hiện tiến trình
một lần. Linux còn cho phép lập kế hoạch có tính chất chu kỳ
thông qua lệnh cron (viết tắt của chronograph) và các tập tin
crontabs. Chương trình daemon cron (crond) được kích hoạt
ngay từ đầu với khởi động của hệ thống. Khi khởi động, cron

88
xem có các tiến trình trong hàng đợi nhập vào bởi lệnh at, sau đó
xem xét các các tập tin crontabs xem có tiến trình cần phải thực
hiện hay không rồi "đi ngủ ":-) . Cron sẽ "thức dậy" mỗi phút để
kiểm tra xem có phải thực hiện tiến trình nào không. Super-user
và user đều có thể đặt hàng các tiến trình sẽ được cho phép thực
hiện bởi cron. Để làm điều này, bạn cần tạo một tập tin text theo
cú pháp của cron như sau.
Phút giờ ngày_của_tháng tháng_của_năm ngày_của_tuần
lệnh
0 8 * * 1 /u/sartin/bin/status_report
cho phép /u/sartin/bin/status_report được thực hiện vào 8giờ 00
phút các thứ hai.
Mỗi hàng chứa thời gian và lệnh. Lệnh sẽ được cron thực hiện tại
thời điểm ghi ở trước trên cùng dòng đó. Năm cột đầu liên quan
tới thời gian có thể thay thế bằng dấu sao "*" với ý nghĩa là "với
mọi". Các giá trị có thể cho các trường là :
minute (0-59)
hour (0-23)
day of month (1-31)
month of year (1-12)
day of week (0-6, 0 is Sunday)
Command (rest of line)
Sau đó dùng lệnh crontab để cài đặt tập tin lệnh vào thư mục
/usr/spool/cron/crontabs. Mỗi người sử dụng sẽ có một tập tin
crontab trùng tên mình (user name) để lưu tất cả các lệnh cần
thực hiện theo chu kỳ trong thư mục này. Cú pháp sử dụng
crontab:
crontab tên_tập_tin_lệnh

89
Lệnh top. Lệnh top cho phép hiển thị sự hoạt động của các tiến
trình, đặc biệt là các thông tin về tài nguyên hệ thống cũng như
việc sử dụng tài nguyên đó của từng tiến trình. Với lệnh đơn giản
top, ta sẽ có
10:08am up 4 days, 1:41, 1 user, load
average: 0.00, 0.01, 0.00

65 processes: 64 sleeping, 1 running, 0


zombie, 0 stopped

CPU0 states: 0.0% user, 0.0% system,


0.0% nice, 100.0% idle

CPU1 states: 0.1% user, 0.1% system,


0.0% nice, 99.3% idle

Mem: 513896K av, 496896K used, 17000K


free, 0K shrd, 26640K buff

Swap: 1052248K av, 77380K used, 974868K


free 176680K cached

PID USER PRI NI SIZE RSS SHARE STAT


%CPU %MEM TIME COMMAND

21280 root 15 0 1040 1040 832 R 0.3 0.2


0:00 top

1 root 15 0 472 432 416 S 0.0 0.0 0:05


init

2 root 15 0 0 0 0 SW 0.0 0.0 0:00


keventd

3 root 34 19 0 0 0 SWN 0.0 0.0 0:00


ksoftirqd_CPU0

4 root 34 19 0 0 0 SWN 0.0 0.0 0:00


ksoftirqd_CPU1

5 root 15 0 0 0 0 SW 0.0 0.0 0:06

90
kswapd

6 root 25 0 0 0 0 SW 0.0 0.0 0:00


bdflush

7 root 15 0 0 0 0 SW 0.0 0.0 0:00


kupdated

8 root 25 0 0 0 0 SW 0.0 0.0 0:00


mdrecoveryd

14 root 25 0 0 0 0 SW 0.0 0.0 0:00


scsi_eh_0

15 root 25 0 0 0 0 SW 0.0 0.0 0:00


scsi_eh_1

18 root 15 0 0 0 0 SW 0.0 0.0 0:05


kjournald

97 root 16 0 0 0 0 SW 0.0 0.0 0:00


khubd

190 root 15 0 0 0 0 SW 0.0 0.0 0:00


kjournald

Số % máy rảnh (idle) in đậm trên là rất quan trọng. Một máy rảnh
dưới 50% là một máy quá tải và cần được xem xét. Lệnh top còn
cho phép theo dõi xem có tiến trình nào chiếm dụng quá nhiều
thời gian CPU cũng như truy cập đĩa không.
Ngoài ra, một số lệnh khác như vmstat. mpstat, sar, iostat ...
cũng cho phép xem xét với các mục đích khác nhau hoạt động
của máy chủ
2. Quản trị phần mềm trong Linux
2.1 Redhat Package Manager - rpm

91
Việc quản lý các phần mềm đi kèm với Linux có thể là một việc
dễ dàng cũng như có thể trở nên vô cùng khó khăn phức tạp.
Redhat đã phát triển một hệ thống quản lý phần mềm cho Linux
có giao diện thân thiện và hiệu quả gọi là RPM. RPM là chương
trình quản lý các package nó tự động làm các quá trình như cài
đặt, nâng cấp, xoá và bảo trì phần mềm trong Linux. Do tính tiện
dụng của nó, RPM được hỗ trợ bởi hầu hết các Linux khác như
SuSe, Mandrake, Caldera, Corell. Ngày nay, RPM còn được dùng
trên các hệ Unix khác như:
OS/2
Solaris
SCO Unix
HP-UX
FreeBSD
NetBSD
Be OS

2.2 Câu truy vấn


Lệnh rpm có rất nhiều tham số . Để xem một cách nhanh chóng
danh sách các phần mềm có trong hệ thống ta dùng
rpm –qa
Có nghĩa là query all package. Để tìm chính xác package mà ta
muốn biết xem đã có trong hệ thống hay chưa ta dùng kết hợp
lệnh grep
[root@starturn root]# rpm -qa |grep mc
kernel-pcmcia-cs-3.1.31-9
mc-4.5.55-12
[root@starturn root]#

92
Một vài công cụ tiện ích khác cho rpm là dùng kết hợp với các
tham số -i , -l, --test .
-i : Information
-l : list
Ví dụ:
[root@starturn root]# rpm -qi telnet

Name : telnet Relocations: (not relocateable)

Version : 0.17 Vendor: Red Hat, Inc.

Release : 23 Build Date: Tue 23 Jul 2002 09:05:54 AM


EDT

Install date: Sun 08 Dec 2002 11:19:54 AM EST Build


Host: stripples.devel.redhat.com

Group : Applications/Internet Source RPM: telnet-


0.17-23.src.rpm

Size : 91323 License: BSD

Signature : DSA/SHA1, Tue 03 Sep 2002 05:41:07 PM


EDT, Key ID 219180cddb42a60e

Packager : Red Hat, Inc.


<http://bugzilla.redhat.com/bugzilla>

Summary : The client program for the telnet remote


login protocol.

Description :

Telnet is a popular protocol for logging into remote


systems over the

Internet. The telnet package provides a command line


telnet client.

93
[root@starturn root]#

[root@starturn root]# rpm -ql ftp

/usr/bin/ftp

/usr/bin/pftp

/usr/share/man/man1/ftp.1.gz

/usr/share/man/man1/pftp.1.gz

/usr/share/man/man5/netrc.5.gz

[root@starturn root]#

2.3 Cài đặt một phần mềm


Dùng lệnh: rpm -ivh
Ví dụ: cài đặt Midnight Commander
[root@starturn root]# rpm -ivh mc-4.5.55-12.i386.rpm

warning: mc-4.5.55-12.i386.rpm: V3 DSA signature:


NOKEY, key ID db42a60e

Preparing... ############################### [100%]

1:mc ############################### [100%]

[root@starturn root]# rm -f mc-4.5.55-12.i386.rpm

2.4 Xoá một phần mềm


Dùng lệnh: rpm --erase
Ví dụ:
rpm --erase mc
2.5 Tiện ích kpackage
94
Ngoài ra Linux còn có tiện ích kpackage trong môi trường KDE
giúp ta có thể quản lý các kpackage một cách hiệu quả với giao
diện đồ hoạ rất dễ sử dụng

3. Quản trị hệ thống Linux


3.1 Hệ thống /proc
Thư mục /proc là một thư mục rất quan trọng và đóng vai trò
sống còn đối với hệ thống Linux. Thư mục này là một thư mục
ảo. Nói cách khác là thông tin chứa trong thư mục này được tạo
ra một cách động dựa trên các quá trình startup và shutdown của
hệ thống. Hơn thế nữa, filesystem còn thay đổi theo thời gian
thực. Thông tin của hệ thống, các tiến trình , các tham số của hệ
thống đều thể hiện trong thư mục này.
Ta hãy làm một thử nghiệm sau:

95
Gọi vi chạy lên sau đó bấm Ctrl-Z để cho vi thành background
job.
[root@starturn proc]# ps –ef |grep vi
root 11663 1359 0 22:35 pts/2 00:00:00 vim
Sau đó vào /proc ta sẽ thấy ngay có một thư mục là PID của vi :
11663
[root@starturn proc]# ls |grep 11663
11663
Sau đó ta cd vào 11663 sẽ thấy các trạng thái của vi đang chạy.
Và khi ta kết thúc vi, thư mục 11663 không còn tồn tại trong
/proc nữa.

3.2 Các lệnh bảo trì khác


Lệnh free: hiển thị tổng dung lượng bộ nhớ chính và swap đang
được dùng và còn trống trong hệ thống cũng như shared memory
và buffers được dùng bởi kernel.
[root@starturn 11663]# free
total used free shared buffers cached
Mem: 255452 247904 7548 0 8220 111312
-/+ buffers/cache: 128372 127080
Swap: 530136 0 530136
[root@starturn 11663]#
Lệnh df : hiển thị dung lượng đĩa còn trống trên hệ thống file.
Đơn vị hiển thị là 1K block, với 512 byte cho 1 block
[root@starturn root]# df -k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hda1 10325748 2247448 7553780 23% /

96
none 127724 0 127724 0% /dev/shm
[root@starturn root]#
3.3 Lệnh sudo
Lệnh Sudo: Super user do , cho phép quản trị hệ thống nâng cấp
quyền truy xuất đến một tập lệnh quản trị hệ thống cho một vài
users thường. Với sự trợ giúp của sudo, người dùng có thể làm
một số thao tác cấu hình hệ thống mà không cần phải có quyền
root.
Cấu hình sudo: /etc/sudoers
[root@starturn etc]# more sudoers

# sudoers file.

# This file MUST be edited with the 'visudo' command


as root.

# See the sudoers man page for the details on how to


write a sudoers file.

# Host alias specification

# User alias specification

# Cmnd alias specification

# Defaults specification

# User privilege specification

root ALL=(ALL) ALL

# Uncomment to allow people in group wheel to run


all commands

# %wheel ALL=(ALL) ALL

# Same thing without a password

97
%tuanna ALL=(ALL) NOPASSWD: ALL

# Samples

# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom

# %users localhost=/sbin/shutdown -h now

[tuanna@starturn tuanna]$ sudo /etc/init.d/httpd


stop

Stopping httpd: [ OK ]

[tuanna@starturn tuanna]$

4. Hệ thống log file


4.1 /var/log/message
Cho biết các sự kiện diễn ra trong hệ thống bao gồm các hành
động start, stop các tiến trình, users login logout, các lỗi hệ
thống,…
Ví dụ:
[root@starturn log]# more messages

Dec 8 17:46:41 localhost syslogd 1.4.1: restart.

Dec 8 17:46:41 localhost syslog: syslogd startup


succeeded

Dec 8 17:46:41 localhost syslog: klogd startup


succeeded

Dec 8 17:46:42 localhost kernel: klogd 1.4.1, log


source = /proc/kmsg started.

98
Dec 8 17:46:42 localhost kernel: Linux version
2.4.18-14

Dec 8 17:46:42 localhost kernel: 0MB HIGHMEM


available.

Dec 8 17:46:42 localhost kernel: 256MB LOWMEM


available.

Dec 8 17:46:42 localhost kernel: On node 0


totalpages: 65536

Dec 8 17:46:42 localhost kernel: zone(0): 4096


pages.

Dec 8 17:46:42 localhost kernel: zone(1): 61440


pages.

Dec 8 17:46:42 localhost kernel: zone(2): 0 pages.

Dec 8 17:46:42 localhost kernel: Kernel command


line: ro root=LABEL=/

Dec 8 17:46:42 localhost kernel: Initializing CPU#0

Dec 8 17:46:42 localhost kernel: Detected 451.135


MHz processor.

Dec 8 17:46:42 localhost kernel: Console: colour


VGA+ 80x25

Dec 8 17:46:42 localhost kernel: Calibrating delay


loop... 896.66 BogoMIPS

Dec 8 17:46:42 localhost kernel: Memory:


253064k/262144k available (1326k kernel code, 6648k
reserved, 999k data, 212k init, 0k highmem)

4.2 /var/log/secure

99
Lưu các thông tin thống kê login, logout và các ipaddress truy
cập vào hệ thống
Ví dụ:
[root@starturn log]# more secure

Dec 8 17:46:54 localhost sshd[637]: Server listening


on 0.0.0.0 port 22.

Dec 8 17:47:59 localhost xinetd[651]: START: sgi_fam


pid=959 from=<no address>

Dec 8 17:50:45 localhost sshd[637]: Received signal


15; terminating.

Dec 8 21:26:06 localhost sshd[587]: Server listening


on 0.0.0.0 port 22.

Dec 8 21:27:27 localhost xinetd[601]: START: sgi_fam


pid=853 from=<no address>

Dec 8 21:29:20 localhost sshd[1225]: Could not


reverse map address 192.168.10.100.

Dec 8 21:29:28 localhost sshd[1225]: Accepted


password for root from 192.168.10.100 port 1117 ssh2

Dec 8 21:31:47 localhost sshd[1271]: Could not


reverse map address 192.168.10.100.

Dec 8 21:31:47 localhost sshd[1271]: Accepted


password for root from 192.168.10.100 port 1120 ssh2

Dec 8 21:59:53 localhost sshd[1357]: Could not


reverse map address 192.168.10.100.

Dec 8 21:59:53 localhost sshd[1357]: Accepted


password for root from 192.168.10.100 port 1130 ssh2

Dec 8 22:07:09 localhost useradd[1432]: new group:


name=tuanna, gid=500

100
Dec 8 22:07:09 localhost useradd[1432]: new user:
name=tuanna, uid=500, gid=500, home=/home/tuanna,
shell=/bin/bash

Dec 8 22:08:18 localhost sshd[1492]: Could not


reverse map address 192.168.10.100.

Dec 8 22:08:25 localhost sshd[1492]: Accepted


password for root from 192.168.10.100 port 1142 ssh2

Dec 8 22:08:25 localhost sshd[1492]: subsystem


request for sftp

Dec 8 22:18:38 localhost sshd[1518]: Could not


reverse map address 192.168.10.100.

Dec 8 22:18:38 localhost sshd[1518]: Accepted


password for root from 192.168.10.100 port 1145 ssh2

Dec 8 22:51:32 localhost sudo: tuanna : TTY=pts/2 ;


PWD=/home/tuanna ; USER=root ;
COMMAND=/etc/init.d/httpd start

Dec 8 22:51:54 localhost sudo: tuanna : TTY=pts/2 ;


PWD=/home/tuanna ; USER=root ;
COMMAND=/etc/init.d/httpd stop

[root@starturn log]#

4.3 /var/log/boot
Lưu các thông tin khi hệ thống mới khởi động
Dec 8 22:35:24 localhost network: Shutting down
interface eth0: succeeded

Dec 8 22:35:24 localhost sysctl: net.ipv4.ip_forward


= 1

Dec 8 22:35:24 localhost sysctl:

101
net.ipv4.conf.default.rp_filter = 1

Dec 8 22:35:24 localhost sysctl:


kernel.core_uses_pid = 1

Dec 8 22:35:24 localhost network: Setting network


parameters: succeeded

Dec 8 22:35:25 localhost network: Bringing up


loopback interface: succeeded

Dec 8 22:35:27 localhost network: Bringing up


interface eth0: succeeded

Dec 8 22:51:34 localhost httpd: httpd: Could not


determine the server's fully qualified domain name,
using 127.0.0.1 for ServerName

Dec 8 22:51:37 localhost httpd: httpd startup


succeeded

Dec 8 22:51:54 localhost httpd: httpd shutdown


succeeded

102
Linux Networking
1. Routing tĩnh và bảng routing
1.1 Common Routing Configurations
Đầu tiên ,chúng ta phải phân biệt sự khác nhau giữa routing và
giao thức routing. Tất cả các hệ thống dẫn đường dữ liệu, nhưng
không phải tất cả các hệ thống đều chạy các giao thức routing.
Routing là một hành động chuyển các gói tin dựa trên thông tin
chứa trong bảng routing. giao thức routing là chương trình trao
đổi thông tin dùng để xây dựng bảng routing.
Một cấu hình routing của mạng không phải lúc nào cũng yêu cầu
một giao thức routing. Trong nhiều trường hợp khi thông tin
routing không thay đổi, người quản trị hệ thống thường xây dựng
bảng routing thủ công. Một vài mạng không có kết nối vào bất cứ
mạng TCP/IP nào khác và do đó không yêu cầu người quản trị hệ
thống đó xây dựng bảng routing nào cả. Có ba loại cấu hình
routing cơ bản là:
Minimal routing
Mạng hoàn toàn tách biệt với các mạng TCP/IP khác chỉ cần
minimal routing. Bảng minimal routing thường usually được xây
dựng bởi ifconfig khi card mạng được cấu hình. Nếu mạng của
bạn không có kết nối trực tiếp đến các mạng TCP/IP khác, và nếu
bạn không dùng subnet, thì chỉ cần có 1 bảng routing là đủ.
Routing tĩnh
Một mạng với một số lượng giới hạn các gateways đến các mạng
TCP/IP khác có thể được cấu hình với static routing. Khi một
mạng chỉ có một gateway, static route là lựa chọn tốt nhất. Bảng
routing tĩnh được xây dựng một cách thủ công bởi người quản trị
hệ thống dùng lệnh route. Bảng routing tĩnh không hiệu chỉnh khi

103
mạng thay đổi, do đó chúng chạy tốt nhất khi các con đường
không thay đổi .
Routing động
Một mạng với nhiều hơn một con đường kết nối đến cùng một
đích có thể sử dụng routing động. Bảng routing động được xây
dựng từ thông tin trao đổi bởi các giao thức routing. Các giao
thức được thiết kế để phân phối thông tin mà sẽ điều chỉnh một
cách động các các con đường để phản ánh sự thay đổi tình trạng
của mạng. Giao thức routing xử lý nhiều tình huống routing phức
tạp nhanh hơn và chính xác hơn người quản trị hệ thống có thể
làm. Giao thức routing được thiết kế không chỉ để chuyển đến các
con đường dự phòng khi đường chính bị tắt nghẽn mà chúng còn
được thiết kế để quyết định đường nào là tốt nhất để đến đích.
Trên bất kỳ mạng nào có nhiều đường đến cùng một đích, giao
thức routing động nên được dùng .
Các route được xây dựng một cách tự động bằng ifconfig, một
cách thủ công bởi quản trị hệ thống, hay động bởi giao thức
routing. Nhưng không cần biết bằng cách nào, cuối cùng chúng
cũng kết thúc tại bảng routing .
1.2 Bảng routing Minimal
Hãy xem nội dung của bảng routing được xây dựng bằng ifconfig
khi card mạng peanut's được cấu hình :

104
% netstat -rn
Bảng routing
Destination Gateway Flags Refcnt Use Interface
127.0.0.1 127.0.0.1 UH 1 132 lo0
172.16.12.0 172.16.12.2 U 26 49041 1e0
Dòng đầu tiên là loopback route đến to localhost được tạo khi lo0
được cấu hình. Các dòng khác là đường dẫn đến mạng
172.16.12.0 thông qua card le0. Địa chỉ 172.16.12.2 không phải
là địa chỉ remote gateway. Nó là địa chỉ gán cho card mạng le0
trên mạng peanut.
Hãy xem các trường cờ (Flags) trên mỗi hàng. Các hàng có U
(up) flag được thiết lập, chỉ ra rằng chúng sẵn sàng để dùng,
nhưng không hàng nào có cờ G (gateway) được thiết lập. Cờ G
chỉ ra một gateway ngoại được dùng . Cờ G không được thiết lập
bởi vì cả 2 đường là kết nối trực tiếp đế các card mạng cục bộ,
không thông qua gateways ngoại.
Mặc dù mỗi bảng có đường host-specific, hầu hết các con đường
dẫn đến các mạng. Một lý do mạng các con đường được dùng là

105
để giảm kích thước của bảng routing. Một tổ chức có thể chỉ có
một mạng nhưng hàng trăm hosts. Internet có hàng ngàn mạng
networks nhưng có hàng triệu hosts. Bảng routing với a route cho
mỗi host sẽ trở nên không thể quản lý nổi.
Để kiểm tra bảng routing trên peanut, đầu tiên ping host khác trên
mạng cục bộ :
% ping -s almond
PING almond.nuts.com: 56 data bytes
64 bytes từ almond.nuts.com (172.16.12.1):
icmp_seq=0. time=11. ms
64 bytes từ almond.nuts.com (172.16.12.1):
icmp_seq=1. time=10. ms
^C
----almond.nuts.com PING Thống kê ----
2 packets transmitted, 2 packets nhận được, 0%
packet loss
round-trip (ms) min/avg/max = 10/10/11
ping hiển thị một hàng output cho mỗi ICMP
ECHO_RESPONSE nhận được. Khi ping bị ngắt, nó hiển thị một
vài thống kê tóm tắt. Tất cả đều chỉ rằng giao tiếp thành công với
almond. Nhưng nếu ta kiểm tra host không trên nuts-net, ví dụ
như host tại O'Reilly chẳng hạn, kết quả sẽ khác hẳn.
% ping 207.25.98.2
sendto: Network is unreachable
Khi thông báo "sendto: Network is unreachable" chỉ ra rằng
peanut không biết làm sao để gửi data sang mạng có host
207.25.98.2 đang bật. Ở đây chỉ có 2 con đường trong bảng
routing peanut và không có cái nào dẫn đến 207.25.98.0.

106
Thậm chí subnets khác trên nuts-net không thể được chạm đến
khi dùng bảng routing này. Để minh hoạ, ping một host khác trên
subnet. Ví dụ :
% ping 172.16.1.2
sendto: network is unreachable

Các ping tests này cho thấy bảng routing được tạo bằng ifconfig
cho phép giao tiếp chỉ với các hosts khác trên cùng mạng cục bộ.
Nếu mạng của bạn không không yêu cầu truy xất đế các mạng
TCP/IP nào khác, điều này có thể là tất cả những gì bạn cần. Tuy
nhiên, nếu nó yêu cầu truy xuất đến các mạng khác, bạn phải
thêm nhiều con đường vào bảng routing .
1.3 Xây dựng bảng routing tĩnh
Như ta đã thấy, bảng routing minimal hoạt động tốt để chạm đến
các hosts chỉ trên cùng một mạng vật lý kết nối trực tiếp. Để
chạm đến các hosts ở xa, các con đường thông qua gateways
ngoại phải được cộng thêm vào bảng routing. Một cách để làm
điều này là xây dựng bảng routing tĩnh với lệnh route .
# route add 207.25.98.0 172.16.12.1 1
add net 207.25.98.0: gateway almond

107
% netstat -rn
Bảng routing s
Destination Gateway Flags Refcnt Use Interface
127.0.0.1 127.0.0.1 UH 1 132 lo0
default 172.16.12.1 UG 0 0 le0
172.16.12.0 172.16.12.2 U 26 49041 le0

1.4 Giao thức routing interior


Các giao thức routing được chia thành 2 nhóm chính: interior và
exterior. Giao thức interior là giao thức routing dùng bên trong -
interior to - một hệ thống mạng độc lập. Trong thuật ngữ TCP/IP,
các hệ thống mạng độc lập được gọi là autonomous systems.
Trong các autonomous system (AS), thông tin routing được trao
đổi dùng các giao thức interior được chọn bởi người quản trị hệ
thống autonomous system.
Tất cả các giao thức routing interior trình diễn cùng một chức
năng cơ bản. Chúng phát hiện ra con đường tốt nhất đến đích, và
chúng phân phối thông tin routing giữa các hệ thống trên một
mạng. Làm thế nào chúng hiện thực các chức năng này, nói cách

108
khác, làm thế nào chúng quyết định được con đường nào là tốt
nhất, chính là những gì làm các giao thức routing trở nên khác
nhau.. Có nhiều nghi thức interior routing:

Routing Information Protocol (RIP) là interior protocol được


dùng hầu hết trên các hệ thống UNIX. RIP được đi kèm như là
một phần của UNIX được phân phối với hầu hết các hệ thống. Nó
thích hợp cho mạng LAN và đơn giản trong việc cấu hình. RIP
chọn con đường với chỉ số "hop count" (metric) thấp nhất như là
tiêu chuẩn tốt nhất cho con đường đó. RIP hop count hiện thực số
lượng gateways mà dữ liệu phải đi qua để đến đích. Kiểu tiếp cận
này được gọi là giải thuật vector-khoảng cách.
Hello là giao thức dùng thời gian trễ như là một yếu tố để quyết
định chọn con đường tốt nhất. Thời gian trễ là khoảng thời gian
tiêu tốn cho 1 gói dữ liệu làm một hành trình giữa source và
destination. Gói Hello chứa một time-stamp chỉ thị thời gian
chúng được gửi. Khi packet đến đích, hệ thống nhận sẽ trừ time-
stamp với thời gian hiện hành, để ước lượng phải tốn bao lâu để
packet đến. Hello không được dùng rộng rãi.
Intermediate System to Intermediate System (IS-IS) là một giao
thức routing interior từ bộ giao thức OSI. Nó là giao thức
Shortest Path First (SPF) link-state. Nó là interior routing
protocol dùng trên mạng backbone T1 NSFNET

109
Open Shortest Path First (OSPF) thì khác với giao thức link-state
được phát triển cho TCP/IP. Nó thích hợp cho các mạng lớn và
cung cấp nhiều tính năng thông qua RIP.
1.5 Routing Information Protocol
Routing Information Protocol (RIP) được chạy bởi routing
daemon tên là routed (đọc là "route" "d"). Khi chúng khởi động,
nó phát sinh ra một yêu cầu cho việc cập nhật các con đường và
sau đó lắng nghe đáp ứng đối với các câu hỏi đó. Khi một hệ
thống system được cấu hình để cung cấp thông tin RIP nghe yêu
cầu, chúng trả lời với một gói dựa trên thông tin trong bảng
routing của nó. Gói cập nhật chứa địa chỉ đích từ bảng routing và
routing metric kết hợp với mỗi đích. Gói cập nhật được tạo thành
khi có yêu cầu, cũng như là được tạo theo chu kỳ để giữ cho
thông tin routing được chính xác.
Để xây dựng bảng routing, routed dùng thông tin trong update
packets. Nếu routing update chứa một con đường đến đích không
tồn tại trong bảng routing cục bộ, thì con đường mới được cộng
thêm vào. Nếu gói update mô tả một con đường đã có trong bảng
cục bộ, con đường mới được dùng chỉ khi nó có giá thấp hơn. Giá
của một con đường được xác định bằng việc cộng thêm giá của
việc chạm đến gateway gửi gói update đến tham số metric chứa
trong gói cập nhật RIP. Nếu tổng metric là nhỏ hơn metric của
con đường hiện tại thì, con đường mới được dùng .
RIP cũng xoá các con đường từ bảng routing. Nó hoàn tất trong 2
cách. Đầu tiên, nếu gateway đến đích nói rằng giá của các con
đường là lớn hơn 15, con đường sẽ bị xoá. Thứ hai, RIP giả sử
rằng một gateway gửi tín hiệu updates bị chết. Tất cả các con
đường thông qua gateway sẽ bị xoá nếu không có thông tin cập
nhật được nhận được từ gateway đó trong một khoảng chu kỳ
thời gian nhất định. Nói chung, RIP phát hành thông tin cập nhật
routing mỗi 30 giây. Trong nhiều hiện thực, nếu một gateway

110
không phát hành routing updates mỗi 180 gâiy, tất cả các con
đường thông qua gateway đó sẽ bị xoá khoải bảng routing.
1.6 Chạy RIP với routed
# routed
routed đọc /etc/gateways lúc khởi động và thêm các thông tin của
nó vào bảng routing. routed có thể xây dựng bảng thông tin
routing một cách đơn giản bằng cách dùng RIP updates nhận
được từ nhà cung cấp RIP.
Hầu hết dùng tập tin /etc/gateways để định nghĩa active default
route, do đó chúng ta dùng nó như là ví dụ. Ví dụ này là đủ bởi vì
tất cả chúng có cùng một định dạng cơ bản trong /etc/gateways.
Trên peanut, dòng sau đây chỉ định almond là default gateway:
net 0.0.0.0 gateway 172.16.12.1 metric 1 active
Dòng bắt đầu với từ khóa net. Tất cả các dòng bắt đầu với từ
khoá net hay từ khoá host để chỉ thị ra đâu là địa chỉ mạng hay
địa chỉ host. Địa chỉ đích 0.0.0.0 là địa chỉ dùng cho default
route. Trong lệnh route ta dùng từ khoá default để chỉ ra con
đường này, nhưng trong /etc/gateways default route được xác
định bởi địa chỉ mạng 0.0.0.0.

111
Mạng ví dụ

2. Thiết lập mạng cho một máy Linux


2.1 Lệnh ifconfig
Lệnh ifconfig được sử dụng trong quá trình boot hệ thống để cấu
hình các trang thiết bị mạng. Sau đó, trong quá trình vận hành,
ifconfig được sử dụng cho debug, hoặc để cho người quản trị hệ
thống thay đổi cấu hình khi cần thiết .
Lệnh ifconfig không có tùy chọn dùng để hiển thị cấu hình hiện
tại của máy.
[root@starturn root]# /sbin/ifconfig

eth0 Link encap:Ethernet HWaddr 00:C0:26:21:96:99

inet addr:192.168.10.10 Bcast:192.168.10.255

112
Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:9171 errors:0 dropped:0 overruns:0


frame:0

TX packets:8889 errors:0 dropped:0 overruns:0


carrier:0

collisions:0 txqueuelen:100

RX bytes:2471145 (2.3 Mb) TX bytes:1869592 (1.7 Mb)

Interrupt:12 Base address:0x6000

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

UP LOOPBACK RUNNING MTU:16436 Metric:1

RX packets:92 errors:0 dropped:0 overruns:0 frame:0

TX packets:92 errors:0 dropped:0 overruns:0


carrier:0

collisions:0 txqueuelen:0

RX bytes:6608 (6.4 Kb) TX bytes:6608 (6.4 Kb)

Để gán địa chỉ IP 193.105.106.10 cho card mạng Ethernet đầu


tiên ta dùng lệnh
ifconfig eth0 193.105.106.10 netmask 255.255.255.0
broadcast 192.105.106.255

2.2 Thiết lập một aliase cho card mạng


Linux cho phép bạn sử dụng bí danh (alias) cho card mạng, tức là
cho phép bạn có nhiều địa chỉ IP cho cùng một card vật lý. Kết
quả nhận được gần giống như bạn có gắn nhiều card vật lý lên

113
máy. Do đó, bạn có thể dùng một card để nối với nhiều mạng
logic khác nhau. Cú pháp của lệnh này là :
ifconfig eth0:0 208.148.45.58 netmask
255.255.255.248 broadcast 208.148.45.255 up
Các tập tin cấu hình của kết nối mạng là /etc/sysconfig/network-
scripts/ifcfg-ethX với X là 0,1 ... hay 0:0, 0:1 .... Bạn có thể thay
đổi cấu hình kết nối mạng bằng cách sửa đổi lại tập tin này bằng
một chương trình soạn thảo text như mc chẳng hạn, sau đó khởi
động lại kết nối mạng bằng
/etc/rc.d/init.d/network restart

[root@starturn ]# ifconfig eth0:0 172.16.10.100


netmask 255.255.255.0

[root@starturn ]# ifconfig

eth0 Link encap:Ethernet HWaddr 00:C0:26:21:96:99

inet addr:192.168.10.10 Bcast:192.168.10.255


Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:10345 errors:0 dropped:0 overruns:0


frame:0

TX packets:9994 errors:0 dropped:0 overruns:0


carrier:0

collisions:0 txqueuelen:100

RX bytes:2606998 (2.4 Mb) TX bytes:2256640 (2.1 Mb)

Interrupt:12 Base address:0x6000

eth0:0 Link encap:Ethernet HWaddr 00:C0:26:21:96:99

inet addr:172.16.10.100 Bcast:172.16.255.255


Mask:255.255.255.0

114
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

Interrupt:12 Base address:0x6000

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

UP LOOPBACK RUNNING MTU:16436 Metric:1

RX packets:108 errors:0 dropped:0 overruns:0 frame:0

TX packets:108 errors:0 dropped:0 overruns:0


carrier:0

collisions:0 txqueuelen:0

RX bytes:7888 (7.7 Kb) TX bytes:7888 (7.7 Kb)

[root@starturn root]#

2.3 Lệnh ping


Ứng dụng của lệnh này là để thử xem 2 máy có kết nối được với
nhau chưa. Cú pháp cơ bản của lệnh rất đơn giản là ping
địa_chỉ_IP_máy_đích. Ví dụ như
[root@starturn root]# ping starturn

PING starturn (127.0.0.1) from 127.0.0.1 : 56(84)


bytes of data.

64 bytes from starturn (127.0.0.1): icmp_seq=1


ttl=64 time=0.162 ms

64 bytes from starturn (127.0.0.1): icmp_seq=2


ttl=64 time=0.072 ms

64 bytes from starturn (127.0.0.1): icmp_seq=3


ttl=64 time=0.068 ms

115
64 bytes from starturn (127.0.0.1): icmp_seq=4
ttl=64 time=0.067 ms

--- starturn ping statistics ---

4 packets transmitted, 4 received, 0% loss, time


3000ms

rtt min/avg/max/mdev = 0.067/0.092/0.162/0.040 ms

[root@starturn root]#

Nếu 2 máy có thể liên lạc được với nhau, chúng ta sẽ biết thêm
thời gian trả lời để cho biết sự thông thoáng về mạng giữa 2 máy.
Có thể nói, ping phải chạy trước tiên trước tất cả các hoạt động
mạng khác.
Chú ý: Nên sử dụng ping –n để tránh trục trặc do dịch vụ DNS
làm ảnh hưởng tới việc kết quả thử kết nối mạng.
2.4 Lệnh route
Lệnh route không có tùy chọn (option) cho phép hiển thị bảng
dẫn đường hiện tại của kernel (Lệnh netstat –r cũng có tác dụng
tương tự)
[root@starturn root]# route -n

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use


Iface

192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo

0.0.0.0 192.168.10.1 0.0.0.0 UG 0 0 0 eth0

116
Để chỉ ra rằng card mạng eth0 được nối với một mạng
208.148.45.56 ta dùng lệnh route như sau :
route add -net 208.148.45.56 eth0
Còn nếu chúng ta muốn sử dụng bí danh của card mạng để nối
vào một mạng logic khác, ta có thể sử dụng lệnh
route add -net 193.105.106.0 eth0:0
Công tác cuối cùng là phải chỉ ra các địa chỉ của gateway mặc
định.
route add default gw 193.105.106.1 metric 1
Biết sử dụng thành thạo cú pháp của 2 lệnh ifconfig và route rất
quan trọng, nó cho phép các cán bộ quản trị thay đổi cấu hình kết
nối mạng của một server một cách nhanh chóng và không phải
khởi động lại máy. Vì vậy, server luôn sẵn sàng. Bạn cũng có thể
sử dụng tiện ích netconfig để cấu hình liên kết mạng nếu chưa
thành thạo nhiều cú pháp của các lệnh trên.
2.5 Lệnh Traceroute
Đây cũng là lệnh cho phép chẩn đoán hoạt động của mạng. Cú
pháp của lệnh giống như lệnh ping nhưng kết quả không chỉ
dừng ở sự trả lời mà còn chỉ ra các thiết bị trung gian nằm giữa 2
máy.
[root@pascal root]# traceroute mail.yahoo.com

traceroute to login.yahoo.akadns.net
(66.163.171.128), 30 hops max, 38 byte packets

1 ldap.citd.edu.vn (172.16.10.3) 0.279 ms 0.217 ms


0.149 ms

2 172.16.8.1 (172.16.8.1) 3.454 ms 3.198 ms 3.922 ms

3 172.16.2.1 (172.16.2.1) 3.620 ms 3.720 ms 3.675 ms

117
4 203.160.0.9 (203.160.0.9) 438.633 ms 323.406 ms
303.153 ms

5 203.162.3.134 (203.162.3.134) 249.784 ms 367.909


ms 473.109 ms

6 207.176.97.105 (207.176.97.105) 333.936 ms 340.832


ms 434.777 ms

7 207.176.96.65 (207.176.96.65) 500.847 ms 490.106


ms 390.566 ms

8 i-3-1.sjc-core01.net.reach.com (202.84.143.161)
639.661 ms 570.107 ms 768.673 ms

9 i-13-0.paix-core01.net.reach.com (202.84.251.49)
480.421 ms 554.574 ms 378.577 ms

10 134.159.63.22 (134.159.63.22) 603.834 ms 646.744


msIcmp checksum is wrong 749.157 ms

11 ge-1-2-0.msr1.sc5.yahoo.com (216.115.101.234)
636.987 ms * 719.662 ms

12 vl42.bas2-m.sc5.yahoo.com (66.163.160.218)
582.040 ms * 589.745 ms

13 alteon9.224.sc5.yahoo.com (216.136.226.6) 617.641


ms * 590.422 ms

[root@pascal root]#

Lệnh traceroute là một công cụ hiệu quả cho phép ta phát hiện
lỗi trong quá trình phân đường (IP routing). Ví dụ kết nối từ A ->
C có trục trặc và với traceroute tới C từ máy A, ta có thể phát
hiện ra máy A kết nối máy B, rồi máy B lại kết nối máy A ... do
cấu hình routing của A và B sai.
Chú ý là khi chúng ta thử kết nối với một máy ở xa trong
Internet, do nhiều mạng áp dụng các bức tường lửa (firewall) nên

118
nhiều khi lệnh ping và traceroute không chạy nhưng trên thực
chất là mạng vẫn thông.

119
Linux Kernel
1. Giới thiệu
Linux kernel cung cấp một giao diện giữa các ứng dụng người
dùng, hệ thống phần cứng và tài nguyên. Một vài chức năng của
Linux là:
Quản lý bộ nhớ
Quản lý hệ thống file
Xử lý các lỗi và ngắt
Thực hiện các dịch vụ I/O
Cấp phát tài nguyên hệ thống cho các người dùng
2. Kernel Modules
Trong những năm đầu của Linux, kernel Linux là một monolithic
kernel. Monolithic kernel là tất cả các dịch vụ của Kernel được
biên dịch hết vào trong nó và không có drivers ngoài nào được
gọi. Với monolithic kernel , kernel phải được biên dịch lại mỗi
khi có một thiết bị mới được gắn vào hệ thống.
Khi sự hỗ trợ phần cứng của Linux tăng lên thì kích thước của
Kernel tăng lên và cho thấy sự bất tiện của nó. thế là modular
Linux kernel ra đời.
Modular Linux kernel bao gồm một kernel tối tiểu và một tập các
modules có thể được thêm vào khi kernel đang chạy để hỗ trợ các
thiết bị và dịch vụ mới.
3. Lệnh lsmod
Cho biết danh sách các modules được nạp hiện hành
[root@starturn root]# lsmod

120
Module Size Used by Not tainted

soundcore 6532 0 (autoclean)

mousedev 5524 1 (autoclean)

input 5888 0 (autoclean) [mousedev]

autofs 13348 0 (autoclean) (unused)

8139too 17704 1

mii 2156 0 [8139too]

ipt_REJECT 3736 0 (autoclean)

iptable_filter 2412 1 (autoclean)

ip_tables 14936 2 [ipt_REJECT iptable_filter]

ext3 70368 1

jbd 52212 1 [ext3]

4. Biên dịch lại Kernel


4.1 Tại sao phải compile lại kernel
Cập nhật phiên bản kernel mới hơn
Thêm các tính năng, các module mới
Bỏ bớt các tính năng không cần thiết của Kernel cũ
Tạo một Custom Kernel
Tạo một processor-specific kernel tận dụng hết tính
năng của CPU

121
4.2 Các bước compile kernel
Cấu hình kernel
make config: Cấu hình kernel module từng dòng một tại console
make menuconfig: Cấu hình Kernel Modules theo giao diện
Menu

make xconfig: sử dụng giao diện đồ hoạ X Windows để cấu hình


các module cho kernel
Các bước tiếp theo
make dep
make
make bzImage
make modules
make install

122
make modules_install

make xconfig
Cấu hình LILO
Sau khi complie lại kernel, ta cấu hình LILO để hệ thống boot lại
dùng kernel mới (edit tập tin /etc/lilo.conf).
boot=/dev/hda

map=/boot/map

install=/boot/boot.b

timeout=50

default=firewall

image=/boot/vmlinuz-2.2.14-5.0

label=ker2214

read-only

root=/dev/hda9

image=/boot/bzImage.myker.11feb2001

123
label=myker11feb

root=/dev/hda9

read-only

image=/boot/bzImage.myker-firewall.16mar2001

label=firewall

root=/dev/hda9

read-only

124
Linux Servers
Inetd và các dịch vụ mạng
1. Inetd
Unix có hai cách để tổ chức các dịch vụ mạng: hoặc là khởi động
ngay từ đầu chương trình server dưới dạng daemon, hoặc là để
công tác khởi động chương trình dịch vụ theo yêu cầu (khi có yêu
cầu kết nối) với sự trợ giúp của một tiến trình daemon khác là
inetd (đọc là inét đê). Trong trường hợp đầu, ta cần cho mỗi dịch
vụ ít nhất một daemon và tài nguyên của hệ thống bị sử dụng
ngay cả khi không có yêu cầu kết nối. Còn trong trường hợp sau
ta cần một daemon cho tất cả các dịch vụ. Tài nguyên hệ thống
chỉ thực sự bị chiếm dụng khi có yêu cầu kết nối. Vì vậy, chương
trình server dạng daemon thường trực được dùng cho các dịch vụ
có yêu cầu kết nối thường xuyên như DNS, mail, Web ; còn sơ đồ
qua inetd dành cho các dịch vụ với tần số sử dụng thưa như ftp,
telnet, secure shell …
Chương trình inetd, còn gọi là super-server, được sử dụng để
khởi động các daemon phục vụ các dịch vụ mạng. inetd đợi các
nối mạng sau một số cổng được quy định bởi tập tin cấu hình
/etc/inetd.conf. inetd của RedHat Linux 7.1 sử dụng tập tin
/etc/xinetd.conf và các tập tin trong thư mục /etc/xinet.d. Khi có
yêu cầu kết nối, inetd sẽ gọi chương trình server tương ứng để
thiết lập các kết nối và phục vụ khách hàng. Thông thường, inetd
được khởi động ngay từ đầu bởi các script dùng cho khởi động
máy. inetd sẽ đọc file cấu hình /etc/inetd.conf khi được gọi lên bộ
nhớ. Sau đây là một vài dòng của tập tin /etc/inetd.conf
# <service_name> <sock_type> <proto> <flags> <user>
<server_path> <args>

# Echo, discard, daytime, and chargen are used


primarily for testing.

125
# To re-read this file after changes, just do a
'killall -HUP inetd'

#time stream tcp nowait root internal

#time dgram udp wait root internal

# These are standard services.

ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l


-a

telnet stream tcp nowait root /usr/sbin/tcpd


in.telnetd

Bên cạnh tập tin cấu hình /etc/inetd.conf, tập tin /etc/services
cũng được inetd sử dụng để biết các cổng (port) của các chương
trình server. Ví dụ một đoạn của tập tin /etc/services
ftp-data 20/tcp

ftp 21/tcp

fsp 21/udp fspd

ssh 22/tcp # SSH Remote Login Protocol

ssh 22/udp # SSH Remote Login Protocol

telnet 23/tcp

# 24 - private

smtp 25/tcp mail

# 26 - unassigned

126
time 37/tcp timserver

time 37/udp timserver

rlp #9; 39/udp resource # resource location

nameserver 42/tcp name # IEN 116

whois 43/tcp nicname

re-mail-ck 50/tcp # Remote Mail Checking Protocol

re-mail-ck 50/udp # Remote Mail Checking Protocol

domain 53/tcp nameserver # name-domain server

domain 53/udp nameserver

Hai tập tin /etc/inetd.conf và /etc/services quan hệ mật thiết với


nhau. Cột đầu tiên bao gồm tên các dịch vụ mạng và cần phải
giống nhau. Một dịch vụ muốn được hoạt động nhờ inetd phải
khai báo cổng mà nó đợi khách hàng thông qua /etc/services và
dòng lệnh khởi động nó trong /etc/inetd.conf. Muốn tắt một dịch
vụ, ta chỉ cần đặt dấu chú thích # trước dòng miêu tả dịch vụ và
khi đó, inetd sẽ không biết và không gọi dịch vụ đó nữa. Như các
bạn đọc nhận thấy nội dung của cột <server_path> <args> cho
các dịch vụ là /usr/sbin/tcpd in.telnetd. Chương trình tcpd được
inetd gọi lên trước để làm một số công tác kiểm tra và ghi log
trước khi chương trình dịch vụ thực được gọi lên. Cụ thể là tcpd
sẽ sử dụng
Cột <flags> cho biết chương trình inetd có phải đợi (wait) hay
không (nowait) kết nối kết thúc trước khi "tiếp" một kết nối khác.
Ví dụ trên với telnet cho thấy nhiều chương trình khách có thể
được phục vụ một lúc qua cùng một cổng telnet 23. Tất nhiên
chương trình server telnet cũng phải được thiết kế thích hợp với
kiểu làm việc đa khách hàng này.

127
Cột <user> quy định quyền của tiến trình khi nó được chạy trên
bộ nhớ. Trong trường hợp có nghi ngờ về tính bảo mật của một
dịch vụ, ta có thể giảm quyền của nó bằng cách thay đổi nội dung
của cột này.
Qua ví dụ trên ta thấy dịch vụ ftp sẽ được inetd gọi lên thông qua
dòng lệnh /usr/sbin/tcpd in.ftpd -l –a khi có một chương trình
khách hàng dùng giao thức TCP gọi qua cổng 21.
Đọc thêm. Tiến trình được sinh ra như thế nào? Trên một máy
chủ Unix, thường có hàng chục tiến trình đang đồng thời hoạt
động. Trên những máy chủ lớn và bận bịu, có thể có hàng ngàn
tiến trình cùng lúc.
Vậy tiến trình được hình thành như thế nào ?
Nếu con người được sinh ra bởi con người thì tiến trình cũng sinh
ra bởi tiến trình. Chỉ có một điều khác là phải cần 2 người làm
cha mẹ mới có trẻ em (trừ những dự định clone người hiện nay),
còn tiến trình thì chỉ có một tiến trình cha. Khi hệ thống khởi
động, tiến trình đầu tiên là init. Sau đó, init sẽ sinh ra các tiến
trình khác cần thiết cho sự hoạt động của hệ thống. Ví dụ mỗi khi
ta đăng nhập hệ thống, tiến trình login sau khi kiểm tra mật khẩu
sẽ sinh ra một tiến trình shell để người sử dụng có thể làm việc
thông qua các dòng lệnh của shell. Có 2 lệnh liên quan tới việc
hình thành các tiến trình là lệnh fork và execve. Lệnh fork cho
phép hình thành một tiến trình con giống hệt tiến trình cha và cả
hai sau đó cùng được song song hoạt động và được HĐH đối xử
như nhau. Hai tiến trình này chỉ khác nhau về PID và người ta có
thể biết rằng hiện đang ở tiến trình bằng cách xem giá trị trở về
của lệnh fork: nếu bằng 0, ta đang ở tiến trình cha, nếu khác 0 thì
đó là PID của tiến trình con. Lệnh execve thì thay thế một tiến
trình bằng một tiến trình khác. Như vậy, nếu ta đang có một tiến
trình A, tiến trình B có thể sinh ra từ A bằng cách A fork ra A’
rồi trong A’ ta dùng lệnh execve để thay thế A’ bằng B.
Đoạn chương trình sau cho phép hiểu rõ hơn các miêu tả trên

128
if (fork() == 0) {

/* I am the child, I will become ls /usr/bin */

execl("/bin/ls","ls","/usr/bin", (char *) 0);

else {

/* I’m parent, do whatever perent’s sopposed to do*/

Các biến tấu của execve tạo thành một họ các hàm exec (exec
family). Linux có thêm clone để tạo các threads (tiểu tiến trình).
Trong trường hợp hệ thống quá tải, lệnh fork sẽ không thành
công do tài nguyên hệ thống đã bị vét cạn. Khi đó ta sẽ có thông
báo lỗi trên màn hình gắn trực tiếp với máy chủ và máy chủ cần
được xem xét sửa chữa hoặc nâng cấp.
2. FTP
# default: on

# description: The wu-ftpd FTP server serves FTP


connections. It uses \

# normal, unencrypted usernames and passwords for


authentication.

service ftp

disable = no

socket_type = stream

wait = no

129
user = root

server = /usr/sbin/in.ftpd

server_args = -l -a

log_on_success += DURATION

nice = 10

3. POP 3
# default: off

# description: The POP3S service allows remote users


to access their mail \

# using an POP3 client with SSL support such as


fetchmail.

service pop3s

disable = no

socket_type = stream

wait = no

user = root

server = /usr/sbin/ipop3d

log_on_success += USERID

log_on_failure += USERID

130
4. IMAP
# default: off

# description: The IMAP service allows remote users


to access their mail using \

# an IMAP client such as Mutt, Pine, fetchmail, or


Netscape \

# Communicator.

service imap

disable = no

socket_type = stream

wait = no

user = root

server = /usr/sbin/imapd

log_on_success += DURATION USERID

log_on_failure += USERID

131
Domain Name Server
1. Nền tảng
Trong những năm cuối thập kỷ 60, Ban dự án nghiên cứu của bộ
quốc phòng Mỹ, ARPA (DARPA về sau), bắt đầu tài trợ một
mạng máy tính thí nghiệm trên diện rộng, những tổ chức nghiên
cứu được nối cho quan trọng trong nước Mỹ , gọi Mạng quản lý
đề án nghiên cứu ARPANET. Mục tiêu nguyên thủy của đề án
ARPANET là cho phép những người đấu thầu chính phủ chia sẻ
những chi phí hoặc khan hiếm tài nguyên.
Ngay từ lúc bắt đầu, những người dùng của mạng ARPANET sử
dụng mạng cho sự cộng tác. Sự hợp tác này bắt đầu từ những tập
tin dùng chung, phần mềm và trao đổi thư tín điện tử - tới sự phát
triển và nghiên cứu chung sử dụng những máy tính từ xa dùng
chung.
TCP/IP Bộ nghi thức phát triển vào đầu những năm 1980, và
nhanh chóng trở thành là nghi thức nối mạng chủ nhà chuẩn trên
mạng ARPANET. Sự bao gồm protocol trong hệ điều hành BSD
UNIX ở trường đại học California dùng làm phương tiện trong
việc dân chủ hóa sự truyền thông trong mạng. BSD UNIX là
hoàn toàn miễn phí đối với các trường đại học. Điều này có nghĩa
là sự truyền thông trong mạng - và kết nối ARPANET - trở nên rẻ
và tổ chức hơn được kết nối vào ARPANET.
Nhiều máy tính được nối tới ARPANET, cũng được nối tới
những mạng cục bộ , và không lâu nữa những máy tính khác trên
những mạng cục bộ đều truyền thông qua ARPANET. Mạng
ARPANET nguyên bản trở thành là xương sống của một liên
minh các mạng cục bộ và những mạng dùng TCP/IP, gọi là
Internet.
Vào năm 1988, DARPA quyết định sự thí nghiệm đã kết thúc. Bộ
quốc phòng bắt đầu giải tán mạng ARPANET. Một mạng khác,

132
được tài trợ bởi hội Khoa học Cơ Bản Quốc gia và gọi là
NSFNET, thay thế mạng ARPANET như là xương sống của
Internet.
Gần đây hơn , mùa xuân 1995, Internet đã làm một sự chuyển
tiếp từ việc tài trợ công khai NSFNET như một xương sống.
Ngày nay, đã có hàng triệu kết nối Internet của nhiều máy tính
trên thế giới kết nối vào Internet. Thật ra, một tỉ lệ quan trọng
những máy tính không-PC trên thế giới được nối tới Internet.
Từ Internet , và "internets" nói chung, là theo thứ tự. Trong cách
viết, sự khác nhau giữa chúng có vẻ như rất ít: cái thứ nhất luôn
được viết hoa, cái kia thì không . Sự khác biệt giữa chúng có ý
nghĩa riêng. Internet, với chữ I hoa để cập đến mạng mà cuộc
sống của nó khởi nguồn từ ARPAnet và tiếp tục đến ngày nay, nó
là sự liên minh của các mạng TCP/IP kết nối trực tiếp hay gián
tiếp vào xương sống thương mại của Mỹ.
Xét kỹ hơn, nó thường chỉ gồm nhiều mạng khác nhau -
commercial TCP/IP backbones, regional TCP/IP networks, mạng
TCP/IP của chính phủ Mỹ networks, và mạng TCP/IP của các
quốc gia khác trên thế giới kết nối với nhau thông qua mạch số
tốc độ cao.
Từ internet viết thường, nói cách khác , chỉ đơn giản là bất cứ
mạng nào được xây dựng lên từ nhiều mạng nhỏ hơn sử dụng
cùng một giao thức kết nối mạng. Từ internet (chữ "i" nhỏ) là
không cần thiết kết nối vào Internet (chữ "I" lớn), hay cũng
không nhất thiết phải dùng giao thức TCP/IP như là một chuẩn
kết nối chung.
Thuật ngữ "intranet" chỉ là một thành ngữ tiếp thị cho những
mạng internet (i nhỏ) dựa trên TCP/IP , dùng để nhấn mạnh công
dụng của công nghệ được phát triển và giới thiệu trên Internet
trong nội bộ các mạng hợp tác của các công ty. . Từ "extranet,"
nói cách khác, là internet có kết nối đến các công ty thành viên
hay các công ty con của nó, các nhà cung cấp và khách hàng.

133
2. Lịch sử của Domain Name System
Suốt những năm 70, mạng ARPAnet còn rất nhỏ , một cộng đồng
thân thiện của vài trăm máy tính. Với một file duy nhất
HOSTS.TXT, chứa đựng tất cả các thông tin bạn cần biết về
những máy khác: nó chứa ánh xạ tên  địa chỉ cho tất cả các
máy được kết nối vào ARPAnet. Tương tự như tập tin host trên
Unix , /etc/hosts, được biên dịch từ HOSTS.TXT .
HOSTS.TXT được bảo trì bởi tổ chức SRI (Network Information
Center) và được phân phối từ một máy đơn, SRI-NIC[1]. Các nhà
quản trị ARPAnet thường gửi thư điện tử đến NIC, tuần tự ftp
đến SRI-NIC và gắn vào tập tin HOSTS.TXT hiện hành. Các sự
thay đổi của chúng được biên dịch vào file HOSTS.TXT mới một
hoặc 2 lần trong tuần. Cùng với sự phát triển của ARPAnet, mô
hình này trở nên không thích hợp. Kích thước của file
HOSTS.TXT tăng lên theo sự phát triển của các máy kết nối vào
ARPAnet . Hơn thế nữa , lưu lượng được sinh ra bởi quá trình
cập nhật tăng lên nhanh hơn: mỗi máy thêm vào không chỉ là một
kết nối khác được thêm vào host mà còn là những xu hướng cập
nhật từ các máy khác từ SRI-NIC.
[1] SRI là Stanford Research Institute trong Menlo Park,
California. SRI kết hợp nhiều lãnh vực nghiên cứu khác nhau bao
gồm cả mạng máy tính.
Và khi ARPAnet chuyển sang dùng TCP/IP protocols,
dân số của mạng bùng nổ. Bây giờ một vấn đề nảy sinh
với tập tin HOSTS.TXT:
Lưu lượng và tải
SRI-NIC, thuật ngữ của lưu lượng và tải
của bộ xử lý xoay quanh việc phân phối
file đã trở nên không thể chấp nhận được,
was becoming unbearable.
Đụng độ tên

134
Không thể có 2 hosts trong tập tin HOSTS.TXT được phép có
cùng tên. Tuy nhiên , trong khi NIC có thể gán địa chỉ theo cách
đảm bảo tính duy nhất, nó không có quyền thông qua các tên
hosts đó. Không có cách nào ngăn cản một ai đó thêm vào một
host với tên đụng độ và phá vỡ toàn bộ cơ chế. Một ai đó thêm
vào một host với tên trùng với server mail chính của hệ thống
chẳng hạn, có thể sẽ làm sụp đổ toàn bộ hệ thống mail của
ARPAnet.
Tính toàn vẹn
Bảo trì tính toàn vẹn của tập tin trên mạng đang mở rộng trở nên
ngày càng khó khăn. Cùng lúc đó một tập tin HOSTS.TXT mới có
thể trở nên lớn hơn cùng với sự tăng trưởng của ARPAnet.
Các thành viên điều hành của ARPAnet mở cuộc nghiên cứu cho
một hậu bối của file HOSTS.TXT. Mục tiêu của họ là tạo ra một
hệ thống có thể giải quyết các vấn đề kế thừa từ một hệ thống
bảng các tên host thống nhất . Hệ thống mới phải cho phép quản
trị cục bộ dữ liệu , và cho phép dữ liệu đó trở nên có hiệu lực trên
toàn cục.
Sự giảm tập trung của việc quản trị sẽ giảm thiểu vấn đề cổ chai
cho 1 máy đơn và giải phóng vấn đề lưu lượng. Sự quản lý cục bộ
sẽ làm cho tác vụ giữ cho dữ liệu luông được cập nhật trở nên dễ
hơn nhiều. Nó phải dùng không gian tên kế thừa cho các tên máy.
Điều này sẽ đảm bảo tính duy nhất của các tên.
Paul Mockapetris, khi đó dùng USC's Information Sciences
Institute, chịu trách nhiệm cho việc thiết kế kiến trúc của hệ
thống mới. Năm 1984, ông công bố RFCs 882 và 883, mô tả
Domain Name System. Các RFCs được hoàn chỉnh bởi RFCs
1034 và 1035, mô tả chi tiết hiện tại cho Domain Name
System.[2] RFCs 1034 và 1035 có nhiều tranh cãi hiện nay bởi
nhiều RFCs khác về vấn đề an toàn bảo mật DNS, vấn đề hiện
thực , vấn đề quản trị , cơ chế cho việc cập nhật động các name
servers và cho việc an toàn dữ liệu tên miền.

135
[2] RFCs có nghĩa là Request for Comments , là một phần của
quá trình thông tin cho việc giới thiệu một kỹ thuật mới trên
Internet. RFCs là được phân phối miễn phí và chứa khá nhiều mô
tả kỹ thuật cho công nghệ mà nó giới thiệu do đó nó thường phục
cho đối tượng là các nhà hiện thực

3. Domain Name Space


Cơ sở dữ liệu phân tán của DNS được chỉ mục bởi domain name,
về bản chất mỗi domain name chỉ là một phần trong một hệ thống
cây nghịch đảo (domain name space), như hình vẽ bên dưới. Cấu
trúc cây có thứ tự đó tương tự như hệ thống file của UNIX. Cây
có một điểm gốc root và có thể rẻ nhánh ở những điểm giao nhau
(node), chiều sâu của cây tối đa là 127 cấp.

4. Domain Names
Mỗi node trong cây có một nhãn (tối đa 63 ký tự). Tên domain
name đầy đủ của một node trong cây là một chuỗi các nhãn đi từ
node đến root.

136
Trong DNS, những node ngang hàng với nhau có cùng một node
cha phải có tên khác nhau.
Domains:
Domain chỉ là một nhánh con của domain name
space.
Domain name của một domain tương tự như
domain name của một node ở vị trí cao nhất của
domain đó, xem hình vẽ:

Figure 1.2 purdue.edu domain


Tương tự trong hệ thống filesystem, ở mức cao nhất trong thư
mục /usr, ta có mốt node /usr.

137
Figure 1.3 The /usr directory
Một domain name có thể nằm trong nhiều nhánh, và cũng có thể
trong nhiều domain, ví dụ, domain name pa.ca.us là một phần
của ca.us domain và cũng là một phần của domain us, Figure 1.4

Figure 1.4: A node in multiple domains

5. Internet Domain Name Space


* Top-Level Domains:
138
Internet domain name space được tổ chức thành 7 domain cơ bản:
com : Commercial organizations, such as Hewlett-
Packard (hp.com), Sun Microsystems (sun.com), and IBM
(ibm.com)
edu :Educational organizations, such as U.C. Berkeley
(berkeley.edu) and Purdue University (purdue.edu)
gov :Government organizations, such as NASA
(nasa.gov) and the National Science Foundation (nsf.gov)
mil :Military organizations, such as the U.S. Army
(army.mil) and Navy (navy.mil)
net : Networking organizations, such as NSFNET
(nsf.net)
org : Noncommercial organizations, such as the
Electronic Frontier Foundation (eff.org)
int : International organizations, such as NATO (nato.int)
Ngày nay có thêm một số khác như: firm, shop, wem và nom.
đồng thời người ta cũng mở rộng thêm dựa trên top-level
domains đó như top_level domain của Việt Nam là vn, có những
subdomain như edu.vn và com.vn.
6. Name Servers and Zones
Name server là chương trình lưu những thông tin về domain
name space. Name server có đầy đủ các thông tin về những phần
của domain name space (được gọi là một zone), những thông tin
đó được load từ file hoặc từ name server khác. Sau đó name
server đó sẽ nói rằng nó được uỷ quyền cho zone đó. Name
server cũng có thể authoritative cho nhiều zone.

139
Figure 1.5: The edu domain broken into zones

Types of Name Servers:


Người ta chia làm 2 loại: primary master và secondary master.
Primary master name server của một zone lấy dữ
liệu của zone từ một file trên máy.
Secondary master name server (slave) của một
zone lấy dữ liệu của zone từ name server khác đã
được ủy quyền cho nó.
Khi secondary được khởi động, nó sẽ tìm master name server của
nó và lấy dữ liệu về máy, quá trình này được gọi là zone transfer.
Slave thường lưu dữ liệu này vào một file, về sau nếu slave được
khởi động lại thì nó sẽ đọc dữ liệu từ file này và kiểm tra xem dữ
liệu đó có còn sử dụng được nữa hay không, nếu không nó sẽ
thực hiện động tác zone transfer nửa để lấy dữ liệu mới hơn. Điều

140
này tránh cho slave thực hiện việc zone transfer trong khi dữ liệu
vẫn không thay đổi.
Resolvers
Resolver là những client truy xuất name server. Những chương
trình trên máy cần những thông tin về domain name đều dùng
resolver.
Resolver đảm trách việc:
Hỏi name server (Querying a name server).
Phân giải kết quả (Interpreting responses).
Trả kết quả về cho chương trình đã yêu
cầu.(Returning the information to the programs
that requested it).
Resolution (Phân giải)
Name server không những chỉ cung cấp cho ta những dữ liệu về
những zones mà nó được ủy quyền, nó còn có thể đi tìm thông
qua domain name space mà không được ủy quyền để lấy dữ liệu,
quá trình này gọi là name resolution hoặc resolution.
Root Name Servers:
Root name servers có vai trò rất quan trọng trong việc phân giải.
Quá trình phân giải được bắt đầu từ những root name servers,
điều này làm cho root name server quyết định quá trình hoạt động
của DNS, vì vậy nếu tất cả các Internet root name server đều bị
hư thì quá trình phân giải trong Internet sẽ bị đình trệ, do đó để
tránh tình trạng này người ta thiết lập đến 13 root name server
phân bố trên những vùng khác nhau. 2 ở MILNET (the U.S.
military's portion of the Internet), 1 ở SPAN (NASA’s internet), 2
ở châu Âu, và 1 ở Nhật Bản.

141
Figure 1.6: Resolution of girigiri.gbrmpa.gov.au on the
Internet
Local name server hỏi root name server về địa chỉ của
girigiri.gbrmpa.gob.au và được chỉ đến au name servers. Sau đó
local name server đến hỏi au name server với cùng câu hỏi trên
và được chỉ đến gov.au name server, gov.au name server chỉ
local name server đến gbrmpa.gov.au name server. cuối cùng
local name server hỏi gbrmpa.gov.au name server về địa chỉ trên
và nhận được câu trả lời.
Mapping Addresses to Names

142
Những nodes trong domain in-addr.arpa được gán sau những số ở
dạng dotted-octet cũa địa chỉ IP và có thể có tối đa 256
subdomain.
Theo hình dưới đây nếu địa chỉ IP của winnie.corp.hp.com là
15.16.192.152 thì subdomain in-addr.arpa tương ứng là
152.192.16.15.in-addr.arpa.
Caching
Name server có thể lưu lại những kết quả đã hỏi trước đó để dùng
khi được hỏi lần sau (caching), giúp tăng tốc độ trả lời cho những
lần truy vấn sau, hơn nửa caching cũng có thể giúp ta tránh việc
hỏi root name server lần nữa.

Figure 1.7: addr.arpa domain

143
Figure 1.8: Resolving baobab.cs.berkeley.edu
Time to Live:
Những dữ liệu được cache lại trong Name server không thể tồn
tại vinh viễn, vì dữ liệu đó có thể được thay đổi bởi name server
phụ trách cho dữ liệu đó. Việc này được thực hiện bởi người quản
trị của zone đó trong việc khai báo Time to Live (TTL) cho dữ
liệu đó, TTL là thời gian mà các name server khác có thể cache
dữ liệu trong bao lâu. Sau thời gian đó name server đó phải hủy
tất cả các cache đó và đi lấy dữ liệu mới.
7. Setup BIND
7.1 Setting up DNS Data:
Ta cấu hình nhiều file cơ sở dữ liệu (database files) trong đó một
file ánh xạ tất cả host name vào địa chỉ, và file khác ánh xạ từ địa
chỉ vào host name (phân giải ngược). và file /etc/named.conf.
The database file:

144
Tất cả các entries trong database file được gọi là NDS resource
records. Không phân biệt in hoa.Ta có các loại resource records
trong database sau:
SOA record :Indicates authority for this zone data
NS record :Lists a name server for this zone
Other records :Data about hosts in this zone
A :Name-to-address mapping
PTR :Address-to-name mapping
CNAME :Canonical name (for aliases)
SOA Records:
Entry đầu tiên trong file là SOA (start of authority) resource
record. SOA record xác định name server này là nguồi thông tin
tốt nhất của zone này.
vnuhcm.edu.vn. IN SOA vnuserv.vnuhcm.edu.vn.
root.vnuhcm.edu.vn. (
1 ; Serial
10800 ; Refresh after 3 hours
3600 ; Retry after 1 hour
604800 ; Expire after 1 week
86400 ) ; Minimum TTL of 1 day
Tên miền vnuhcm.edu.vn. phải ở vị trí cột đầu
tiên và kết thúc bằng dấu chấm.
IN là Internet.
vnuserv.vnuhcm.edu.vn là tên của primary master
name server của dữ liệu này.

145
root.vnuhcm.edu.vn là địa chỉ mail của người phụ
trách dữ liệu này. Lưu ý là địa chỉ mail thay thế
dấu @ bằng dấu chấm sau root
Dấu ( ) cho phép ta mở rộng ra viết thành nhiều
dòng. Tất cả các tham số trong dấu ( ) được dùng
cho các slave name servers
Serial : Khi một slave name server kết nối với
master server để lấy dữ liệu, trước tiên nó sẽ kiểm
tra số serial, nếu số serial của master lớn hơn tức
là dữ liệu đã hết hạn sử dụng và nó sẽ load lại dữ
liệu mới. vì vậy khi ta cập nhật dữ liệu trên name
server ta nên tăng số serial.
refres : Khoảng Thời gian (giây) mà slave biết
phải kiểm tra lại dữ liệu có còn sử dụng được
không.
retry : Nếu slave không thể kết nối với master
name server sau một khoảng thời gian refresh thì
nó sẽ cố gắng kết nối lại sau retry giây.
expire: Nếu slave không thể kết nối với master
server sau khoảng thời gian expire giây, thì slave
sẽ không trả lời cho vùng dữ liệu đó khi được truy
vấn, vì nó cho rằng dữ liệu này đã quá củ.
TTL : Time To Live, giá trị này được dùng cho
tất cả các resource record trong file cơ sở dữ liệu.
giá trị này cho phép những server khác cache lại
dữ liệu trong 1 khoảng thời gian xác đĩnh TTL.
NS Records:
Những entry tiếp theo là NS (name server) resource record.
vnuhcm.edu.vn.IN NSvnuserv.vnuhcm.edu.vn.
Record này xác định name server của zone vnuhcm.edu.vn

146
Address and Alias Records
Tiếp theo ta tạo ánh xạ name-to-address (từ tên vào địa chỉ).
;
; Host addresses
;
localhost.vnuhcm.edu.vn. IN A 127.0.0.1
vnuserv.vnuhcm.edu.vn. IN A 172.16.1.2
server.vnuhcm.edu.vn. IN A 172.16.1.4
wwwINCNAME vnuserv.vnuhcm.edu.vn.
Khi một name server tìm kiếm một tên và tìm thấy CNAME
record thì nó sẽ thay thế tên đó bằng canonical name và tiếp tục
tìm với tên mới. ví dụ. khi name server tìm www.vnuhcm.edu.vn,
nó phát hiện một CNAME record trỏ đến
vnuserv.vnuhcm.edu.vn, sau đó vnuserv.vnuhcm.edu.vn sẽ được
tìm và kết quả trả về là cả 2.
MX Records
Khai báo cho mail, tất cả các mail sẽ được chuyển đi dự vào MX
record này.
vnuhcm.edu.vnINMX0vnuserv.vnuhcm.edu.vn
vnuhcm.edu.vnINMX5server.vnuhcm.edu.vn
Các giá trị 0, 5 xác định độ ưu tiên của mail server. Giá trị càng
nhỏ độ ưu tiên càng cao. 2 dòng trên có nghĩ sau: mail của miền
vnuhcm.edu.vn sẽ được nhận bởi máy vnuserv.vnuhcm.edu.vn và
server.vnuhcm.edu.vn trong đó máy vnuserv.vnuhcm.edu.vn sẽ
có độ ưu tiên hơn. Có nghĩa là mail sẽ được đưa về máy
vnuserv.vnuhcm.edu.vn, chỉ đưa về máy server.vnuhcm.edu.vn
khi vnuserv.vnuhcm.edu.vn quá bận hay bị down.
PTR Records

147
Tiếp theo ta tạo ánh xạ address-to-name (từ địa chỉ vào tên) trong
tập tin db.172.16.1
2.1.16.172.in-
addr.arpa.INPTRvnuserv.vnuhcm.edu.vn.
4.1.16.172.in-
addr.arpa.INPTRserver.vnuhcm.edu.vn.
Loopback Address
Name server cũng cần một cơ sở dữ liệu khác để lấy thông tin
bên trong máy, như sau:
0.0.127.in-addr.arpa. IN SOA
vnuserv.vnuhcm.edu.vn. root.vnuhcm.edu.vn. (
1 ; Serial
10800 ; Refresh after 3 hours
3600 ; Retry after 1 hour
604800 ; Expire after 1 week
86400 ) ; Minimum TTL of 1 day
0.0.127.in-addr.arpa.INNS
vnuserv.vnuhcm.edu.vn.
1.0.0.127.in-addr.arpa.INPTRlocalhost.
The Root Cache Data:
Bên cạnh những thông tin cục bộ, name server cũng cần biết vị trí
của các root domain name server. Ta có file named.root như sau:
; formerly NS.INTERNIC.NET

. 3600000 IN NS A.ROOT-SERVERS.NET.

A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4

148
; formerly NS1.ISI.EDU

. 3600000 NS B.ROOT-SERVERS.NET.

B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107

; formerly C.PSI.NET

. 3600000 NS C.ROOT-SERVERS.NET.

C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12

; formerly TERP.UMD.EDU

. 3600000 NS D.ROOT-SERVERS.NET.

D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90

; formerly NS.NASA.GOV

. 3600000 NS E.ROOT-SERVERS.NET.

E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10

; formerly NS.ISC.ORG

149
;

. 3600000 NS F.ROOT-SERVERS.NET.

F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241

; formerly NS.NIC.DDN.MIL

. 3600000 NS G.ROOT-SERVERS.NET.

G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4

; formerly AOS.ARL.ARMY.MIL

. 3600000 NS H.ROOT-SERVERS.NET.

H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53

; formerly NIC.NORDU.NET

. 3600000 NS I.ROOT-SERVERS.NET.

I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17

; temporarily housed at NSI (InterNIC)

150
. 3600000 NS J.ROOT-SERVERS.NET.

J.ROOT-SERVERS.NET. 3600000 A 198.41.0.10

; housed in LINX, operated by RIPE NCC

. 3600000 NS K.ROOT-SERVERS.NET.

K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129

; temporarily housed at ISI (IANA)

. 3600000 NS L.ROOT-SERVERS.NET.

L.ROOT-SERVERS.NET. 3600000 A 198.32.64.12

; housed in Japan, operated by WIDE

. 3600000 NS M.ROOT-SERVERS.NET.

M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33

; End of File

7.2 Setting Up a BIND Configuration File

151
Sau khi tạo xong file cơ sở dữ liệu, name server cần phải được
hướng dẫn để đọc file dữ liệu đó bằng cách cấu hình file
/etc/named.conf như sau:
options {
directory "/var/named";
// Place additional options here.
forwarders {
172.16.1.2;
};
};
directory "/var/named" : Khai báo vị trí lưu
các file cơ sở dữ liệu.
forwarders 172.16.1.2 : Local name server
sẽ đi hỏi name server có IP address là
172.16.1.2 khi Local name server không
giải được.
zone "vnuhcm.edu.vn" in {
type master;
file "db.vnuhcm.edu.vn";
};
type : loại name server
otype masternếu là primary
name server.
otype slavenếu là secondary
name server.
file "db.vnuhcm.edu.vn" : tên file cơ sở dữ
liệu.

152
zone "." in {
type hint;
file "db.cache";
};
Dòng cấu hình để name server dùng cache.
Như vậy cấu hình hoàn chỉ của file /etc/named.conf
là:
options {

directory "/var/named";

// Place additional options here.

forwarders {

172.16.1.2;

};

};

zone "." in {

type hint;

file "db.cache";

};

zone "vnuhcm.edu.vn" in {

type master;

file "db.vnuhcm.edu.vn";

};

zone "0.0.127.in-addr.arpa" in {

153
type master;

file "db.127.0.0";

};

zone "1.16.172.in-addr.arpa" in {

type master;

file "db.172.16.1";

};

zone "hcmut.edu.vn" in {

type slave;

file "db.hcmut.edu.vn";

masters {

172.28.2.2;

};

};

zone "28.172.in-addr.arpa" in {

type slave;

file "db.172.16.1";

masters {

172.28.2.2;

};

};

154
Một số quy ước:
Field thứ 2 trong khai báo zone của file /etc/named (zone
"vnuhcm.edu.vn" và zone "1.16.172.in-addr.arpa")có thể giúp ta
một số khai báo nhanh chóng trong file cơ sở dữ liệu sau:
vnuserv.vnuhcm.edu.vn. INA172.16.1.2
có thể viết:
vnuservINA172.16.1.2
2.1.16.172.in-addr.arpa.IN PTR
vnuserv.vnuhcm.edu.vn.
có thể viết
2INPTRvnuserv.vnuhcm.edu.vn.
@ IN SOA terminator.movie.edu.
al.robocop.movie.edu. (
1 ; Serial
10800 ; Refresh after 3 hours
3600 ; Retry after 1 hour
604800 ; Expire after 1 week
86400 ) ; Minimum TTL of 1 day
tương đương với:
vnuhcm.edu.vn. IN SOA terminator.movie.edu.
al.robocop.movie.edu. (
1 ; Serial
10800 ; Refresh after 3 hours
3600 ; Retry after 1 hour
604800 ; Expire after 1 week
86400 ) ; Minimum TTL of 1 day
Nếu field đầu của một entry trong file cơ sở dữ liệu là các khoảng
trắng hay spacebar thì nó sẽ lấy resource record ngay dòng trên
của nó. Ví dụ:
155
server1INA172.16.1.4
INA172.16.1.5
Tương đương với:
server1INA172.16.1.4
server1INA172.16.1.5

7.3 Khởi động primary name server:


Ta dùng script khởi động:
Trong linux 6.2: /etc/rc.d/init.d/named start
Trong linux 7.1: /etc/init.d/named start
7.4 Chương trình nslookup:
Trong linux để khai báo dùng name server, ta cấu hình trong file
/etc/resolv.conf.
Ta thêm các dòng sau vào file /etc/resolv.conf:
Nameserver 172.16.1.2
Để dùng chương trình nslookup ta gỏ lệnh nslookup tại dấu nhắc
lệnh:
bash-2.03# nslookup

Default Server: vnuserv.vnuhcm.edu.vn

Address: 172.16.1.2

> www.vnuhcm.edu.vn

Server: vnuserv.vnuhcm.edu.vn

Address: 172.16.1.2

Name: server.vnuhcm.edu.vn

156
Address: 172.16.1.4

Aliases: www.vnuhcm.edu.vn

Để kiểm tra domain mail ta dùng lệnh: set


type=mx

Ví dụ:
> set type=mx

> vnuhcm.edu.vn

Server: vnuserv.vnuhcm.edu.vn

Address: 172.16.1.2

vnuhcm.edu.vn preference = 0, mail exchanger =


vnuserv.vnuhcm.edu.vn

vnuhcm.edu.vn nameserver =
vnuserv.vnuhcm.edu.vn

vnuserv.vnuhcm.edu.vn internet address =


172.16.1.2

157
Bảo mật Linux
1. Tại sao cần phải bảo mật hệ thống ?
Trong thế giới thay đổi từng ngày trong việc truyền thông dữ liệu
toàn cầu, những kết nối Internet rẻ tiền và tốc độ ngày một nhanh
hơn thì việc bảo mật hệ thống là một vấn đề hết sức hữu ích. Bảo
mật là một đòi hỏi thiết yếu bởi vì những máy tính mang tính
toàn cầu đang ngày càng trở nên kém an toàn. Thử tưởng tượng
một gói dữ liệu khi di chuyển từ điểm A sang điểm B, gói dữ liệu
này có thể đi qua nhiều điểm trên mạng và nếu như tại một máy
nào đó người sử dụng có thể lấy thông tin trên gói dữ liệu này và
biết các thông tin chi tiết của máy gửi, họ có thể sử dụng các kỹ
thuật cao để truy nhập bất hợp pháp vào máy gửi và có thể phá
hỏng máy này hoặc toàn bộ hệ thống tùy theo mức độ thao tác.
Những thao tác mà các người sử dụng bất hợp pháp này có thể
làm trên hệ thống là ăn cắp thông tin hệ thống, từ chối các dịch
vụ sử dụng trên hệ thống.
Mục đích của việc bảo mật là thông báo cho người sử dụng,
phòng ban trong hệ thống biết các vấn đề về việc bảo vệ thông tin
và kỹ thuật của họ. Các luật bảo mật cũng chỉ dẫn cho họ biết
thông tin về các máy mà họ có thể gặp trong đường mạng.
2. Bảo mật là gì ?
Trước hết phải nhận ra một điều là không có một hệ thống nào là
hoàn toàn bảo mật tuyệt đối. Tất cả những gì mà nhà quản trị có
thể làm là tăng thêm sự khó khăn cho người dùng khi họ có ý
định thâm nhập hệ thống. Nhà quản trị hệ thống cần phải quyết
định sự cân bằng giữa các mục đích, ý định sử dụng của hệ thống.
Cần phải quyết định mức độ bảo mật cần thiết cho hệ thống của
mình.
Đối với các nhà cung cấp sản phẩm thì mục tiêu của họ là cung
cấp càng nhiều các dịch vụ càng tốt, đơn giản hóa các việc sử
158
dụng dịch vụ trong hệ thống, và nói chung là tất cả những gì mà
họ có thể làm để cho sản phẩm có thể tiêu thụ nhiều. Việc này vô
hình chung đã làm cho nhà quản trị hệ thống trở nên phức tạp
hơn. Bởi vì các dịch vụ đa dạng má các nhà cung cấp phát triển
có thể trở thành cổng sau cho các cracker có thể thâm nhập hệ
thống.
Như vậy, có thể mô tả sự tác động của việc này đối với các nhà
quản trị như sau :
+ Các dịch vụ chống lại các vấn đề bảo mật : như đã nói ở trên thì
các dịch vụ mà các nhà cung cấp sản phẩm phát triển có thể cho
phép người dùng sở hữu các nguồn tài nguyên trên hệ thống và dĩ
nhiên là điều này hoàn toàn không đòi hỏi một chứng thực nào
cả. Đây là một việc hết sức nguy hiểm cho hệ thống và nhiệm vụ
của nhà quản trị là cần phải quyết định hạn chế các dịch vụ cần
thiết trong hệ thống hơn là bảo mật cho các dịch vụ này.
+ Dễ dàng trong sử dụng thì khó khăn trong bảo mật : một hệ
thống mà dễ dàng cho phép sự thâm nhập của người dùng là một
điều hết sức nguy hiểm cho việc bảo mật hệ thống. Nên có cơ chế
chứng thực cho mỗi sử dụng, điều này có thể gây rắc rối trong
việc sử dụng nhưng nó làm cho hệ thống trở nên an toàn hơn, đặc
biệt nếu có thể thì nên áp dụng cơ chế chứng thực thường xuyên
để tăng thêm phần bảo mật cho hệ thống.
+ Kết quả của sự bảo mật chính là giảm sự mất mát thông tin :
việc thiết lập các cơ chế bảo mật như sử dụng firewall, cơ chế
chứng thực, nghiêm ngặt trong vấn đề sử dụng tương ứng sẽ làm
giảm bớt sự mất mát thông tin, mất mát dịch vụ, … Điều này
tương ứng với cái giá phải trả cho các nhà quản trị.
3. Cần phải bảo vệ những gì trong hệ
thống
Trước khi quyết định việc bảo mật hệ thống thì nhà quản trị cần
phải biết xem mình cần phải bảo vệ những gì trong hệ thống đó.

159
Những thông tin sau có thể giúp cho nhà quản trị có thể biết thêm
thông tin về những vấn đề cần bảo vệ trong hệ thống :
+ Sự liều lĩnh trong bảo mật : có thể khiến cho một người thâm
nhập không hợp pháp có thể thành công trong việc thâm nhập.
Liệu người này có thể thực thi các chương trình trong hệ thống,
hay truy cập các tập tin hệ thống cũng như làm hại đến hệ thống.
Những hoạt động này có thể khiến cho hệ thống ngừng hoạt động
không, họ có thể khiến cho hệ thống trở nên rối tung, …
+ Luồng : thông thường khi một người sử dụng thâm nhập vào hệ
thống không có chứng thực thì thread chính là cách thông thường
mà họ được cung cấp. Nhà quản trị cần phải quyết định xem
những người nào được phép truy cập vào hệ thống thông qua
mạng và những phân luồng nào mà họ được phép sử dụng. Có rất
nhiều người thâm nhập qua hệ thống thông qua phân luồng này,
nhà quản trị cần phải xem xét họ là một trong những kiểu người
thâm nhập nào dưới đây :
Curious : loại thâm nhập vào hệ thống và chỉ muốn xem
hệ thống thuộc loại nào cũng như những dữ liệu của hệ
thống.
Malicious : loại này thường làm chết hệ thống mà họ xâm
nhập, thay đổi website hệ thống, hoặc là khiến cho nhà
quản trị phải tốn nhiều thời gian trong việc khôi phục lại
những gì mà họ phá hoại.
Hight-Profile Intrunder : loại xâm nhập này thường cố
gắng sử dụng hệ thống mà họ đang thâm nhập để truy cập
ra bên ngoài, hoặc có thể là để quảng cáo cho tài năng của
chính mình.
Competition : loại này thì thích thú với các thông tin dữ
liệu trong hệ thống. Họ có thể là một người nào đó mà có
thể nghĩ rằng hệ thống của nhà quản trị có gì đó hấp dẫn
đối với họ.

160
Borrower : loại này thích thong dong trong hệ thống của
nhà quản trị, sử dụng các dịch vụ server như irc, DNS, …
Leapfrogger : loại này thích sử dụng hệ thống của nhà
quản trị để kết nối với các hệ thống khác, nếu như hệ
thống của nhà quản trị có chức năng hoạt động như một
gateway thì họ thường cố gắng làm cho hệ thống trở nên
không tin tưởng đối với các hệ thống khác.

4. Phát triển quy tắc bảo mật


Việc tạo nên một quy tắc bảo mật đơn giản, tổng quát cho hệ
thống để mọi người dùng trong hệ thống có để đọc hiểu nó dễ
dàng và thực hành theo. Điều này có thể bảo vệ dữ liệu của hệ
thống được an toàn như là các thông tin riêng tư của các người
dùng. Một số điều cần nhận biết để thêm vào là : ai là người được
quyền kết nối vào hệ thống, ai được phép cài đặt các phần mềm,
ai là người sở hữu các dữ liệu, …
Một quy tắc bảo mật tổng quát chấp nhận được khởi đầu bằng
câu như sau :
Cái gì không cho phép thì sẽ bị cấm

5. Các bước để phát triển các quy tắc


bảo mật
Việc thiết lập quy tắc bảo mật đòi hỏi phải qua các bước nhất
định mà nhà quản trị cần phải tuân thủ chặt chẽ :
+ tìm xem những gì mà nhà quản trị cần phải bảo vệ trong
hệ thống, cũng như là tìm hiểu xem là cần phải bảo vệ từ
những địa điểm nào.

161
+ quyết định các phân luồng, xem xét các tiến trình đang
tiếp diễn và tìm xem tiến trình nào làm suy yếu hệ thống
để tối ưu hệ thống.
Một trong những lý do quan trọng để thiết lập các quy tắc bảo
mật là phải chắc chắn rằng nó có tác động đáng giá cho việc phát
triển các việc bảo mật này. Chẳn hạn như cần phải biết các tài sản
trong hệ thống bao gồm những gì, có thể ví dụ một hệ thống
thông thường bao gồm những tài nguyên sau :
+ phần cứng : CPU, bảng mạch chính, bàn phím, màn
hình, máy trạm, máy cá nhân, máy in, ổ đĩa, các đường
truyền thông, router, …
+ phần mềm : nguồn của các chương trình, các chương
trình object, các util, nhìn chung là các chương trình hữu
ích cho hệ thống.
+ dữ liệu : đang thực thi, lưu trữ trên mạng, backup, nhật
ký hằng ngày,
+ nhân lực : người dùng, những người cần thiết hoạt động
trên hệ thống.
+ tài liệu : trong chương trình, phần cứng, hệ thống, các
hàm cục bộ quản trị.
+ tài nguyên cung cấp : giấy, mẫu in, các phương tiện hổ
trợ hệ thống khác.
Có một số vấn đề cần nhận rõ khi phát triển một quy tắc bảo mật
mà nhà quản trị không thể bỏ qua được liệt kê dưới đây là :
+ ai là người được phép sử dụng tài nguyên
+ các mục đích của việc sử dụng tài nguyên
+ ai là người được chứng thực cho việc sử dụng các kết
nối và sử dụng trên
+ ai có thể là người có thể quản trị hệ thống

162
+ quyền lợi và nhiệm vụ của người dùng trong hệ thống là

+ quyền lợi và nhiệm vụ của nhà quản trị ngược lại đối
với các người dùng trong hệ thống.
+ cần phải làm gì với các thông tin nhạy cảm
Chúng ta sẽ thảo luận rõ hơn trong phần sau đây các thông tin nói
trên :
+ ai là người được phép sử dụng tài nguyên : một bước cơ
bản là nhà quản trị phải quyết định ai là người được phép
sử dụng tài nguyên và dịch vụ trong hệ thống. Quy tắc
này nhất thiết phải chỉ định rõ ràng ai là người được
chứng thực sử dụng các dịch vụ này.
+ mục đích của việc sử dụng các tài nguyên : sau khi
quyết định được ai là người được phép sử dụng tài nguyên
trên hệ thống thì một điều cần thiết là cung cấp các hướng
dẫn cho những việc sử dụng tài nguyên hệ thống được
chấp nhận. Nhất thiết nhà quản trị cần phải có những
hướng dẫn khác nhau cho nhiều loại người dùng khác
nhau. Quy tắc cần phải chỉ định những sử dụng cho phép
cũng như những sử dụng không cho phép. Cũng cần thiết
là chỉ định những loại người dùng bị ngăn cấm. Nên chỉ
định một cách hạn chế các người dùng và chứng thực.
Những điểm trình bày dưới đây nên được kiểm tra trước
khi phát triển một bảo mật sử dụng chấp nhận được :
có cho phép phá vỡ các account
có cho phép phá vỡ các mật mã
việc ngắt các dịch vụ trong hệ thống có cho phép
không
một người dùng có cần một chứng thực để đọc
các thông tin trong một tập tin có thể đọc không

163
có cho phép người dùng có thể hiệu chỉnh các tập
tin không thuộc sở hữu của họ thậm chí ngay cả
khi họ được quyền thay đổi tập tin
người dùng có nên chia xẻ account không
đa số câu trả lời cho các câu hỏi trên là ‘không’.
+ ai là người được chứng thực sử dụng các kết nối và các
quyền lợi : quy tắc bảo mật của hệ thống nên hiển thị ai là
người được chứng thực cho phép sử dụng các dịch vụ.
Sau đó là quyết định các kiểu kết nối mà họ được phép
truy cập. Nếu như nhà quản trị không điều khiển được
người nào được phép sử dụng các kết nối đến hệ thống thì
dĩ nhiên họ cũng không thể điều khiển được người dùng
nào hiện diện trên hệ thống. Việc điều khiển được người
dùng nào được phép truy cập vào hệ thống còn có thể
giúp cho nhà quản trị có thể phát hiện ai đang sử dụng hệ
thống khi có vấn đề xảy ra đối với hệ thống. Cũng xuất
phát từ vấn đề bảo mật thì nhà quản trị cần phải xem xét
cơ chế mà họ tạo các tài khoản. Trong trường hợp lõng
lẻo nhất, một người sử dụng có chứng thực chấp nhận
được kết nối vào hệ thống sẽ có thể trực tiếp truy cập vào
hệ thống và tạo tài khoản thủ công thông qua các cơ chế
tạo tài khoản của nhà cung cấp sản phẩm. Tổng quát thì
cơ chế này cung cấp một sự tin tưởng tuyệt đối đối với
người đang vận hành chúng, và dĩ nhiên là người dùng
này có một số lượng lớn những đặc quyền trong hệ thống.
Nếu đây là lựa chọn của nhà quản trị thì họ nên lựa chọn
một số người tin tưởng để trình bày tác vụ này. Một lựa
chọn khác là sử dụng một hệ thống thêm để các người
dùng chứng thực có tài khoản chạy.
+ ai là người có đặc quyền quản trị hệ thống : một điều
hết sức là cần thiết trong vấn đề bảo mật là hết sức cẩn
thận trong việc quyết định ai là người có đặc quyền quản
trị hệ thống. Việc hạn chế các đặc quyền này là hết sức
164
cần thiết. Mặc khác chỉ nên cung cấp đầy đủ các đặc
quyền để họ có thể thao tác được các dịch vụ mong muốn.
Một điều nữa là các người dùng nắm giữ các đặc quyền
nên khai báo tài khoản của mình đến trung tâm bảo mật
của hệ thống. Nếu người dùng được nhà quản trị cung cấp
các đặc quyền này không có tài khoản thì có thể họ sẽ là
một sự nguy hiểm cho hệ thống.
+ quyền lợi và nghĩa vụ của người dùng : người dùng nên
biết rõ quyền lợi và nghĩa vụ của mình đối với hệ thống
nhằm đáp ứng đầy đủ các yêu cầu của nhà quản trị.
Những chủ đề dưới đây là một số những điều mà nhà
quản trị cần phải hiểu rõ trong các lĩnh vực này :
những chỉ dẫn mà nhà quản trị cung cấp ( nơi mà
người dùng bị ngăn cấm, và hơn nữa là những
ngăn cấm này là gì )
nơi mà người dùng có thể chia sẽ tài khoản của
mình hoặc cho phép người khác sử dụng tài khoản
của họ.
có thể bảo mật đến cỡ nào khi người dùng sử
dụng password
người dùng thường thay đổi mật mã như thế nào
và những mật mã nào bị chặn hoặc cho phép.
nơi mà nhà quản trị có thể cung cấp các người
dùng backup
ẩn giấu các thông tin mà có thể hữu ích cho người
khác
các quy tắc đối với việc truyền thông điện tư
+ nên làm gì đối với các thông tin nhạy cảm : trước khi
cho phép người dùng sử dụng các dịch vụ trong hệ thống,
nhà quản trị phải quyết định mức độ mà nhà quản trị cung
cấp các chế độ bảo mật. Để quyết định điều này thì cần
165
phải quyết định mức độ nhạy cảm của dữ liệu mà người
dùng lưu trữ trên hệ thống. Dĩ nhiên là nhà quản trị không
muốn người dùng lưu trữ thông tin nhạy cảm trên hệ
thống mà họ không bảo mật tốt. Nhà quản trị nên cung
cấp các thông tin này cho người dùng để họ lưu trữ bằng
những cách khác.
6. Ý nghĩa của việc bảo mật hệ thống
Việc bảo vệ một site là hết sức có ý nghĩa bởi vì nhà quản trị có
thể bảo vệ các tài nguyên của hệ thống mà thường xuyên được sử
dụng như : máy tính cục bộ, dữ liệu của hệ thống, người dùng, hệ
thống mạng, … Thử tưởng tượng điều gì sẽ xảy ra nếu một người
phá hoại có thể sẽ xóa bỏ các dữ liệu của các người dùng, thay
đổi các website hệ thống, hoặc là công bố những kế hoạch tuyệt
mật của hệ thống ra bên ngoài. Nếu như có ý định thiết lập một
hệ thống mạng thì nhà quản trị sẽ phải quyết định những tài
khoản nào sẽ được thiết lập trước khi thiết lập máy cục bộ của
nhà quản trị.
Nếu như một nhà quản trị nào đó nghĩ rằng hệ thống của họ nhỏ
thì sẽ không có người nào có ý định phá hoại hệ thống của họ thì
đây sẽ là một sai lầm lớn bởi vì kẻ phá hoại vẫn có thể ghé thăm
hệ thống của họ. Bởi vì khi có thể thâm nhập vào hệ thống của
bạn thì họ có thể nhờ vào hệ thống của mình mà truy cập vào các
hệ thống khác một cách dễ dàng, …
Người phá hoại có rất nhiều thời gian để họ tìm hiểu về một hệ
thống trong mục đích của họ, và do đó thì việc bảo mật hệ thống
sẽ khiến họ có thể tốn nhiều thời gian để theo dõi những thay đổi
trong vấn đề bảo mật của hệ thống.
+ bảo mật các máy tính trong hệ thống : có lẽ là việc mà các nhà
quản trị thường làm để bảo mật cho hệ thống là dựa trên việc bảo
mật cho các máy tính. Và dĩ nhiên là họ cũng mong muốn các
người dùng cũng tuân thủ theo ý muốn này. Công việc này tương
đối không khó lắm đối với một người dùng bình thường chẳn hạn
166
như chọn một mật khẩu tốt ( khó bị đoán bởi người khác, thay đổi
mật khẩu thường xuyên, … ), bảo mật các dịch vụ mạng trong
máy cục bộ, nâng cấp thường xuyên các chương trình bảo mật hệ
thống mà từ đó có thể phát hiện nhiều lỗ hổng trong việc bảo mật
của hệ thống. Mặc dù điều này là hết sức cần thiết tuy nhiên đây
có thể là một thao tác cồng kềnh đối với một hệ thống mạng lớn.
+ bảo mật mạng cục bộ : việc bảo mật cho hệ thống mạng cục bộ
cũng cần thiết không kém gì việc bảo mật cho từng máy tính
trong hệ thống. Thử tưởng tượng một hệ thống mạng có tới hàng
trăm hoặc hàng ngàn máy tính thì việc bảo mật hệ thống dựa trên
từng máy tính là không thể. Đối với một hệ thống lớn thì cần phải
chắc chắn rằng chỉ có những người được chứng thực mới sử dụng
được hệ thống mạng, xây dựng một hệ thống bức tường lửa (
firewall ) ngăn chặn những xâm nhập bất hợp pháp, sử dụng
những giải thuật mã hoá mạnh mẽ, và cần phải chắc chắn rằng là
không có một máy tính kém an toàn nào nằm trong hệ thống của
nhà quản trị, đây chính là trách nhiệm của một nhà quản trị.
+ bảo mật theo kiểu ẩn giấu : điều này có nghĩa là nhà quản trị sẽ
di chuyển toàn bộ những tập tin cũng như các dịch vụ quan trọng
trong hệ thống tới một chổ khác an toàn mà kẻ phá hoại không
thể nghĩ tới ( điều này có nghĩa là chỗ di chuyển sẽ là một chổ
không theo chuẩn mặc địch của dịch vụ cài đặt ) và do đó thì họ
không thể phá hoại hệ thống được. Tuy nhiên kiểu bảo mật này
hoàn toàn chưa an toàn tuyệt đối bởi vì một kẻ phá hoại có thể
tìm ra nơi nhà quản trị cất giữ những tập tin cũng như dịch này.
7. An toàn vật lý
Tầng đầu tiên trong việc bảo mật chính là nhà quản trị cần phải
bảo vệ vật lý hệ thống máy tính của họ. Ai là người có thể sử
dụng máy tính của hệ thống, liệu nhà quản trị có thể bảo vệ hệ
thống khỏi những ý muốn riêng tư bất chợt của họ không.
Một câu hỏi đặt ra là liệu mức độ bảo vệ ở cấp độ vật lý này là
như thế nào ??? Nếu đây chỉ là một người dùng cá nhân tại nhà
167
thì rõ ràng việc bảo vệ này chỉ nhằm tránh bị những đứa trẻ trong
nhà vô tình tiếp cận, còn nếu đây là một hệ thống trong phòng thí
nghiệm thì có thể vẫn có những nhu cầu tiếp cận máy tính, trong
một số công ty thì việc rời khỏi máy tính mà không có sự tắt an
toàn là hết sức nguy hiểm.
Có thể liệt kê một số phương thức để bảo vệ hệ thống ở cấp độ
vật lý là : khoá cửa phòng, dây cáp, cabin, đây là một số phương
thức khá tốt cho nhà quản trị.
Khóa máy tính : nhiều case máy tính hiện đại có chức năng khóa
chống việc bị người khác mở hộp máy và lấy đi các phần cứng
trong máy tính. Điều này có thể còn giúp cho việc bảo vệ máy
tính khỏi bị người khác khởi động lại. Một vài case máy tính hiện
đại còn có các chức năng khác như không cho phép người khác
thay thế các bàn phím khác cũng như các thiết bị vật lý khác.

168
TÀI LIỆU THAM KHẢO
1. RedHat Linux Unleased
2. Linux Maximum Security
3. Building Internet Firewall
4. Internet
a. www.linux.org
b. www.linux.com
c. www.kernel.org
d. www.sendmail.org
e. www.oreilly.com

169

You might also like