Hội thảo quốc gia Chính phủ điện tử và một kiến nghị với VFOSSA

Theo thông tin báo chí, tháng 7/2012 sẽ diễn ra hội thảo quốc gia về Chính phủ điện tử.

Một trong những vấn đề quan trọng hàng đầu khi xây dựng một hệ thống lớn là thiết kế kiến trúc hệ thống. Ví dụ theo kinh nghiệm của Ngaxây dựng từng bước chính phủ điện tử bắt đầu từ phát triển kiến trúc hệ thống“.

Chương trình Chính phủ điện tử Việt nam bắt đầu từ đề án 112 mà cũng theo thông tin báo chíViệc triển khai Ðề án 112 đã định hướng được kiến trúc hệ thống thông tin của Chính phủ. Không rõ cái kiến trúc hệ thống đó được “định hướng” ra sao. Nhưng nếu chỉ “định hướng” thôi thì không đủ.

Có lẽ vì thế, đến tháng 4/2007, nghị định số 64/2007/NĐ-CP “Ứng dụng công nghệ thông tin trong hoạt động của cơ quan nhà nước” còn giao nhiệm vụ:

Điều 15. Bảo đảm tương thích về công nghệ trong hệ thống thông tin của các cơ quan nhà nước

Bộ Bưu chính, Viễn thông chủ trì xây dựng kiến trúc chuẩn hệ thống thông tin quốc gia với các nội dung chủ yếu sau đây:

1. Quy định áp dụng thống nhất các tiêu chuẩn quốc tế phổ biến, tiêu chuẩn mở về kết nối mạng, trao đổi, lưu trữ dữ liệu và thông tin trong hệ thống thông tin của các cơ quan nhà nước.

2. Ban hành các quy chuẩn kỹ thuật về ứng dụng công nghệ thông tin trong hoạt động của cơ quan nhà nước, bao gồm:….”

Trong nghị định này quan niệm kiến trúc chuẩn hệ thống công nghệ thông tin quốc gia là phương tiện đảm bảo tính tương thích công nghệ và gồm 2 nội dung chính: quy định về các chuẩn và quy chuẩn kỹ thuật.

Có vẻ hơi đơn giản hóa khái niệm “kiến trúc chuẩn hệ thống công nghệ thông tin quốc gia”! -:).

Theo một số thông tin khác thì đã có kiến trúc hệ thống thông tin quốc gia và trên cơ sở đó hiện nay một số bộ ngành đang tiến hánh xây dựng kiến trúc hệ thống thông tin của bộ ngành mình.

Ví dụ, bộ Tài nguyên Môi trường “trên cơ sở kiến trúc hệ thống thông tin quốc gia, cần xây dựng và ban hành kiến trúc hệ thống thông tin ngành TN&MT“. (nguồn).

Bộ Ngoại giao “Công ty Microsoft Việt Nam sẽ phối hợp với Trung tâm Thông tin – Bộ ngoại giao tiến hành khảo sát đánh giá hiện trạng CNTT của Bộ, từ đó đưa ra những tư vấn và hỗ trợ cho Bộ Ngoại giao trong việc thiết kế, xây dựng khung kiến trúc chuẩn CNTT và một lộ trình phát triển ứng dụng CNTT cho giai đoạn từ nay đến 2015.” (nguồn)

Từ các thực tế trên có hai vấn đề mà cộng đồng nguồn mở cần quan tâm:

  1. Chất lượng các kiến trúc hệ thống thông tin đã có: với cái quan niệm hơi đơn giản hóa nêu trong nghị định nói trên thì có cơ sở để nêu vấn đề này. Việc thiết kế, xây dựng kiến trúc hệ thống một cách bài bản, chính quy cần sử dụng các khung kiến trúc một tổ chức (Enterprise Architecture Framework) đã có sẵn bao gồm phương pháp luận, trình tự, công cụ, v.v… Một kiến trúc xây dựng theo một framework được thừa nhận mới có chất lượng thật sự, tránh được các ẩn ý hoặc thiếu sót trong đó gây khó khăn cho việc triển khai sau này.
    Nếu như kiến trúc đã có còn chưa hoàn chỉnh thì việc tiếp tục phát triển cho ra đời các version sau là chuyện bình thường.
  2. Điều quan trọng nhất là kiến trúc hệ thống phải độc lập với công nghệ và nhà cung cấp, dựa trên các chuẩn mở. Nếu không thì khi triển khai, phần mềm nguồn mở sẽ không có cửa hoặc gần như phải phá đi làm lại từ đầu. Một ví dụ tiêu biểu là việc triển khai PMNM tại Munich đã nêu ở đây: hệ thống cũ với nhiều chuẩn đóng, công nghệ đóng đã gây nên rất nhiều rắc rối.
    Để có tính độc lập nói trên, chỉ quy định dùng các chuẩn mở thôi không đủ. Kiến trúc hệ thống phải được thiết kế theo một framework đảm bảo được điều đó.
    Áp dụng được PMNM chỉ là vấn đề nhỏ. Một hệ thống thông tin quốc gia bị khóa cứng vào một số công nghệ, nhà cung cấp mới là vấn đề lớn. Không rõ hiện nay khung kiến trúc chuẩn CNTT của bộ Ngoại giao do Microsoft tư vấn có đảm bảo được diều kiện nói trên không?

Tôi không có các nguồn thông tin chính thức từ bên trong nên chỉ có thể dựa trên các thông tin công khai nêu lên vài nghi vấn. Câu lạc bộ Phần mềm Tự do Nguồn mở (VFOSSA) với tư cách là đại diện pháp nhân cho cộng đồng nguồn mở chắc sẽ tham dự hội thảo này và vì vậy nên tìm hiểu trước hai vấn đề 1 và 2 nói trên để có các kiến nghị cần thiết.

Nếu không sau này dù có cho ứng dụng PMNM vào bộ Ngoại giao, chúng ta sẽ gặp lại trường hợp của Munich nói trên.

(Việc này trước đây tôi có quan tâm và định áp dụng nhưng rồi điều kiện không cho phép, xem . ).

Advertisements

Bóng dáng của điện toán tương lai

Bóng dáng của điện toán tương lai.

( Hồi này không còn điều kiện chọc ngoáy Linux server thì ngồi nghịch Linux Desktop vậy)

Trên blog này đã có một vài bài giới thiệu về điện toán đám mây ( xem ). Dưới đây ta xem thử hình thù cụ thể của nó ra sao đối với một người sử dụng bình thường.

Đầu năm 2010, tôi có giới thiệu UberStudent , một bản Linux dành cho sinh viên và các nhà nghiên cứu. Đây là một bản Linux có khá nhiều phần mềm, công cụ phụ trợ cho việc học hành, nghiên cúu, tra cứu tìm kiếm trên Internet, viết luận án, …

Vào menu Internet → Cloud → EyeOS, trong màn hình xuất hiện, đăng ký một account rồi đăng nhập vào, ta có màn hình sau:


Màn hình này giống như một màn hình Linux Desktop thông thường, có hai panel bar ở trên và dưới, cũng có thư mục Home và một số ứng dụng cơ bản. Ví dụ, nhấn vào icon Word Processor, màn hình soạn thảo văn bản như sau:

Nhấn vào icon Applications trên Desktop ta có danh sách tất cả những ứng dụng hiện có.

Tóm lại là hệt như một bản Linux Desktop, chỉ có điều tất cả đều nằm trên máy chủ đám mây (cloud server) của eyeOS. Cái mà bạn nhìn thấy và làm việc trên đó là phần Cloud Desktop (hoặc Web Desktop) chạy trong trình duyệt web,tương tự như khi ta dùng Gmail hoặc Yahoo Mail.

Đây chính là bóng dáng sơ khai của môi trường điện toán tương lai dựa trên công nghệ đám mây. Khi một công ty cài eyeOS lên máy chủ, tất cả các máy trạm chỉ còn chức năng chạy trình duyệt web để đăng nhập vào làm việc như mô tả ở trên. Tất cả dữ liệu, ứng dụng của mỗi user đều lưu trên máy chủ. Đó là dạng đám mây riêng của công ty (private cloud computing). Mọi ứng dụng, kể cả File Manager đều là dạng web based, chạy trên máy chủ của công ty hoặc trên máy chủ Internet được công ty thuê dưới dạng Phần mềm như dịch vụ (Software as a Service – SaaS).

Máy tính cá nhân (smart phone, notebook, PC) chỉ còn là các thin client đơn giản chạy được trình duyệt web. Tốc độ chạy ứng dụng phụ thuộc vào tốc độ mạng LAN và tốc độ xử lý của trình duyệt.

( EyeOS hiện nay chạy từ trong UberStudent thì đơn giản, có lẽ là bản demo eyeOS thỏa thuận riêng với UberStudent. Từ các bản Linux khác, qua trình duyệt không vào được như trên.)

Một bản Linux khác cũng hướng tới điện toán đám mây là JoliOS. Đây là bản Linux dựa trên Ubuntu, hướng tới một môi trường điện toán đám mây công cộng (public cloud computing). Màn hình chính của nó như sau:

Như thấy trên màn hình, ứng dụng trong JoliOS gồm cả ứng dụng cổ điển cài chạy trên máy (OpenOffice, Skype,…) và các ứng dụng web hiện có chạy trong trình duyệt (Google Docs, Zoho Sheet, OfficeLive, …).

Zoho hiện nay có khá nhiều dịch vụ phần mềm đủ đáp ứng nhu cầu văn phòng bình thường của một công ty nhỏ. Đây cũng là hình bóng của điện toán đám mây công cộng tương lai. Phần mềm sẽ được cung cấp như một dịch vụ trên Internet (có phí hoặc miễn phí). Hễ có kết nối Internet đủ nhanh, đăng nhập vào là dùng ở mọi nơi, mọi lúc, không lo virus, ổ cứng hỏng mất dữ liệu.

Đầu năm 2010, tôi nhấn hỏng mất một con chuột để truy tung con “Rồng thông minh” lai Việt-Nhật nhưng không thấy ( xem), nản quá bèn viết:

Loài rồng thường được nói là loài “ chỉ thấy đầu mà không thấy đuôi, ẩn hiện khôn lường. Khi ẩn thì núp sau những đám mây, khi hiện thì nhe nanh múa vuốt”

Nay quay lại thì đúng là nó đã “nhe nanh, múa vuốt” xuất hiện cùng với đám mây. Đó là một giải pháp private cloud dành cho các tổ chức, doanh nghiệp nhỏ nhưng thông tin khá hạn chế nên cũng không bình luận gì ở đây được. Hệ điều hành iDragon NetPC có lẽ cũng là dạng hệ điều hành cloud desktop của cái private cloud server. Nếu vậy thì có công bố cũng không có điều kiện thử.

Hệ điều hành Chrome OS được quảng cáo nhiều của Google gần đây xuất hiện trên máy tính Chromebook, cũng là một dạng cloud desktop hướng vào các dịch vụ của Google.

Như vậy có thể thấy trong một tương lai không xa, hệ điều hành trên các máy tính cá nhân sẽ rút lại dưới dạng chỉ cần đủ để chạy trình duyệt! Trong tương lai gần thì chưa được. Tốc độ Internet thậm chí tốc độ LAN chưa đủ để xử lý các ứng dụng nặng, các file lớn, tính năng của các ứng dụng đám mây cũng chưa bằng ứng dụng cài trên máy. JoliOS, Chrome OS vẫn có chế độ cho làm việc offline và eyeOS thì cho synchronize dữ liệu.

Quá trình phát triển xoáy ốc biện chứng của điện toán sắp kết thúc một vòng. Internet là một cái mainframe khổng lồ với hàng trăm triệu terminal kết nối xung quanh.

Điện toán đám mây được dự báo là “ cơn sóng thần công nghệ kế tiếp”, không chỉ ảnh hưởng đến người khổng lồ Microsoft mà còn ảnh hưởng đến mỗi kỹ sư IT.

Một đề án quốc gia và cơ hội cho phần mềm nguồn mở.

Một đề án quốc gia và cơ hội cho phần mềm nguồn mở.

Ngày 22/9/2010, Thủ tướng Chính phủ đã ban hành quyết định số 1755/QĐ-TTg phê duyệt đề án “Đưa Việt nam sớm trở thành nước mạnh về công nghệ thông tin và truyền thông”.

Ngày 30/8/2011 (gần 1 năm sau), bộ Thông tin và Truyền thông mới xây dựng kế hoạch thông tin tuyên truyền về đề án này.

Cơ quan cũ của tôi (một đơn vị không nhỏ) nhận được chỉ thị của bộ yêu cầu triển khai kế hoạch tuyên truyền nhưng lại không hề nhận được bản đề án nói trên.

Vào các site chính phủ và bộ 4T đều không thể tìm thấy nội dung văn bản chính thức của đề án. Văn bản duy nhất “tiết lộ” một số nét chính của đề án này là quyết định phê duyệt của Thủ tướng có thể xem tại đây. Báo chí cũng phải giật tít “Tiết lộ về đề án …” xem tại đây.

Chắc là phải có “bí mật quốc gia” gì ghê gớm lắm trong đề án. Nhưng theo quan điểm chỉ đạo của Thủ tướng trong quyết định nói trên thì “ thu hút các doanh nghiệp trong, ngoài nước và toàn xã hội tham gia đầu tư phát triển” !!!

Như vậy sau con rồng thông minh bí ẩn chỉ thấy đầu mà không thấy đuôi đã nói ở đây, lại có thêm một bí ẩn nữa.

Tuy nhiên chỉ căn cứ vào một số tiết lộ qua các văn bản thì thấy vai trò và chủ trương về phần mềm nguồn mở vẫn được coi trọng.

Quyết định của Thủ tướng viết:

Mục tiêu cụ thể : … Nhiều sản phẩm, giải pháp phục vụ ứng dụng công nghệ thông tin của Nhà nước và doanh nghiệp do Việt Nam nghiên cứu, phát triển hoặc bản địa hóa từ các phần mềm tự do mã nguồn mở .

Nhiệm vụ 6: Tăng cường năng lực nghiên cứu trong lĩnh vực công nghệ thông tin và truyền thông, làm chủ và từng bước sáng tạo ra công nghệ cho chế tạo sản phẩm mới

1. Nâng cao năng lực nghiên cứu và phát triển về công nghệ thông tin của các cơ sở nghiên cứu, đào tạo và của các doanh nghiệp; xây dựng một số phòng thí nghiệm trọng điểm dùng chung trên cả nước về …. phần mềm nguồn mở,…,xử lý tiếng Việt, an toàn thông tin.”

Trong kế hoạch thông tin tuyên truyền cho đề án này của bộ 4T (số 2626/KH-BTTTT, có thể tìm thấy ở nhiều nơi trừ tại chính trang web của bộ 4T!), nội dung tuyên truyền về phần mềm nguồn mở xếp thứ 4 trong 9 nội dung tuyên truyền:

Qua các thông tin trích dẫn ở trên, có thể thấy:

  1. Trong mục tiêu “nội địa hóa” phần mềm, giải pháp phục vụ cho Nhà nước và doanh nghiệp có việc “bản địa hóa các PMNM”. Điều này có nghĩa là nhà nước đánh giá PMNM có đủ khả năng đáp ứng yêu cầu và là một trong hai giải pháp nội địa hóa (ngoài việc tự viết phần mềm).

  2. Nhà nước sẽ đầu tư cho việc nghiên cứu, phát triển PMNM ở cấp phòng thí nghiệm trọng điểm quốc gia (cái này nhiều tiền và rất trịnh trọng. Nhưng mong rằng nó không như cái phòng thí nghiệm trọng điểm quốc gia mà tôi biết) và nhất là việc xử lý tiếng Việt. Một bộ gõ tiếng Việt tốt, ổn định cho PMNM là nhu cầu cấp thiết hiện nay. Trong khi chờ đợi, nên có một site PMNM quốc gia (do bộ 4T quản lý, cho các site như Ubuntu Vn host miễn phí) và đầu tư viết một cái add-on cho OpenOffice Writer để các thấy cô giáo phổ thông có thể viết công thức toán học dễ dàng hơn có lẽ là không khó và rất thiết thực.

  3. Nội dung tuyên truyền cũng cho thấy nhà nước đánh giá PMNM có vai trò, lợi ích trong việc “làm chủ công nghệ, đảm bảo chủ quyền số, đảm bảo an toàn bảo mật thông tin”. Làm chủ công nghệ thì hiển nhiên. Đọc được mã nguồn và theo dõi các site dự án nguồn mở có thể nắm được công nghệ đến từng dòng lệnh. Và vì thế sẽ không bị các hãng phần mềm nguồn đóng bắt bí, có được chủ quyền số. Đảm bảo an toàn, bảo mật thông tin dựa trên hai yếu tố: khả năng an toàn, bảo mật của PMNM và không lo bị “các thế lực thù địch” cài cắm mã độc, cổng hậu trong những phần mềm nguồn đóng.

  4. Vì những vai trò, lợi ích như thế nên nhà nước có chủ trương “ứng dụng chuẩn mở, PMNM trong những ngành, lĩnh vực quan trọng như giáo dục, đào tạo, an ninh, quốc phòng, ngân hàng, tài chính và các cơ quan trọng yếu của Đảng, Chính phủ ”. Chủ trương này, mặc dù chỉ ở mức “tuyên truyền, vận động”, nhưng cũng là sự khẳng định ở cấp nhà nước (ít nhất là của bộ 4T!) về vai trò trọng yếu của PMNM. Đây là lần đầu tiên có một chủ trương mạnh và rộng như vậy về ứng dụng PMNM.

Đó là những tín hiệu đáng mừng. Tuy nhiên như thực tiễn đã cho thấy, từ chủ trương, chính sách đến thực hiện là một khoảng cách khá xa. Dù sao cũng hoan nghênh bộ 4T đã rất dũng cảm, có những nhận thức đúng về PMNM, dám làm Đông ki sốt. Những chuyên viên, lãnh đạo bộ đưa được những dòng nói trên vào văn bản không phải đơn giản như kinh nghiệm bản thân tôi đã trải qua trên con đường gian truân này.

Chúc các anh thành công.

Ghi chép về file và hệ thống file

Ghi chép về hệ thống file.

( Trước đây tôi có dịch một bài về các hệ thống file nhật ký của Linux . Hôm nay rỗi việc, xem kỹ hơn một chút để khi cần, ví dụ chạy lệnh fsck , đọc các thông báo khỏi bỡ ngỡ).

I. Hệ thống file

Có hai cách hiểu tùy theo ngữ cảnh:

A- Một hệ thống file (file system) là một kiểu lưu trữ và tổ chức các file và dữ liệu trong file để dễ tìm kiếm và truy cập. Hiện tại trong Linux phổ biến hai kiểu hệ thống file là ext3 và ext4.

B- Một hệ thống file là một cây thư mục bao gồm một thư mục gốc (/), các thư mục con và các file chứa trong đó.

Trên mỗi partition chỉ có thể có một kiểu hệ thống file (được tạo ra khi format: ext3, ext4, fat, ntfs, …). Nhưng một cây thư mục có thể đặt trên nhiều partition: thư mục gốc / đặt ở partition sda2, thư mục /home đặt ở sda5, v.v… tùy ý người dùng chọn khi cài đặt.

Các kiểu hệ thống file:

  • Hệ thống file ổ cứng (Disk file systems): FAT, NTFS, ext2/3/4, HFS, …Riêng file trong Compact Disk hoặc DVD lưu theo hệ thống file ISO 9660 hoặc UDF. Từ Linux 2.6 và Windows Vista, đĩa DVD có thể ghi theo format Mount Rainier (mở rộng của UDF) như đĩa mềm.

  • Hệ thống file flash (Flash file systems): tối ưu cho ghi vào bộ nhớ flash (ổ USB).

  • Hệ thống file mạng (Network file systems): SMB, NFS.

  • Hệ thống file ổ cứng mạng (Shared disk file systems): dùng truy cập các file lưu trên các cụm ổ cứng trong mạng (SAN). Thuộc loại này có GFS của Red Hat, GPFS của IBM.

  • và nhiều thứ nữa …..

Đơn vị lưu trữ file trên ổ cứng (và các thiết bị lưu trữ quay hình tròn?)

  • Sector (cung từ): là đơn vị lưu trữ vật lý nhỏ nhất trên ổ cứng. Dung lượng một sector từ 512B đến 1,2 hoặc 4KiB (cấp số mũ 2 của 8bit).



  • Cluster (nhóm cung từ): khi lưu file nếu quản lý theo sector thì quá nhỏ, dữ liệu quản lý nhiều, làm chậm quá trình đọc, ghi. Cluster là đơn vị lưu trữ nhỏ nhất để lưu file trên ổ cứng gồm từ 1-128 sector liên tục.

Đơn vị lưu trữ file logic

  • Block: là đơn vị lưu trữ logic nhỏ nhất được cấp khi lưu dữ liệu. Dung lượng một block (block size) tùy theo: với hệ thống file ext3, một block có thể là 1,2 hoặc 4 KB.

  • Block dùng cho cả các thiết bị lưu trữ quay hình tròn (ổ cứng, CD, đĩa mềm) lẫn các thiết bị lưu trữ không quay (ổ USB, băng từ). Tức là nó là đơn vị lưu trữ logic.

  • Extent: là một nhóm block liên tục. Một số hệ thống file (JFS2, XFS, ext4) dùng đơn vị lưu trữ được cấp khi lưu dữ liệu không phải là block mà là một nhóm block (gọi là một extent). Dữ liệu được lưu đủ một extent trong bộ nhớ trước khi ghi vào ổ cứng, do đó tốc độ ghi và đọc nhanh hơn và cũng giảm được lượng metadata cần quản lý. Nếu không dùng extent, metadata được cập nhật cho từng block dữ liệu, khi dùng extent, metadata chỉ cập nhật cho từng nhóm block. Ví dụ ext4 ghép các block 4KB thành extent tới 128MB.

Superbloc:

Superblock gồm các thông tin chung về một hệ thống file: dung lượng, dung lượng block, các block đã ghi và còn trống, vị trí và dung lượng bảng inode, …

Nếu superblock bị hỏng thì hệ thống file không mount được và do đó không truy cập được. Vì vậy hệ điều hành định kỳ sẽ tạo các bản backup của superblock ngoài bản chính (primary superblock).

[root@localhost zxc]# dumpe2fs /dev/sda2 | grep -i superblock

dumpe2fs 1.41.11 (14-Mar-2010)

Primary superblock at 0, Group descriptors at 1-1

Backup superblock at 32768, Group descriptors at 32769-32769

Backup superblock at 98304, Group descriptors at 98305-98305

Nội dung chi tiết của superblock(ví dụ với partition /dev/sda2):

dumpe2fs -h /dev/sda2

Nội dung chi tiết của toàn bộ hệ thống file trên một partition /dev/sda2, xuất ra thành file sda2.txt cho dễ đọc:

dumpe2fs /dev/sda2 > sda2.txt

Hai lệnh trên đều chạy với quyền root (với Ubuntu thêm sudo vào đầu).

II. Cây thư mục

II.1-inode

inode là một cấu trúc dữ liệu chứa các metadata của mỗi file, thư mục trong các hệ thống file Linux. Trong một inode có các metadata sau:

  • Dung lượng file tính bằng bytes.

  • Device ID : mã số thiết bị lưu file.

  • User ID : mã số chủ nhân của file.

  • Group ID.: mã số nhóm của chủ file.

  • File mode : gồm kiểu file và các quyền truy cập file (permissions).

  • Hệ thống phụ và các cờ hạn chế quyền truy cập file.

  • Timestamps: các mốc thời gian khi: bản thân inode bị thay đổi (ctime), nội dung file thay đổi (mtime) và lần truy cập mới nhất (atime).

  • Link count : số lượng hard links trỏ đến inode.

  • Các con trỏ (từ 11-15 con trỏ) chỉ đến các blocks trên ổ cứng dùng lưu nội dung file. Theo các con trỏ này mới biết file nằm ở đâu để đọc nội dung.

Có hai chú ý trong nội dung inode:

  1. Inode không chứa tên file, thư mục.

  2. Các con trỏ là thành phần quan trọng nhất: nó cho biết địa chỉ các block lưu nội dung file và tìm đến các block đó có thể truy cập được nội dung file.

Mỗi inode có một số inode, tạo thành một bảng inode ghi ở một khu vực riêng trên ổ cứng.

Chú ý là trong inode không có tên file. Tên file được lưu trong thư mục cùng với số inode của nó (xem lệnh ls -i dưới đây).

Khi truy cập đến một file, hệ điều hành từ tên file tìm ra số inode rồi dùng số inode để đọc nội dung inode, từ đó theo các con trỏ để đọc nội dung file.

Trong hình trên, lệnh ls -l liệt kê nội dung của thư mục /home/zxc. Lệnh thứ hai ls -i liệt kê các số inode của các đối tượng trong thư mục: thư mục DATA có số inode là 5, file icsw.png có số inode là 430555.

Lệnh stat <path/filename> cho biết chi tiết về nội dung inode:

[zxc@Man2010 ~]$ stat /home/zxc/Downloads/ND145CP.rtf

File: `/home/zxc/Downloads/ND145CP.rtf’

Size: 68738 Blocks: 144 IO Block: 4096 regular file

Device: 80ah/2058d Inode: 151395 Links: 1

Access: (0644/-rw-r–r–) Uid: (10001/ zxc) Gid: (10001/ zxc)

Access: 2010-03-25 14:34:29.000000000 +0700

Modify: 2010-03-25 14:34:23.000000000 +0700

Change: 2010-03-25 14:34:23.000000000 +0700

Lệnh stat có nhiều option (xem stat –help), ví dụ hai lệnh sau cho biết số bloc dùng lưu file và dung lượng một block (đơn vị byte):

[zxc@Man2010 ~]$ stat -c %b /home/zxc/Downloads/ND145CP.rtf

144

[zxc@Man2010 ~]$ stat -c %B /home/zxc/Downloads/ND145CP.rtf

512

III. Tên file và hard link, soft link

Trong một hệ thống file, mỗi file có một và chỉ một inode, mỗi inode cũng chỉ có một số inode duy nhất. Nhưng một file có thể có nhiều tên file tùy theo số hard link trỏ đến nó.

Một hard link là một liên kết (link) trỏ đến vị trí lưu một file trên ổ cứng:

  • Nếu đổi tên, xóa hoặc di chuyển file gốc sang thư mục khác, hard link vẫn mở được file đó vì nó vẫn trỏ đến vị trí lưu file cố định trên ổ cứng.

  • Tên hard link có thể khác tên file gốc, hard link có thể nằm trong một thư mục khác với thư mục của file gốc. Vì vậy một file có thể có nhiều tên file nằm ở các thư mục khác nhau. Khi truy cập vào hard link (ví dụ nhấn chuột) sẽ truy cập đến file (mở hoặc chạy).

  • Nếu đồng thời mở một file từ các hard link và tên file gốc, khi sửa ở một bản, các bản khác cũng sẽ thay đổi theo sau khi refresh hoặc reload vì thực chất là sửa trên cùng một file.

  • Nếu xóa hard link hoặc xóa tên file gốc nhưng còn một hard link, file vẫn không bị xóa. File chỉ bị xóa khi không còn cái gì trỏ đến vị trí lưu nó. Như vậy muốn xóa một file, phải xóa tên file và tất cả các hard link của nó.

  • Hard link không tạo được với thư mục và không tạo được với file nằm trên một partition khác.

  • Hard link được tạo bởi lệnh ln: ln <path/tên file> <tên hard link>.

Soft link (còn gọi là Symbolic link hoặc symlink) là một liên kết tạo một đường dẫn khác đến thư mục hoặc file gốc.

  • Ví dụ file gốc passwd có đường dẫn là /etc/passwd. Trong thư mục /home/zxc tạo một soft link đặt tên là “mật khẩu” trỏ đến file đó. Như vậy đường dẫn mới đến file /etc/passwd/home/zxc/mật khẩu. Khi truy cập đến một trong hai đường dẫn trên đều là truy cập đến file passwd.

  • Nếu đổi tên, xóa hoặc chuyển file gốc sang thư mục khác thì soft link mất tác dụng, không truy cập được đến file đó nữa. Khác với hard link, khi xóa file có soft link, file bị xóa thật.

  • Có thể tạo soft link với thư mục và file nằm trên partition khác.

  • Soft link tạo bằng lệnh ln -s <path/tên file> <tên soft link>

Tóm lại thì tên file, hardlink, softlink giống và khác nhau cái gì?

Tên file giống như tên khai sinh và tên các hardlink giống như các bí danh (tên gọi khác). Chúng đều tham chiếu trực tiếp tới một số inode cụ thể và từ đó tới inode trỏ tới các block đang lưu file trên ổ cứng. Đi từ tên file hay hardlink đều thông qua số inode để đến cùng một chỗ trên ổ cứng.

Softlink không tham chiếu trực tiếp đến số inode mà tham chiếu đến “cấp trung gian” là tên file (kèm theo đường dẫn ở một thư mục cụ thể), từ tên file mới đến số inode rồi inode để truy cập vào file. Vì vậy nếu “cấp trung gian” là tên file thay đổi, file bị di chuyển hoặc xóa là softlink “bơ vơ” không truy cập được vào nội dung file nữa.

Hardlink chỉ tạo được với file nằm trên cùng một partition, không tạo được với thư mục hoặc với file nằm trên partition khác.

Softlink tạo được với thư mục và tạo được với thư mục, file nằm trên partition khác.

IV. Hệ thống file Linux có bị phân mảnh không?

Về nguyên tắc thì có, nhưng phân mảnh không đáng kể và không ảnh hưởng lớn đến tốc độ truy cập file. Người dùng bình thường không cần quan tâm đến vấn đề này.

V. Kiểm tra hệ thống file

Hệ thống file được kiểm tra bằng lệnh fsck (file system check). Lệnh này kiểm tra theo 5 giai đoạn (phase):

Phase 1: Check Blocks and Sizes – kiểm tra các inode

Phase 2: Check Path-Names – kiểm tra sự tương thích giữa inode và thư mục.

Phase 3: Check Connectivity – các thư mục có được kết nối vào hệ thống file ?

Phase 4: Check Reference Counts – sửa các sai lệch về số link ở hai phase trên.

Phase 5: Check Cylinder Groups – kiểm tra các block chưa dùng có phù hợp với bảng inode không.

Mỗi lần hệ thống khởi động, lúc partition chính chưa mount, fsck tự động chạy và kiểm tra, sửa các lỗi nhỏ (nếu có thể).

Nếu lỗi nặng, fsck không tự sửa được nó sẽ thông báo:

/dev/sda4: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY

(Tại partition /dev/sda4 có lỗi không tương thích, hãy chạy fsck bằng tay)

Chi tiết xem thêm tại đây . Lệnh tương đương trong windows là chkdsk và scandisk. Điểm khác là fsck kiểm tra được cả các partition NTFS và FAT.

Sau khoảng 25-30 lần khởi động, fsck sẽ thực hiện một lần kiểm tra kỹ lưỡng hệ thống file. Khi đó, quá trình boot sẽ lâu hơn thường lệ và có thông báo trên màn hình.

V.1-Kiểm tra các badblocks.

Badblock là những block bị hỏng vật lý, dữ liệu không ghi được vào đó hoặc ghi bị sai. Vì vậy định kỳ cần kiểm tra, đánh dấu các badblock để hệ điều hành biết, không ghi dữ liệu vào đó nữa (nhất là với các ổ cứng cũ).

Có hai lệnh (chạy bằng quyền root):

fsck -c /dev/sda2 (thay sda2 bằng ký hiệu partition cần kiểm tra).

badblocks /dev/sda2

VI. Quyền truy cập file, thư mục và các loại mặt nạ.

(còn tiếp).


Ghi chép về giao diện đồ họa và card màn hình (phần 2)

3. Nhân Linux và driver card màn hình

(tiếp theo phần 1)

3.3-Ảnh phẳng hai chiều (2D computer graphics, 2D acceleration)

Trong những máy tính đầu tiên, việc tạo ảnh trên màn hình do bộ xử lý trung tâm (CPU – Central Processing Unit) dùng bộ nhớ RAM của máy thực hiện song song với việc chạy các phần mềm, do đó chậm. Các card màn hình ra đời với bộ xử lý đồ họa riêng (GPU – Graphic Processing Unit) và RAM đồ họa riêng đã làm tăng tốc (acceleration) việc tạo và hiển thị ảnh trên màn hình. Do đó mới có từ Graphics accelerators (bộ gia tốc đồ họa), hardware acceleration, 3D acceleration và 2D acceleration.

Kiến trúc driver tạo ảnh phẳng đầu tiên trong Linux là XFree86 Acceleration Architecture ( XAA) và vẫn được dùng trong một số version Xserver sau này.

Đến đời Xserver 6.9/7, một kiến trúc mới là EXA được dùng thay thế cho XAA. Điều đặc biệt là cái tên tắt EXA được chính X.Org Foundation định nghĩa là “ acceleration architecture with no well-defined acronym.”, tức là không có định nghĩa rõ ràng EXA là viết tắt của những từ nào.

Sau khi GEM ra đời, Intel cũng xây dựng một kiến trúc driver mới là UXA để các driver màn hình hỗ trợ GEM. Hiện tại, driver card màn hình Intel xf86 -video-intel dùng UXA thay cho EXA.

3.4-Ảnh khối ba chiều (3D computer graphics, 3D acceleration)

OpenGL ( Open G raphics L ibrary) là chuẩn giao diện lập trình ứng dụng (API) cho các phần mềm tạo ảnh phằng và khối, chủ yếu là khối (tương tự Direct3D của Microsoft). Giao diện này gồm hơn 250 lời gọi hàm để tạo các ảnh 3D phức tạp từ các phác thảo hình học.

Mesa3D là bộ phần mềm nguồn mở thực hiện chuẩn OpenGL, được dùng làm lõi (core) cho các driver của X.org.

Direct Rendering Infrastructure ( DRI ) – Hạ tầng tạo ảnh trực tiếp , là giao diện và phần mềm nguồn mở dùng trong X Window System cho phép các phần mềm ứng dụng truy cập trực tiếp đến card màn hình không cần truyền dữ liệu qua X server . Nó được dùng chủ yếu trong Mesa . Các phiên bản cũ còn được gọi là DRI1 để phân biệt với phiên bản mới DRI2 bắt đầu xuất hiện vào đầu năm 2008. Trong thành phần DRI có module Direct Rendering Manager (DRM) và một số thứ khác nữa.

4. Sơ lược về tình hình hiện tại

Như vậy, để thay thế cho các công nghệ cũ của X.org có từ thời XFree86, chỉ từ năm 2008 đến nay, một loạt công nghệ đồ họa mới ra đời và được đưa vào ứng dụng theo hướng chuyển các chức năng đồ họa từ Xserver vào kernel:

  • Đầu tiên là nhân Linux có bộ quản lý bộ nhớ card màn hình GEM.

  • Do có GEM nên việc đặt độ phân giải và chiều sâu màu màn hình giao cho nhân (kernel modesetting).

  • Kiến trúc driver màn hình cũng thay đổi liên tục từ XAA → EXA → UXA.

  • Hạ tầng tạo ảnh DRI cũng chuyển từ DRI1 sang DRI2.

Tuy nhiên, trong giai đoạn giao thời, cái mới và cũ đan xen nhau lẫn lộn, phần do cái mới còn có lỗi, chưa hoàn chỉnh, phần khác các driver cho các card màn hình cũ chưa thể viết lại để áp dụng công nghệ mới.

Đan xen ở đây có nghĩa:

  • Một bản Linux có thể quyết định dùng một phần hay toàn bộ, dùng cả hai công nghệ mới và cũ cho từng trường hợp cụ thể. Ví dụ Ubuntu 10.04 tắt kernel modesetting với driver i915, nhưng trong thực tế một số card cũ lại phải bật nó lên. Mandriva 2010.1 Beta2 không rõ dùng công nghệ nào nhưng cài lên máy có card Intel cũ vẫn trơn tru không phải tác động gì.

  • Các driver màn hình đời mới nhất có thể không dùng được nếu không khớp với các công nghệ được chọn trong bản Linux (ví dụ driver chính hãng NVIDIA với Ubuntu 10.04). Khi đó phải dùng driver cũ hơn.

4.1-Card màn hình Intel.

Intel là hãng hăng hái đi đầu trong phần mềm nguồn mở. Các driver do hãng phát triển đều là PMNM nằm trong dự án X.org. Theo thông tin ở đây :

  • Tháng 11/2007, driver Intel 2.2.0 chính thức bỏ XAA thay bằng EXA.

  • Tháng 10/2008, driver Intel 2.5.0 bắt đầu hỗ trợ GEM và kernel modesetting nhưng vẫn dùng EXA.

  • Tháng 7/2009, driver Intel 2.8.0 chính thức bỏ XAA/EXA chỉ hỗ trợ UXA.

  • Tháng 1/2010, driver Intel 2.10.0 bỏ user modesetting chỉ dùng kernel modesetting.

  • Tháng 4/2010, driver Intel ra bản mới nhất là xf86-video-intel 2.11.0

Chỉ cần nhìn các mốc thời gian cũng thấy giai đoạn gần đây driver thay đổi nhanh đến thế nào. Và vì vậy các trục trặc là không tránh khỏi.

Trong Mandriva 2010.1, driver Intel có tên là x11-driver-video-intel. Trong Ubuntu 10.04 là xserver-xorg-video-intel 2.9.1 đều cùng từ xf86-video-intel.

Intel đi tiên phong nên cũng gặp nhiều rắc rối như đã nói ở đây.

4.2-Card màn hình AMD/ATI

Từ năm 2004, ATI thuê chuyên gia Linux viết driver fglrx vừa nguồn mở vừa nguồn đóng. Driver này chất lượng không tốt, còn nhiều lỗi. Hiện nay, ATI Linux driver có tên là ATI Catalyst như Windows.

Driver nguồn mở của ATI hiện có:

  • Radeon (xf86-video-ati) dành cho các card Radeon 7000 đến Radeon HD 4890, FireGL, FireMV, FirePro and FireStream. Trong Ubuntu, driver này có tên là xserver-xorg-video-radeon. Hỗ trợ EXA, KMS, DRI2.

  • Radeonhd do Novell viết dành cho các card r5xx và mới hơn. Trong kho Ubuntu, driver này có tên xserver-xorg-video-radeonhd và danh sách các card hỗ trợ đi kèm. Mandriva có x11-driver-video-radeonhd.

  • R128 driver cổ từ thời XFree86 dành cho các card Rage 128.

  • Mach64 dành cho các card March64.

Trong kho Ubuntu có gói xserver-xorg-video-ati. Khi cài gói này, tùy theo card hiện có nó sẽ cài một trong các driver nguồn mở nói trên.

4.3-Card màn hình NVIDIA.

Nvidia cung cấp hồ sơ kỹ thuật về card cho X.org phát triển driver nguồn mở nv (xserver-xorg-video-nv trong Ubuntu). Driver này chỉ có 2D, không 3D. Nhưng từ 3/2010, Nvidia tuyên bố ngừng hỗ trợ nv.

Nouveau là driver nguồn mở dành cho card Nvidia (Riva, TNT, GeForce, and Quadro) có hỗ trợ 3D nhưng viết dựa trên kỹ thuật “dò ngược – reverse engineering”, không phải dựa trên hồ sơ do Nvidia cung cấp. Dự án này còn mới, chưa hoàn thiện, được Fedora 11, Mandriva 2010.1 (x11-driver-video-nouveau) và Ubuntu 10.04 (xserver-xorg-video-nouveau có ghi chú là experimental) dùng làm driver mặc định .

Nvidia tự phát triển riêng một driver nvidia nguồn đóng, tải về tại đây. Danh sách các card dùng driver đó có tại địa chỉ trên. Tài liệu hướng dẫn khá dài xem ở đây. Nhưng ngay tại trang download, Nvidia khuyến nghị rằng “ Nhiều bản Linux cung cấp driver NVIDIA theo dạng đóng gói riêng. Nó sẽ tương tác tốt hơn với bản Linux đó vì vậy nên dùng nó hơn là dùng gói phần mềm chính thức”

Ví dụ Ubuntu cài driver nguồn đóng này từ System → Administration → Hardware Drivers. Mandriva có trong kho  x11-driver-video-nvidia-current

Ghi chép về giao diện đồ họa và card màn hình (phần 1)

Ghi chép về giao diện đồ họa và card màn hình (phần 1).

(Gần đây thấy nhức đầu về card màn hình trong các bản Linux. Mời cụ Gúc một bữa nhậu, được cụ chỉ bảo cho những điều dưới đây).

1. Giao diện:

Con người là một cái máy tính sống do Đấng Tối cao (Chúa, Thượng đế, Tự nhiên,… tùy theo tôn giáo) chế tạo ra. Năm giác quan (với một số người có cả giác quan thứ sáu)của con người nhận tín hiệu (âm thanh, hình ảnh, mùi vị, …), dịch thành các xung thần kinh mà não hiểu được, não sẽ đưa các input đó vào các chương trình được cài sẵn (bản năng) hoặc do ta tự cài sau này (kinh nghiệm cuộc sống, học tập) phản ứng lại với các tín hiệu đó và trả kết quả với môi trường và xã hội.

Thế giới bên ngoài của máy tính chủ yếu là người sử dụng nó. Máy tính có hai giác quan chính là bàn phím và chuột, đôi khi có thêm mắt (webcam) và tai (microphone), cũng cần một phần mềm để tiếp nhận các lệnh của người dùng (một phím được gõ, một cú kích chuột, v.v…), dịch thành các lệnh mà bộ não của nó (processor) hiểu được, thực hiện lệnh đó và trả kết quả về cho người dùng (hiển thị kết quả lên màn hình, phát ra loa, v.v….)

Phần mềm giao diện đóng vai trò người phiên dịch giữa máy và người: tiếp nhận và dịch lệnh của người cho máy rồi lại nhận kết quả từ máy và dịch ra dưới dạng người hiểu được. Có mấy loại giao diện chính:

  • Giao diện dòng lệnh ( Command line interfaces ): phần mềm vỏ (shell, hiện phổ biến nhất là bash – Bourne Again Shell) thực hiện giao diện này. Khi ta mở terminal gõ một lệnh nào đó, bash dịch lệnh đó rồi chuyển cho hệ điều hành thực hiện và báo kết quả lên màn hình terminal (nếu có).

  • Giao diện đồ họa ( Graphical user interfaces GUI ): cái màn hình màu sắc với icons, menu, windows mà ta nhìn thấy hàng ngày. Đó là đối tượng chính của bài viết này.

  • Giao diện web ( web user interfaces – WUI): Gmail, Yahoo Mail chẳng hạn dùng giao diện này và tương lai khi điện toán đám mây phát triển nó sẽ là giao diện thống trị trên các máy tính cá nhân.

2. Giao diện đồ họa trong Linux, Unix

Giao diện (nói chung) trong Linux gồm 2 lớp. Lớp trên cùng mà người dùng nhìn thấy ( user graphic interfaces) là KDE, GNOME, Xfce, …Lớp này còn một số thứ linh tinh nữa nên thường được gọi là desktop environment mà tôi dịch là môi trường đồ họa. Lớp giữa, trung gian giữa user graphic interfaces với nhân Linux là X Windows System.

X Windows System (còn gọi là X hoặc X11) gồm một bộ phần mềm và các giao thức mạng cung cấp giao diện đồ họa cơ bản nhất (và do đó cũng sơ khai nhất) cho các máy tính (kể cả qua mạng). Phiên bản mới nhất là X11R75 (X11 Release 7.5).

X hoạt động theo mô hình client – server. Một máy chủ X server chạy trong máy tính, nhận lệnh và trả kết quả ra màn hình. Các chương trình khách quản lý (driver) bàn phím, chuột, màn hình cảm ứng của máy đó hoặc các chương trình truy cập từ xa của các máy khác trên mạng truyền lệnh cho X server.

Tổ chức X.Org Foundation chịu trách nhiệm phát triển các phiên bản X Server. Vì vậy X Server thường được gọi là X.Org Server hoặc Xorg Server. Trong thành phần của Xorg Server có phần mềm X server và các driver của bàn phím, card màn hình, chuột. Tên các gói phần mềm liên quan thường có cụm xserver-xorg (Ubuntu). Ví dụ driver của chuột là xserver-xorg-input-mouse, driver card màn hình Intel i8xx và i9xx là xserver-xorg-video-intel.

Trước đây (trước 2004), X Server có tên là XFree86 Server, vì vậy một số gói phần mềm trong X Server hiện vẫn có cụm từ xf86.

Dưới đây ta gọi tắt là Xserver và quan tâm chính đến quan hệ của nó với bàn phím, chuột, màn hình, đặc biệt là màn hình và các card màn hình.

Trước đây, Xserver điều hành chuột, bàn phím, màn hình và cấu hình 3 thứ đó ghi trong file /etc/X11/xorg.conf (xem thêm tại đây ). Gần đây, chức năng đó chuyển cho nhân Linux (kernel) nên từ Ubuntu 9.10 không còn file xorg.conf nữa, Mandriva 2010.1 thì vẫn còn.

3. Nhân Linux và driver card màn hình

Trong thập niên vừa qua, card màn hình (rời hoặc onboard) ngày càng mạnh hơn, có thể chạy được các ứng dụng 3D như game và thiết kế. Nhưng các ứng dụng chủ yếu vẫn là 2D và dùng các card hiện đại đó vẫn như cách dùng các card đời cũ, nghĩa là không hiệu quả.

Đặc biệt với Linux thì hệ thống xử lý đồ họa còn nhiều khiếm khuyết, ngay cả với các card cũ.

Ví dụ: Mỗi driver Xorg quản lý bộ nhớ card màn hình theo cách riêng và khi cần đến 3D thì dùng DRI. DRI ( Direct Rendering Infrastructure) là phần mềm giao diện cho phép ứng dụng truy cập trực tiếp với card màn hình không qua X server để tạo gia tốc phần cứng cho các ứng dụng OpenGL. Driver cũng chịu trách nhiệm thiết lập độ phân giải và chiều sâu màu màn hình (gọi là modesetting ), việc đó là không tối ưu vì kernel đã thực hiện modesetting lúc khởi động rồi. Và còn nhiều bất cập khác.

Trong những năm gần đây, đã có nhiều cố gắng hiện đại hóa việc xử lý đồ họa của Linux để có thể sử dụng được toàn bộ sức mạnh của các card màn hình hiện tại và tương lai. Một loạt vấn đề được xây dựng mới: gia tốc 2D, 3D, quản lý bộ nhớ, hạ tầng tô màu, v.v… vì vậy có nhiều đổi mới nhưng cũng nhiều trục trặc do mọi thứ đều còn quá mới.

Khuynh hướng chung là chuyển việc quản lý đồ họa từ Xserver sang nhân Linux (Linux kernel).

3.1-Bộ quản lý bộ nhớ card màn hình trong nhân Linux

Điều kiện tiên quyết để Linux kernel có thể quản lý đồ họa là nó phải quản lý được bộ nhớ của card màn hình.

Cuối năm 2008, phiên bản nhân Linux 2.6.28 bắt đầu đưa vào dùng một bộ phận quan trọng: bộ quản lý bộ nhớ card màn hình gọi là GEM (Graphic Execution Manager) làm tăng tốc độ xử lý đồ họa lên tới 50%.

Trước GEM, đã có một bộ quản lý bộ nhớ màn hình gọi là TTM do Tungsten Graphics viết, nhưng quá phức tạp. GEM, do Intel xây dựng, được coi là một phiên bản nhỏ hơn, đơn giản hơn của TTM nhưng chỉ phù hợp nhất với các card màn hình Intel. Vì vậy các card NVIDIA và ATI hiện nay dùng bộ quản lý GEM-ified TTM : bên trong là TTM, giao diện là GEM. Bản thân GEM cũng đang được mở rộng để hỗ trợ các card khác.

Việc quản lý tốt bộ nhớ card màn hình bởi GEM cho phép đưa vào hàng loạt cải tiến khác về xử lý đồ họa: Kernel Modesettings, DRI2, UXA . Hệ thống xử lý đồ họa trong Linux bắt đầu được thống nhất và ăn khớp với nhau một cách tối ưu.

3.2-Độ phân giải màn hình và chiều sâu màu màn hình

Việc đặt độ phân giải (screen resolution) và chiều sâu màu (color depth) màn hình, được gọi là mode settings , là rất quan trọng để các màn hình đồ họa hiển thị đúng.

Nếu modesetting chỉ sai nhẹ, hình và chữ bị phóng to, không sắc nét, màu nhợt nhạt. Nếu sai nặng, màn hình đồ họa sẽ không xuất hiện và chỉ có “màn hình xanh tang tóc – blue screen of death” đối với Windows và “màn hình đen tang tóc – black screen of death” đối với Linux.

Với Linux, trước 2008, modesetting do Xserver thực hiện. Từ khi có GEM, việc này mới bắt đầu chuyển cho kernel đảm nhận ( kernel mode setting – KMS ) .

Điều rắc rối với Linux hiện tại là không phải tất cả các driver card màn hình đã kịp hỗ trợ tốt tính năng mới này.

Từ kernel 2.6.29 (3/2009), KMS hỗ trợ các card Intel đời mới GMA. Nhưng các card GM đời cũ thì cái có cái không. Vì vậy Ubuntu 10.04 tắt KMS đối với các card Intel dùng driver i915, nhưng có trường hợp lại phải bật nó lên (xem thêm ở đâyở đây).

Card ATI Radeon trước R600 được KMS hỗ trợ từ kernel 2.6.31, card R600, R700 từ kernel 2.6.32.

NVIDIA không chịu công bố các tính năng kỹ thuật của card để giữ bí mật thương mại và tự viết driver cho Linux, miễn phí nhưng nguồn đóng. Driver này lại trục trặc với Ubuntu 10.04. Các nhà lập trình nguồn mở dùng kỹ thuật “ dò ngược – reverse engineering” để viết driver nguồn mở Nouveau cho card NVIDIA và đưa vào kernel 2.6.33.

Như vậy hiện nay có hai hệ thống mode settings có thể kích hoạt tùy theo từng loại card màn hình cụ thể: hệ thống cũ dùng Xserver và hệ thống mới dùng kernel.

Ghi chép về bảo mật Gmail (và các webmail khác)

Ghi chép về bảo mật cho Gmail (và các webmail khác).

( Tiếp theo bài Ghi chép về mã hóa, một số khái niệm về mã hóa cần xem trước trong bài đó)

Gửi, nhận email hoặc dùng webmail (Gmail, Yahoo Mail, …) hoặc dùng một phần mềm email client (KMail, Evolution, Thunderbird, Outlook, Outlook Express, …). Bảo mật cho chúng về cơ bản vẫn là mã hóa và chữ ký số với các công cụ như đã nói ở bài trước.

1. Bảo mật cho webmail

a- Bảo mật cho mật khẩu

Nếu người khác biết hoặc lấy được mật khẩu hộp thư của bạn, họ sẽ dễ dàng xem trộm thư, gửi thư mang tên bạn. Vì vậy mật khẩu là cái cần bảo vệ đầu tiên.

Gmail, Yahoo Mail và Hotmail đều có chế độ đăng nhập https://, tức là mã hóa, bảo mật được mật khẩu truyền từ trình duyệt lên máy chủ mail. Nếu mật khẩu truyền đi không mã hóa (http://), nó dễ dàng bị xem trộm dọc đường truyền.

Mật khẩu có thể bị xem trộm ngay trên máy của bạn. Mật khẩu khi lưu trong settings của trình duyệt (nếu chọn chế độ nhớ mật khẩu) có thể bị đọc trộm bởi người (dùng các cách đã nói ở đây) hoặc bởi spyware nếu không chọn chế độ lưu dùng master password. Khi gõ mật khẩu, phần mềm trojan lẩn trong máy trạm có thể ghi lại được và gửi về cho hacker. Vì vậy tốt nhất là không chọn chế độ lưu mật khẩu và tránh các phần mềm có thể bị cài trojan như đã nói ở đây.

b- Bảo mật cho thư trên đường truyền từ máy trạm đến máy chủ thư.

Gmail có thể thiết lập trong settings để luôn làm việc với https, kể cả khi nhận và gửi thư, tức là thư gửi từ trình duyệt lên máy chủ Gmail và nhận từ máy chủ về đều được mã hóa trên đường truyền giữa trình duyệt và máy chủ. Yahoo Mail và Hotmail khi đăng nhập dùng https, khi vào đến màn hình thư lại chuyển sang chế độ http. Như vậy, thư gửi/nhận giữa trình duyệt và máy chủ không được mã hóa (?).

c- Bảo mật cho thư tại máy chủ thư và truyền đi nơi khác.

Không ai biết thư gửi từ máy chủ các dịch vụ mail đó đến máy chủ nơi nhận có được mã hóa hay không. Nếu không, tức là thư có thể bị xem trộm trên đường truyền giữa các máy chủ mail gửi và nhận.

Thư lưu trên máy chủ của Gmail chắc chắn là dưới dạng không mã hóa vì Gmail dùng phần mềm scan nội dung thư của khách hàng, tìm ra các từ khóa để có thể cho hiện các nội dung quảng cáo phù hợp ở bên phải màn hình thư. Yahoo Mail và Hotmail chắc cũng thế. Đây là cái giá bạn trả cho các dịch vụ miễn phí: cho phép phần mềm đọc thư của bạn. Nhưng như vậy, về nguyên tắc, nhân viên của Gmail cũng có thể đọc thư của bạn.

Vì thư lưu không mã hóa, nếu hacker xâm nhập được vào máy chủ thư (như đã xẩy ra với Gmail và với hệ thống thư của bộ Quốc phòng Mỹ gần đây), chúng sẽ dễ dàng sao chép và đọc thư. Không có máy chủ nào, ngay cả của bộ Quốc phòng Mỹ, có thể đảm bảo là không bị hack.

d- Thư mạo danh hoặc bị thay đổi nội dung

Điểm yếu cuối cùng là các thư của các dịch vụ nói trên đều không có chữ ký số. Vì vậy không có gì để xác định thư gửi từ zxc232@Gmail.com có đúng là từ đó gửi đi không và còn nguyên bản không. Thư không có chữ ký số rất có thể là một thư mạo danh hoặc đã bị thay đổi nội dung trên đường truyền.

2. FireGPG

Hai extension của Firefox: FireGPGgWebs MailCloak cho phép ký và mã hóa các webmail. FireGPG tích hợp vào Gmail nhưng cũng có thể dùng cho các webmail khác, chạy được trên Windows, Linux và MacOS. MailCloak dùng được cho cả Gmail, Yahoo Mail và Hotmail, không có bản cho Linux và vẫn còn trong giai đoạn thử nghiệm.

Khi đã ký và mã hóa được thư thì các nhược điểm nói ở trên của webmail sẽ được khắc phục hoàn toàn.

FireGPG dựa trên phần mềm nguồn mở GPG (xem giải thích tại đây) để: mã hóa, giải mã, ký và kiểm tra chữ ký đối với thư Gmail.

Để cài, mở trang này (bản trong kho của Firefox có lỗi), nhấn vào nút Download FireGPG. Khi xuất hiện cảnh báo ở đầu trang “ Firefox prevented this site …” nhấn vào nút Allow để cho phép cài.

CHÚ Ý: FireGPG cập nhật không kịp với Firefox. Bản trên trang chủ là FireGPG 0.7.10 (thời điểm viết bài này) tôi thử làm việc tốt với OpenSUSE 11.2, Firefox 3.5.9 và Linux Mint 8, Firefox 3.5.8. Các bản Linux mới hơn với Firefox 3.6 đều bị báo lỗi, nhưng vẫn có cách sử dụng được.

a- Tạo bộ khóa mã mới.

Nếu trên máy chưa có bộ khóa mã nào thì cần tạo mới một bộ. Cách tạo dưới đây dùng FireGPG nhưng cũng có thể dùng các phần mềm khác như Seahorse, Kleopatra.

Cài xong FireGPG, khởi động lại Firefox sẽ xuất hiện màn hình hướng dẫn từng bước. Nhấn vào nút Next đi tới màn hình sau:

Màn hình trên cho biết trên máy bạn đã có cài phần mềm GnuPG. Thư mục mặc định để lưu các khóa mã là thư mục Home của bạn. Nếu muốn bảo vệ khóa kín đáo hơn, có thể nhấn vào Set a home dir để quy định một thư mục khác. Nhấn tiếp vào Next.


Hệ thống mã hóa PGP làm việc với một cặp khóa: khóa mã bí mật (private key) và khóa mã công khai (public key). Hình trên thông báo bạn chưa có khóa bí mật nào trong vòng chìa khóa (keyring) và đưa ra hai cách: Tạo một cặp khóa (Generate a private key and a public key) hoặc Nhập một khóa bí mật đã có sẵn dưới dạng một file nằm trong một thư mục trên máy của bạn (Import a private key).

Nhấn vào Generate để tạo mới một cặp khóa, màn hình sau xuất hiện:


Trong màn hình trên, lần lượt nhập tên, địa chỉ email, password. Tuổi thọ của cặp khóa có thể là vô hạn (đánh dấu chọn The key never expires) hoặc hữu hạn (nhập số năm, tháng, ngày vào ô Key expires in …).

Phải biết password đã khai ở trên mới sử dụng được private key sau này.

Nếu chọn mục Advanced options, còn có thể quy định chiều dài khóa Key length (1024, 2048 và 4096 bit, càng dài càng khó phá) và kiểu khóa (thuật toán) Key type: DSA (chữ ký số) và El Gamal (mã hóa dùng hai khóa) hoặc RSA (mã hóa dùng hai khóa). Mặc định khóa dài 2048 bit và dùng cặp thuật toán DSA & El Gamal.

Nhấn vào nút Generate key để bắt đầu tạo cặp khóa. Việc này phải mất một lúc, có thể làm treo Firefox và liệt luôn cả máy tính (tạm thời). Trong lúc đó nên làm một việc gì khác trên máy để tăng tính ngẫu nhiên cho khóa.

Khi khóa được tạo xong, màn hình sau xuất hiện:

Nhấn nút OK, màn hình sau xuất hiện:

Hàng chữ đỏ bên trên cho biết FireGPG chưa kết nối được với máy chủ gửi thư của Gmail (smtp.gmail.com). Trong các phần dưới cho biết kết nối được mã hóa (Use SSL) và dùng cổng 465. Nếu muốn có thể quy định một máy chủ gửi thư khác.

Nhấn nút Next đi tới màn hình sau:

Màn hình này cho biết đã kết nối được với máy chủ gửi thư (SMTP server). Có thể chọn sẵn một số option mặc định ở đây.


Màn hình trên chọn sẵn một số option chung của FireGPG. Để nguyên rồi nhấn Next đến màn hình kết thúc.


b-Gửi khóa công khai

Người giao dịch cần có khóa công khai của bạn để:

  • Mã hóa thư gửi cho bạn.

  • Kiểm tra chữ ký của bạn trong thư bạn gửi cho họ.

Vì vậy cần có một cách nào đó gửi khóa công khai cho họ. Trong màn hình Key manager trên:

Export to server: xuất khóa công khai của bạn lên máy chủ khóa (key server) pgp.mit.edu để ai cần mã hóa văn bản gửi cho bạn hoặc kiểm tra chữ ký của bạn cũng có thể lấy được khóa đó.

Export to file: xuất khóa công khai (public key) thành một file rồi gửi kèm file đó theo thư cho người cần đến. Nhấn vào nút này, màn hình sau xuất hiện:

Quy định tên file và thư mục chứa file rồi nhấn nút Save.

c- Viết thư có chữ ký số hoặc mã hóa thư.

Hình dưới đây là màn hình soạn thảo thư của Gmail sau khi đã cài FireGPG.

Nếu FireGPG tích hợp tốt với Gmail không bị báo lỗi thì sẽ xuất hiện các chức năng như trong hình trên: Sign (ký số vào thư), Encrypt (mã hóa thư), Encrypt a file and attach (mã hóa một file đính kèm), With a signature (mã hóa, ký một file đính kèm),..

Nếu bị báo lỗi ở đáy màn hình khi soạn thư “Gmail support seems broken” thì các tính năng trên không xuất hiện nhưng vẫn dùng được bằng cách khác, thủ công hơn. Các webmail khác (Yahoo, Hotmail, …) không được tích hợp FireGPG nên cũng không xuất hiện các chức năng trên nhưng vẫn làm thủ công được.

Ký thư bằng chữ ký số: nhấn vào chữ Sign, biểu tượng bên trái đang từ mờ sẽ được tô màu vàng. Nhấn nút Send để gửi thư đi. Một màn hình xuất hiện cho chọn private key (nếu bạn có nhiều cái), sau khi chọn màn hình thứ hai xuất hiện yêu cầu nhập passphrase, nhập password đã khai ở phần trước rồi OK, thư sẽ được gửi đi.

Nơi nhận sẽ nhận được thư kèm chữ ký số. Cách kiểm tra chữ ký xem phần sau.

Mã hóa thư gửi đi: Để mã hóa thư gửi cho ai đó, trước hết phải có public key của người đó.

Public key đó có thể được người nhận gửi đến cho bạn dưới dạng một file kèm theo email. Download file key đó, ghi nó vào một thư mục nào đó rồi dùng chức năng Import from file của Key Manager nhập khóa vào keyring. Để mở Key Manager: trong Firefox vào menu Tools -> FireGPG -> Key Manager.

Nếu người nhận đã gửi public key của mình lên một trong những máy chủ khóa (key server), trong màn hình Key Manager, nhấn vào Import from server ta có màn hình sau:

Gõ vào ô Search tên người nhận rồi nhấn nút Search. Các khóa tìm được sẽ xuất hiện (một người có thể có nhiều khóa), chọn những cái cần rồi nhấn nút Import selected keys để nhập chúng vào keyring trên máy của bạn.

Sau khi viết thư xong: nhấn vào chữ Encrypt, biểu tượng bên trái thành màu vàng. Nhấn nút Send, quá trình lặp lại như trên.

Nếu FireGPG có lỗi không hiển thị được chữ Encrypt trong Gmail, hay trong các webmail khác mà FireGPG không được tích hợp, vẫn mã hóa được mail làm như sau:

Bôi đen nội dung thư cần mã hóa, nhấn phím phải chuột vào vùng bôi đen rồi chọn trong menu con FireGPG → Encrypt. Một màn hình xuất hiện để chọn public key của người nhận. Chọn xong nhấn OK, màn hình sau xuất hiện:

Nhấn nút Copy to clipboard and close rồi quay lại màn hình soạn thư, nhấn phím phải chuột và chọn Paste. Toàn bộ nội dung đã mã hóa ở trên sẽ được dán đè lên nội dung thư đã soạn. Nhấn nút Send để gửi thư đi.

Trên đây chỉ lướt qua cách dùng đơn giản. FireGPG còn nhiều tính năng và cách dùng hay.

Update (9/6/2010): FireGPG vừa ra phiên bản cuối 0.8 và tác giả tuyên bố bỏ tính năng tích hợp với Gmail và ngừng phát triển tiếp vì không có thời gian. Trừ phần tích hợp với Gmail, các tính năng nói trên vẫn sử dụng được kể cả với Gmail nhưng phải làm thủ công hơn như đã nêu.

3. Hushmail

Hushmail là một dịch vụ thư miễn phí khắc phục được phần nào các nhược điểm bảo mật đã nêu ở mục 1 và cách dùng cũng đơn giản hơn FireGPG (kiếm tiền bằng dịch vụ Premium):

  • Hushmail mã hóa thư trên đường truyền giữa máy trạm và máy chủ theo giao thức https.

  • Thư lưu trên ổ cứng máy chủ Hushmail cũng được mã hóa. Do đó không ai đọc được thư đó, kể cả hacker.

  • Thư gửi giữa một địa chỉ Hushmail này cho một địa chỉ Hushmail khác được mã hóa cả nội dung thư và file đính kèm. Như vậy thư trao đổi giữa hai địa chỉ Hushmail thì an toàn, nhưng gửi ra ngoài hoặc nhận từ ngoài Hushmail vào thì không.

  • Thư gửi từ Hushmail có chữ ký số, tránh được thư mạo danh.

Các trường hợp sau thì Hushmail cũng không an toàn:

  • Các thư phạm pháp có lệnh của tòa án Canada buộc Hushmail tiết lộ nội dung cho cơ quan điều tra.

  • Hacker chiếm quyền điều khiển máy chủ Hushmail, dùng phần mềm mã hóa để giải mã thư. (Nếu hacker chỉ xâm nhập máy chủ Hushmail thì không copy hoặc đọc thư được).

  • Máy tính của bạn bị nhiễm virus (key logger) hoặc bị hacker điều khiển.

  • Có lỗ hổng an ninh trong các phần mềm của Hushmail hoặc phần mềm trên máy tính của bạn để hacker lợi dụng.

(còn tiếp về các email client: Kmail, Evolution, Thunderbird,…)

Ghi chép về mã hóa (sửa, bổ xung)

Ghi chép về mã hóa.

(Mọi bản ghi chép công bố trên blog này đều là ghi chép cá nhân nhặt nhạnh trên Internet để tìm hiểu sâu hơn đôi chút một vấn đề. Thông tin trong đó có thể sai theo hiểu biết hạn chế của tác giả.)

Mã hóa là gì

Xét ví dụ một bảng mã hóa (mật mã) đơn giản, các chữ cái chuyển thành một cặp số cột – hàng:

1

2

3

4

5

1

A

B

C

D

E

2

F

G

H

I/J

K

3

L

M

N

O

P

4

Q

R

S

T

U

5

V

W

X

Y

Z

Theo bảng này, từ “TAN CONG” sẽ được mã hóa (encryption) là: 44 11 33 31 43 33 22. Dãy số này được gọi là mật mã của từ TAN CONG.

Người không có bảng mã trên, đọc hàng số đó sẽ không hiểu gì. Người có bảng mã sẽ giải mã (decryption) được hàng số đó thành từ “tan cong”. Bảng mã nói trên là một dạng thuật toán mã hóa.

Mã hóa là việc dùng một thuật toán mã hóa và một hoặc nhiều khóa mã biến đổi thông tin có nghĩa (plaintext – văn bản) thành chuỗi ký tự vô nghĩa (ciphertext – mật mã). Chỉ những người biết thuật toán và có khóa mã mới giải mã thông tin đã mã hóa thành thông tin có nghĩa.

Hệ thống mã hóa: gồm thuật toán (hàm toán học) để mã hóa, các khóa mã và các thủ tục (protocol) để thực hiện quá trình mã hóa.

Mã hóa “mạnh” và “yếu”: mã hóa được chia thành 2 loại. Mã hóa yếu chỉ có mục đích hạn chế người bình thường không đọc được nội dung, mã hóa mạnh thì ngay cả các siêu máy tính có thể phải mất hàng chục năm hay lâu hơn mới phá mã được nếu không có khóa mã.

Mã hóa dùng một khóa mã bí mật (symmetric key technique)

Trong kỹ thuật mã hóa này, người gửi và người nhận thông tin có cùng một khóa mã duy nhất. Người gửi dùng khóa mã, mã hóa thông tin rồi gửi đi. Người nhận dùng cũng khóa mã đó để giải mã thông tin và đọc.

Vì chỉ có một khóa mã và dùng chung nên kỹ thuật mã này còn có nhiều tên khác nhau như : symmetric-key, secret-key, single-key, shared-key, one-key, và private-key. Dưới đây ta sẽ gọi là khóa chung.

Hình 2.1: Mã hóa dùng một khóa mã bí mật

Loại khóa này tương tự như những khóa thông thường chỉ có một chìa. Chỉ có thể đóng, mở khóa bằng những chìa giống hệt nhau.

Chuẩn mã hóa quốc gia đầu tiên của Mỹ (và cũng được sử dụng rộng rãi trên toàn thế giới) là DES (Data Encryption Standard) dùng khóa mã đối xứng dài 56 bit. Sau khi được công bố năm 1976, đến năm 1999 mật mã này bị phá trong 22 giờ 15 phút, dùng cách vét cạn (brute force): dò thử tất cả 70,000,000,000,000,000 tổ hợp ký tự của khóa 56 bit.

Về nguyên tắc để dò một số lượng lớn khóa mã như vậy phải có một siêu máy tính cực nhanh. Tuy nhiên năm 1997, dự án DESCHALL Project dùng thời gian rỗi của hàng nghìn máy tính trên Internet đã phá được DES, dành giải thưởng $10,000 của RSA Security .

Hiện nay, DES được coi là không đủ an toàn và thay bằng AES (Advanced Encryption Standard) công bố năm 2002 với khóa mã dài 128, 192 hoặc 256 bit. Ngoài ra còn các chuẩn mã hóa một khóa khác như Twofish, Serpent, AES (Rijndael), Blowfish, CAST5, RC4, TDES, IDEA.

Ưu nhược điểm: nhanh, rất phù hợp nếu thông tin mã hóa không phải chuyển đi đâu (chỉ dùng cho một người).

Nếu thông tin mã hóa phải chuyển qua mạng cho một người thứ hai đọc, nhất là trên khoảng cách xa, khó khăn chính là phải chuyển được khóa mã cho người nhận một cách bí mật (phân phối khóa). Nếu trong quá trình chuyển khóa mã, một bên thứ ba có thể sao chép được khóa mã đó thì họ cũng có thể chặn bắt thông tin đã mã hóa và dùng khóa mã giải mã dễ dàng.

Mã hóa dùng hai khóa mã: khóa mã công khai và khóa mã bí mật. (asymmetric key techniques)

Để tránh được nhược điểm về phân phối khóa nói trên người ta dùng phương thức mã hóa có hai khóa mã (còn gọi là mã hóa không đối xứng – asymmetric key techniques) mới xuất hiện năm 1975.

Loại mã hóa này có hai khóa mã: một khóa mã công khai (public key) dùng để mã hóa và một khóa bí mật (private key) dùng giải mã.

Xét ví dụ tương tự: A định gửi một bức thư mật cho B. Các bước tiến hành như sau:

  • A yêu cầu B gửi chìa khóa công khai của B đến cho A. Vì là chìa công khai nên B có thể gửi qua bưu điện, nhờ người khác, thậm chí treo ở một nơi công cộng v.v… mà không cần giữ bí mật.

  • A viết thư, bỏ vào một cái hòm có hai chìa khóa khác nhau. Chìa công khai của B được dùng để khóa hòm đó lại rồi hòm được gửi qua bưu điện.

  • Chìa công khai của B, ai cũng có thể có một bản sao nhưng chìa công khai chỉ dùng để khóa, không dùng mở được. Do đó trên đường vận chuyển, người thứ ba không mở được.

  • B nhận được hòm, dùng chìa khóa bí mật của B để mở hòm. Khi đã khóa bằng chìa công khai của B thì chỉ có thể mở được bằng chìa bí mật của B, người khác không có chìa bí mật này không thể mở được.

Hình 3.1: Mã hóa dùng khóa công khai và khóa bí mật

Điểm hay của cách làm này là cái khóa mã công khai không cần dấu diếm. Cách làm tương tự khi muốn nhận email bí mật như sau:

  • B dùng phần mềm tạo ra một bộ khóa mã riêng cho mình gồm một khóa công khai (public key) và một khóa bí mật (private key). Bộ khóa mã này gắn liền với một địa chỉ email của B.

  • Khóa bí mật được cất giữ cẩn thận trên máy tính của B. Khóa công khai có thể gửi kèm theo email cho A hoặc gửi vào một máy chủ công cộng trên Internet kèm theo địa chỉ email, bất kỳ ai muốn gửi mật thư cho B đều có thể vào máy chủ đó tải bản sao khóa công khai của B về.

  • Người gửi (A) soạn thư, dùng khóa mã công khai của B để mã hóa bức thư đó rồi gửi cho B. Trên đường truyền dù có ai chặn xem thư cũng không thể đọc được vì thư đã bị mã hóa, không có khóa bí mật không giải mã được.

  • Khi thư đến máy tính của người nhận (B), người nhận dùng khóa mã bí mật và phần mềm giải mã để giải mã bức thư.

Cách mã hóa này có hai ưu điểm:

  • Hai người trao đổi thông tin mật cho nhau không cần có thỏa thuận trước. Nếu một người có địa chỉ email kèm một khóa công khai gửi trên một máy chủ Internet, bất kỳ người nào nếu cần đều có thể tải khóa công khai đó về tạo một mật thư gửi cho địa chỉ email đó, không cần quen biết, thỏa thuận gì trước.

  • Không cần có một phương thức phân phối khóa mã tin cậy và bí mật. Để đàm bảo bí mật, khóa mã kiểu gì cũng phải định kỳ thay đổi. Trước đây, dùng hệ thống mã hóa một khóa, các ngân hàng, bộ ngoại giao phải cử người đi khắp thế giới để giao khóa mã mới rất mất thì giờ và tốn kém.

Thuật toán mã hóa hai khóa phổ biến hiện nay là RSA.

Hàm băm mật mã (Cryptographic Hash function – CHF)

Khái niệm hàm băm (hash function) khác với khái niệm hàm băm mật mã (cryptographic hash function). Dưới đây ta chỉ xét khái niệm thứ hai và gọi tắt là hàm băm.

Định nghĩa: CHF là một thuật toán xác định, áp dụng vào một khối dữ liệu có chiều dài bất kỳ để tính ra được một một chuỗi bit có chiều dài cố định (128 bits,256 bits, …) gọi là trị số băm (hash value) sao cho khi dữ liệu thay đổi dù chỉ một bit thì khi tính lại trị số băm sẽ thay đổi và do đó, mỗi khối dữ liệu sẽ có một trị số băm duy nhất.

Hiểu nôm na, một khối dữ liệu có một trị số băm duy nhất tương tự như số chứng minh với một người. Điểm khác biệt là khi người đó chỉ rụng một sợi tóc thì khi tính lại trị số băm cũng thay đổi.

Tại sao lại dùng từ “băm”: để tính trị số băm, thường dữ liệu được chia nhỏ (băm) ra thành nhiều phần rồi áp dụng một thuật toán tính nào đó.

Một hàm băm lý tưởng sẽ có các tính chất sau:

  • Dễ dàng tính trị số băm với bất kỳ khối dữ liệu nào.

  • Từ trị số băm không thể tính ngược ra khối dữ liệu (hàm một chiều).

  • Không thể thay đổi khối dữ liệu (dù chỉ một bit) mà không làm thay đổi trị số băm.

  • Không thể có hai khối dữ liệu khác nhau mà có cùng một trị số băm.

Dùng làm gì:

  • Xác nhận tính toàn vẹn của dữ liệu sau khi truyền qua mạng: các file cài đặt một bản Linux (iso) được đặt trên Internet kèm theo trị số băm md5. Sau khi tải file về, tính lại md5 của file đã tải, nếu giống với trị số đã cho trước tức là file tải về nguyên vẹn, giống hoàn toàn như file đặt trên Internet, không bị lỗi (thiếu, sai) khi download. Một email, một file được gửi qua mạng cùng với trị số băm ban đầu của nó để người nhận kiểm tra tương tự.

  • Dùng trong chữ ký số (xem phần dưới)

  • Kiểm tra password: một phần mềm tạo ra password rồi lưu giữ không phải dưới dạng nguyên bản đọc được mà dưới dạng trị số băm của password đó (để tránh bị hacker xâm nhập lấy cắp). Khi user khai password, password đó được tính trị số băm và so sánh với trị số đã lưu.

  • ….

Hai hàm băm hiện được dùng rộng rãi là MD5 và SHA-1. SHA-1 là chuẩn của Mỹ và được xem như an toàn hơn MD5.

Chữ ký số (digital signatures)

Một chữ ký số đặt vào một văn bản điện tử cũng có công dụng tương tự như một chữ ký tay vào văn bản giấy:

  • Nó xác nhận rằng văn bản đúng là do người ký phát hành.

  • Người đã ký cũng không thể phủ nhận là mình không phát hành văn bản đó vì chỉ người đó mới có chữ ký số đó. Chữ ký tay có thể bắt chước giả mạo được, nhưng chữ ký số thì không. Cũng không thể tách chữ ký số ra khỏi một văn bản và gán nó vào văn bản khác.

  • Chữ ký số còn một công dụng nữa mà chữ ký tay không có là nó xác thực văn bản gốc vẫn nguyên vẹn không bị sửa đổi trên đường truyền. Văn bản giấy mà bị cạo sửa tinh vi thì chắc phải dùng máy móc chuyên dụng mới phát hiện được.

Hình 5.1: Chữ ký số

Quá trình tạo và kiểm tra chữ ký số cũng dùng kỹ thuật mã hóa hai khóa nhưng ngược với cách mã hóa đã nói ở trên, gồm 3 thuật toán:

  • Một thuật toán tạo khóa tạo ra một cặp khóa bí mật và công khai theo các số ngẫu nhiên như đã mô tả ở trên.

  • Một thuật toán tạo chữ ký số: từ một văn bản và một khóa bí mật tạo ra một chữ ký số và chèn nó vào văn bản. Văn bản trở thành văn bản đã ký. Trong hình bên trái của Hình 5.1, trị số băm của văn bản được tính sau đó mã hóa bằng khóa bí mật của người ký tạo thành chữ ký số của người đó. Nếu dùng dịch vụ chữ ký số của một nhà cung cấp thì có kèm theo một giấy chứng nhận (certificate) của nhà cung cấp đó. Tất cả được chèn vào văn bản tạo thành văn bản đã ký (Digital signed data)

  • Một thuật toán kiểm tra dùng văn bản đã ký, khóa công khai của người ký để xác thực chữ ký đúng là của người ký. Trong hình bên phải của Hình 5.1, từ văn bản đã ký tách riêng phần văn bản và chữ ký. Sau đó tính trị số băm của văn bản, dùng khóa công khai của người ký để giải mã chữ ký số và tách ra trị số băm gốc đã kèm trong chữ ký đó ở bước trên. Nếu hai trị số băm trùng nhau thì chữ ký đúng. (và văn bản đúng nguyên bản gốc không bị thay đổi trên đường truyền).

Hai hệ thống chữ ký số phổ biến hiện nay là RSADSA.


PGP – một hệ thống mã hóa hỗn hợp.

PGP (Pretty Good Privacy) là một hệ thống mã hóa hỗn hợp, kết hợp những ưu điểm của hai hệ thống mã hóa một khóa và hai khóa nêu trên, do Phillip Zimmermann sáng tạo ra năm 1991.

Các bước phần mềm PGP thực hiện:

  • Nén dữ liệu chưa mã hóa lại. Việc nén này làm giảm thời gian truyền qua mạng và tiết kiệm ổ cứng nhưng tác dụng chính là tăng cường an ninh. Phần lớn các kỹ thuật phá mã (cryptanalysis) tìm kiếm các mẫu ký tự giống nhau trong dữ liệu đã mã hóa để dò ra khóa mã. Khi nén, số các mẫu giống nhau đó giảm xuống tối thiểu, sẽ khó dò hơn rất nhiều.

  • Tạo khóa mã bí mật dùng một lần (session key). Khóa mã này là một số ngẫu nhiên được tạo ra dựa trên chuyển động ngẫu nhiên của chuột và các phím ngẫu nhiên đã gõ. (TrueCryp dùng cách tạo khóa này, nhưng không phải dùng một lần, xem ở đây).

  • Mã hóa dữ liệu đã nén: Dùng khóa mã vừa tạo và một thuật toán mã hóa một khóa nhanh và tin cậy để mã hóa dữ liệu đã nén. Kết quả là dữ liệu được mã hóa (từ plaintext thành cyphertext). Để giải mã cũng vẫn dùng session key. Hai bước 2,3 dữ liệu được mã hóa bằng kỹ thuật mã hóa một khóa bí mật đã nói ở trên.

  • Mã hóa khóa mã session key: dùng khóa công khai của người nhận (public key) để mã hóa khóa bí mật dùng một lần (session key). Kết quả có được session key đã mã hóa.

  • Gửi dữ liệu đến người nhận: Gửi đồng thời cả dữ liệu đã mã hóa (cyphertext) và session key đã mã hóa cho người nhận.

  • Người nhận giải mã theo ba bước: dùng private key của mình để giải mã session key. Khi đã có session key, dùng nó để giải mã dữ liệu. Sau đó dữ liệu được giải nén để có thể đọc được. Ba bước đó phần mềm PGP tự làm. Như vậy trong các bước 4,5,6 session key được mã hóa dùng kỹ thuật mã hóa hai khóa.

Hình 6.1: PGP mã hóa và gửi đi ở máy tính người gửi

Hình 6.2: PGP giải mã trên máy tính người nhận

Trên đường truyền, người thứ ba có thể chặn, sao chép được dữ liệu đã mã hóa và session key đã mã hóa. Tuy nhiên, muốn giải mã được dữ liệu phải giải mã được session key, mà session key chỉ giải mã được bằng private key lưu ở máy tính người nhận. Session key lại là số ngẫu nhiên và quá lớn nên không thể dò bằng cách vét cạn các tổ hợp ký tự được.

Năm 1997, PGP trở thành chuẩn gọi là OpenPGP. Hầu hết các chương trình email hiện nay đều hỗ trợ chuẩn này.

Tổ chức Phần mềm Tự do (Free Software Foundation) đã xây dựng một phần mềm tự do, nguồn mở tương thích với OpenGPG gọi là GNU Privacy Guard (viết tắt GnuPG hoặc GPG) và một số phần mềm đồ họa dùng thư viện GnuGPG để mã hóa, giải mã và ký số ( KGPG, Seahorse, MacGPG).

Chứng chỉ số (public key certificate, digital certificate, security certificate hoặc identity certificate)

Nếu hai người đã biết nhau thì khi trao đổi thư mật mã chỉ cần gửi cho nhau khóa mã công khai là đủ.

Nhưng khi liên lạc với một người, một tổ chức mà mình không biết thì cần phải có một bên thứ ba tin cậy xác nhận đó đúng là người, tổ chức như họ đã xưng danh.

Cũng tương tự như khi gặp nhau bình thường thì danh thiếp là đủ, nhưng giao dịch ngân hàng thì phải đưa chứng minh thư (do công an cấp và xác nhận).

Chứng chỉ số là một file trong đó có:

  • Serial Number: số xác định duy nhất cho chứng chỉ.

  • Subject: tên người, tổ chức, thực thể (một địa chỉ email?) được cấp chứng chỉ.

  • Signature Algorithm: thuật toán để tạo chữ ký.

  • Issuer: tổ chức (công ty) cấp chứng chỉ (sau khi đã kiểm tra thông tin về đối tượng được cấp).

  • Valid-From: Ngày có hiệu lực của chứng chỉ.

  • Valid-To: Ngày hết hạn chứng chỉ.

  • Key-Usage: mục đích sử dụng mã khóa công khai (ví dụ để mã hóa hay để ký).

  • Public Key: mã khóa công khai của đối tượng được cấp chứng chỉ.

  • Thumbprint Algorithm: thuật toán dùng tạo trị số băm cho chứng chỉ.

  • Thumbprint: chữ ký số của tổ chức cấp chứng chỉ để kiểm tra, xác nhận rằng chứng chỉ đúng là do tổ chức đó cấp và không bị thay đổi.

Hình dưới đây là chứng chỉ số của site mail.google.com do công ty Thawte cấp:

Như vậy, chứng chỉ số giống chứng minh thư: có tên người được cấp và các thông tin về người đó cùng với tên, chữ ký, dấu của cơ quan cấp (công an). Tất cả những cái đó dùng để xác thực đối tượng được cấp chứng minh thư.

Điểm khác với chứng minh thư là người (hoặc phần mềm) nhận chứng chỉ số của một người khác phải:

  • Kiểm tra chữ ký số của cơ quan cấp xem có đúng là do cơ quan đó cấp không.

  • Kiểm tra trị số băm của chứng chỉ xem chứng chỉ có bị thay đổi không.

  • Kiểm tra xem chứng chỉ còn hạn sử dụng không (cái này giống CMT).

  • Dùng khóa công khai của người có chứng chỉ để tạo văn bản mật gửi cho họ (nếu cần).

Tất cả những việc trên do phần mềm làm và làm rất nhanh.

Như vậy một chứng chỉ số = chứng minh thư + 1 chìa khóa.

Hai cách cấp chứng chỉ số:

  • Chứng chỉ do một cơ quan, công ty chuyên môn, có uy tín về cấp chứng chỉ số (Thawte, Verisign, …) cấp. Mỗi chứng chỉ chỉ có một chữ ký xác nhận duy nhất của cơ quan cấp chứng chỉ (hoặc cấp dưới được ủy quyền của họ). Cách này có tên là public key infrastructure (PKI) theo chuẩn X.509. Chứng chỉ số có thể cấp có phí hoặc miễn phí.

  • Chứng chỉ do nhiều người khác đã từng giao dịch với người có chứng chỉ đó ký xác nhận. Cách này gọi là web of trust (mạng lưới tin cậy) dựa trên hệ thống mã hóa PGP, GPG hoặc các hệ thống khác dùng chuẩn OpenPGP.


Kênh thông tin an toàn trên Internet

Khi dùng Internet, máy tính người dùng thiết lập một kênh trao đổi thông tin với một đối tác liên lạc: một địa chỉ web, một địa chỉ email, một máy fax Internet, một nickname chat, một username để nói chuyện qua VoIP v.v…

Khi đó xuất hiện hai vấn đề liên quan đến an ninh, bảo mật:

  • Đối tác liên lạc có đúng là người mà ta định liên lạc không?

  • Quá trình trao đổi thông tin có bị “nghe trộm” không?

Giao thức xác thực và mã hóa SSL (Secure Socket Layer) thế hệ sau của nó là TLS (Transport Layer Security) giải quyết hai vấn đề trên.

Hoạt động như sau (giả sử liên lạc với công ty ZXC có domain zxc.com):

Kết nối qua cổng dành riêng: Phần mềm máy trạm (trình duyệt web, trình thư điện tử, …) kết nối với phần mềm máy chủ tương ứng (web server, mail server, …) qua cổng dành riêng cho giao dịch an toàn. Ví dụ: cổng duyệt web thường là 80 (giao thức http), cổng dành riêng là 443 (giao thức https), cổng nhận thư POP thường là 110 (giao thức POP3), cổng dành riêng là 995 (giao thức POP3S), v.v…

Thống nhất bộ mã hóa: Phần mềm máy trạm cũng gửi tới máy chủ một danh sách các bộ mã hóa mà nó hỗ trợ. Phần mềm máy chủ chọn một bộ mã hóa mạnh nhất mà nó cũng hỗ trợ, thông báo cho máy trạm biết để thống nhất dùng trong phiên liên lạc đó.

Xác thực đối tác liên lạc: Máy chủ sẽ gửi chứng chỉ số của công ty ZXC (trong đó có khóa mã công khai của công ty) về cho máy trạm.

Kiểm tra chứng chỉ số:

  • Nếu chứng chỉ do một công ty cấp chứng chỉ số (ví dụ Thawte) cấp, nó được mã hóa bằng khóa bí mật của Thawte. Phần mềm máy trạm dùng khóa công khai của Thawte để giải mã được thì chứng tỏ chứng chỉ đó đúng do Thawte cấp. Sau đó có thể vào site của Thawte để kiểm tra xem trong danh sách công ty có công ty ZXC không.

  • Nếu các thông tin khác (thời hạn hiệu lực của chứng chỉ, địa chỉ domain, …) đều hợp lệ thì phiên liên lạc sẽ tiếp tục. Đến đây, vấn đề 1 nói trên được giải quyết, người dùng biết chắc là đang giao dịch với máy chủ của công ty ZXC.

Tạo khóa mã chung: máy trạm dựa trên một số ngẫu nhiên tạo một khóa mã chung, mã hóa nó bằng khóa mã công khai của máy chủ và gửi cho máy chủ. Khóa này chỉ dùng trong một phiên kết nối, đến phiên sau lại tạo khóa khác, vì vậy nó còn được gọi là session key.

Máy chủ dùng khóa mã bí mật của nó giải mã khóa mã chung nói trên. Từ thời điểm đó, mọi thông tin trao đổi giữa máy trạm và máy chủ được mã hóa bằng khóa mã chung đó, tức là dùng kỹ thuật mã hóa một khóa. Thông tin đã được mã hóa bằng một khóa mã chỉ có máy trạm và máy chủ biết vì vậy không thể bị đọc trộm trên đường truyền. Vấn đề 2 nói trên được giải quyết.

Như vậy giao thức SSL và TLS giải quyết hai vấn đề: nó xác thực đối tác liên lạc và mã hóa thông tin trao đổi. Về mặt an ninh, hai giao thức này tương đương nhau (xem thêm).

Hầu hết các dịch vụ Internet đều có thể dùng SSL/TLS: truy cập web đến các site webmail hoặc ngân hàng, mua bán trên mạng (HTTPS), gửi nhận email (POPS, IMAPS, SMTPS), v.v…

Điều kiện để dùng được kênh an toàn là máy chủ phải được cài đặt để hỗ trợ kênh đó ở dịch vụ cần thiết và phải có chứng chỉ số hợp lệ.

Truy cập web an toàn.

Đây là trường hợp riêng của kênh thông tin Internet an toàn đã nói ở trên. Kênh mở trang web an toàn dùng giao thức HTTPS (Hypertext Transfer Protocol Secure) là kết hợp của giao thức mở trang web thông thường HTTP (HyperText Transfer Protocol) và giao thức xác thực, mã hóa SSL/TLS.

Khi vào trang web bằng kênh thông thường ta gõ: http://www.zxc.com

Khi vào trang web bằng kênh an toàn: https://www.zxc.com

Việc đầu tiên, trang web sẽ gửi chứng chỉ số của nó (security certificate) để trình duyệt kiểm tra.

Nếu chứng chỉ do một cơ quan cấp tin cậy mà trình duyệt biết (Thawte, Verisign, …) và các mục khác trong chứng chỉ đều hợp lệ thì kết nối an toàn được thiết lập và trang web sẽ được tải về xuất hiện trong trình duyệt.

Nếu chứng chỉ không hợp lệ (invalid): cơ quan cấp vô danh, sai tên đối tượng (chứng chỉ cấp cho www.zxa.com), hết hạn, … trình duyệt (Firefox) sẽ cho xuất hiện thông báo kiểu như sau:

Trong ví dụ trên, trình duyệt không biết (unknown) cơ quan cấp (issuer) chứng chỉ nên chứng chỉ bị coi là không hợp lệ (invalid).

Khi mở một trang web trong máy chủ của mạng LAN, chứng chỉ do máy chủ cấp chứng chỉ của công ty bạn cấp thì thường gặp thông báo trên. Nhưng vì ta biết chứng chỉ đó hợp lệ nên có thể nhấn vào dòng Or you can add an exception (bạn có thể bổ xung một ngoại lệ) để bảo trình duyệt chấp nhận chứng chỉ đó.

Khi việc xác thực đối tác liên lạc bằng trang web đã xong (chứng chỉ được xác nhận là hợp lệ), kênh kết nối an toàn giữa trình duyệt và máy chủ web được thiết lập. Mọi dữ liệu truyền qua lại trên kênh đó đều được mã hóa: trang web được mã hóa truyền xuống trình duyệt, trình duyệt giải mã và cho hiển thị; username, password và nội dung soạn thảo (email chẳng hạn) do bạn gõ vào đều được trình duyệt mã hóa trước khi chuyển cho máy chủ web. Nếu có người “xem trộm” chặn sao chép các thông tin đó trên đường truyền thì cũng không thể đọc được trừ khi phá được mật mã.

Trong Firefox, khi đã mở một trang web bằng kênh an toàn, vd: https://mail.google.com, nhấn chuột vào biểu tượng ở bên trái thanh địa chỉ ta sẽ có màn hình thông tin sau:

Mục đầu cho biết bạn đang kết nối với đúng google.com mà không phải một site mạo danh nào khác. Mục thứ hai cho biết chủ nhân của google.com là không rõ (unknown) vì khi xin cấp chứng chỉ, công ty Google không khai mục này, lẽ ra nó phải là Google Inc. Mục thứ ba cho biết việc xác nhận ở mục đầu do công ty Thawte thực hiện. Mục cuối cùng thông báo kết nối được mã hóa để tránh xem trộm trên đường truyền.

Nhấn vào More Information còn nhiều thông tin khác.

Cần nhấn mạnh là kết nối bằng kênh an toàn chỉ đảm bảo hai điều: đến đúng địa chỉ và dữ liệu truyền trên kênh được mã hóa ngăn xem trộm trên đường truyền. Password Gmail của bạn vẫn có thể bị lấy trộm bởi một mallware keylogger, bị đọc trộm nếu lưu bất cẩn trong cache trình duyệt, v.v… Tóm lại vấn đề an ninh trình duyệt còn rộng lớn hơn rất nhiều.

Không phải website nào cũng truy cập được bằng https. Thường chỉ những site có trao đổi thông tin cá nhân (webmail) hoặc nhạy cảm (mua bán, ngân hàng) mới hỗ trợ chế độ này.

Gửi nhận email an toàn

Cái này để dành một bài khác.

Phá mật mã

Ngành mật mã học có hai nhánh: cryptographic chuyên nghiên cứu cách mã hóa, giải mã và cryptanalysis chuyên nghiên cứu cách phá mã khi không biết khóa mã và thuật toán mã.

Một trong những cách phá mã đơn giản nhất là dò khóa mã (brute force) bằng cách thử tất cả các tổ hợp ký tự có thể (vét cạn). Với một khóa mã 128 bit, số khóa có thể là 2128 xấp xỉ bằng 3×1038 (38 số không). Nếu một máy tính có khả năng kiểm tra được 1018 khóa trong một giây thì cũng phải mất 1013 năm (gấp một nghìn lần tuổi vũ trụ!). Đấy là lý thuyết.

Thực tế nếu password của bạn chỉ gồm toàn chữ cái, lại ngắn, trùng với tên, ngày sinh của vợ, v.v… thì việc dò nhanh hơn nhiều. Một số site sau khi nhập ba lần mật khẩu không đúng, không cho nhập nữa là để tránh những phần mềm dò mật khẩu tự động. Một số địa chỉ email bắt buộc phải có cả chữ và số là để tránh dò địa chỉ gửi thư rác.

Ngoài cách trên còn hàng chục cách khác cùng với phần mềm, máy tính để phá mã!

Bản thân các thuật toán, phần mềm mã hóa cũng có thể có các điểm yếu, lỗ hổng an ninh bị khai thác để phá mã. Tháng 8/2009, một lỗ hổng an ninh đã được phát hiện ra trong giao thức SSLv3 và TLS.

Về nguyên tắc cái gì do con người tạo ra thì con người cũng có thể tìm cách phá được. Cũng như virus và các vấn đề an ninh khác, đây là cuộc rượt đuổi bất tận giữa bên xây và bên phá không bao giờ kết thúc.

Tuy nhiên, chúng ta sống bằng niềm tin vào “an ninh tương đối”. Hệ thống cửa và khóa cửa nhà bạn “chẳng là cái đinh gì” đối với những tay trộm cao thủ. Nhưng chẳng ai vì thế mất ăn mất ngủ gia cường ba bốn lớp cửa với hàng chục cái khóa. Đơn giản là vì sác suất trộm viếng nhà bạn không cao và những tay cao thủ thì nhằm vào nhà các đại gia hoặc ngân hàng hiệu quả hơn!

Ghi chép về mã hóa 1

Ghi chép về mã hóa 1

(Mọi bản ghi chép công bố trên blog này đều là ghi chép cá nhân nhặt nhạnh trên Internet để tìm hiểu sâu hơn đôi chút một vấn đề. Thông tin trong đó có thể sai theo hiểu biết hạn chế của tác giả.)

1-Mã hóa là gì

Xét ví dụ một bảng mã hóa (mật mã) đơn giản, các chữ cái chuyển thành một cặp số (cột,hàng):

1

2

3

4

5

1

A

B

C

D

E

2

F

G

H

I/J

K

3

L

M

N

O

P

4

Q

R

S

T

U

5

V

W

X

Y

Z

Theo bảng này, từ “TAN CONG” sẽ được mã hóa (encryption) là: 44 11 33 31 43 33 22

Người không có bảng mã trên, đọc hàng số đó sẽ không hiểu gì. Người có bảng mã sẽ giải mã (decryption) được hàng số đó thành từ “tan cong”. Bảng mã nói trên là một dạng thuật toán mã hóa.

Mã hóa là việc dùng một thuật toán mã hóa và một hoặc nhiều khóa mã biến đổi thông tin có nghĩa (plaintext) thành chuỗi ký tự vô nghĩa (ciphertext – mật mã). Chỉ những người biết thuật toán và có khóa mã mới giải mã thông tin đã mã hóa thành thông tin có nghĩa.

Hệ thống mã hóa: gồm thuật toán (hàm toán học) để mã hóa, các khóa mã và các thủ tục (protocol) để thực hiện quá trình mã hóa.

Mã hóa “mạnh” và “yếu”: mã hóa được chia thành 2 loại. Mã hóa yếu chỉ có mục đích hạn chế người bình thường không đọc được nội dung, mã hóa mạnh thì ngay cả các siêu máy tính có thể phải mất hàng chục năm hay lâu hơn mới phá mã được nếu không có khóa mã.

2-Mã hóa dùng một khóa mã bí mật (symmetric key techniques)

Trong kỹ thuật mã hóa này, người gửi và người nhận thông tin có cùng một khóa mã duy nhất. Người gửi dùng khóa mã, mã hóa thông tin rồi gửi đi. Người nhận dùng cũng khóa mã đó để giải mã thông tin và đọc.

Vì chỉ có một khóa mã và dùng chung nên kỹ thuật mã này còn có nhiều tên khác nhau như : symmetric-key, secret-key, single-key, shared-key, one-key, và private-key

Hình 2.1: Mã hóa dùng một khóa mã bí mật

Loại khóa này tương tự như những khóa thông thường chỉ có một chìa. Chỉ có thể đóng, mở khóa bằng những chìa giống hệt nhau.

Chuẩn mã hóa quốc gia đầu tiên của Mỹ (và cũng được sử dụng rộng rãi trên toàn thế giới) là DES (Data Encryption Standard) dùng khóa mã đối xứng dài 56 bit. Sau khi được công bố năm 1976, đến năm 1999 mật mã này bị phá trong 22 giờ 15 phút, dùng cách vét cạn (brute force): dò thử tất cả 70,000,000,000,000,000 tổ hợp ký tự của khóa 56 bit.

Về nguyên tắc để dò một số lượng lớn khóa mã như vậy phải có một siêu máy tính cực nhanh. Tuy nhiên năm 1997, dự án DESCHALL Project dùng thời gian rỗi của hàng nghìn máy tính trên Internet đã phá được DES, dành giải thưởng $10,000 của RSA Security .

Hiện nay, DES được coi là không đủ an toàn và thay bằng AES (Advanced Encryption Standard) công bố năm 2002 với khóa mã dài 128, 192 hoặc 256 bit. Ngoài ra còn các chuẩn mã hóa một khóa khác như Twofish, Serpent, AES (Rijndael), Blowfish, CAST5, RC4, TDES, IDEA.

Ưu nhược điểm: nhanh, rất phù hợp nếu thông tin mã hóa không phải chuyển đi đâu (chỉ dùng cho một người).

Nếu thông tin mã hóa phải chuyển qua mạng cho một người thứ hai đọc, nhất là trên khoảng cách xa, khó khăn chính là phải chuyển được khóa mã cho người nhận một cách bí mật (phân phối khóa). Nếu trong quá trình chuyển khóa mã, một bên thứ ba có thể sao chép được khóa mã đó thì họ cũng có thể chặn bắt thông tin đã mã hóa và dùng khóa mã giải mã dễ dàng.

3-Mã hóa dùng hai khóa mã: khóa mã công khai và khóa mã bí mật. (asymmetric key techniques)

Để tránh được nhược điểm về phân phối khóa nói trên người ta dùng phương thức mã hóa có hai khóa mã (còn gọi là mã hóa không đối xứng) mới xuất hiện năm 1975.

Loại mã hóa này có hai khóa mã: một khóa mã công khai (public key) dùng để mã hóa và một khóa bí mật (private key) dùng giải mã.

Xét ví dụ tương tự: A định gửi một bức thư mật cho B. Các bước tiến hành như sau:

  • A yêu cầu B gửi chìa khóa công khai của B đến cho A. Vì là chìa công khai nên B có thể gửi qua bưu điện, nhờ người khác, thậm chí treo ở một nơi công cộng v.v… mà không cần giữ bí mật.

  • A viết thư, bỏ vào một cái hòm có hai chìa khóa khác nhau. Chìa công khai của B được dùng để khóa hòm đó lại rồi hòm được gửi qua bưu điện.

  • Chìa công khai của B, ai cũng có thể có một bản sao nhưng chìa công khai chỉ dùng để khóa, không dùng mở được. Do đó trên đường vận chuyển, người thứ ba không mở được.

  • B nhận được hòm, dùng chìa khóa bí mật của B để mở hòm. Khi đã khóa bằng chìa công khai của B thì chỉ có thể mở được bằng chìa bí mật của B, người khác không có chìa bí mật này không thể mở được.

Hình 3.1: Mã hóa dùng khóa công khai và khóa bí mật

Điểm hay của cách làm này là cái khóa mã công khai không cần dấu diếm. Cách làm tương tự khi muốn nhận email bí mật như sau:

  • B dùng phần mềm tạo ra một bộ khóa mã riêng cho mình gồm một khóa công khai (public key) và một khóa bí mật (private key). Bộ khóa mã này gắn liền với một địa chỉ email của B.

  • Khóa bí mật được cất giữ cẩn thận trên máy tính của B. Khóa công khai có thể gửi kèm theo email cho A hoặc gửi vào một máy chủ công cộng trên Internet kèm theo địa chỉ email, bất kỳ ai muốn gửi mật thư cho B đều có thể vào máy chủ đó tải bản sao khóa công khai của B về.

  • Người gửi (A) soạn thư, dùng khóa mã công khai của B để mã hóa bức thư đó rồi gửi cho B. Trên đường truyền dù có ai chặn xem thư cũng không thể đọc được vì thư đã bị mã hóa, không có khóa bí mật không giải mã được.

  • Khi thư đến máy tính của người nhận (B), người nhận dùng khóa mã bí mật và phần mềm giải mã để giải mã bức thư.

Cách mã hóa này có hai ưu điểm:

  • Hai người trao đổi thông tin mật cho nhau không cần có thỏa thuận trước. Nếu một người có địa chỉ email kèm một khóa công khai gửi trên một máy chủ Internet, bất kỳ người nào nếu cần đều có thể tải khóa công khai đó về tạo một mật thư gửi cho địa chỉ email đó, không cần quen biết, thỏa thuận gì trước.

  • Không cần có một phương thức phân phối khóa mã tin cậy và bí mật. Để đàm bảo bí mật, khóa mã kiểu gì cũng phải định kỳ thay đổi. Trước đây, dùng hệ thống mã hóa một khóa, các ngân hàng, bộ ngoại giao phải cử người đi khắp thế giới để giao khóa mã mới rất mất thì giờ và tốn kém.

4-Hàm băm mật mã (Cryptographic Hash function – CHF)

Khái niệm hàm băm (hash function) khác với khái niệm hàm băm mật mã (cryptographic hash function). Dưới đây ta chỉ xét khái niệm thứ hai và gọi tắt là hàm băm.

Định nghĩa: CHF là một thuật toán xác định, áp dụng vào một khối dữ liệu có chiều dài bất kỳ để tính ra được một một chuỗi bit có chiều dài cố định (128 bits,256 bits, …) gọi là trị số băm (hash value) sao cho khi dữ liệu thay đổi dù chỉ một bit thì khi tính lại trị số băm sẽ thay đổi và do đó, mỗi khối dữ liệu sẽ có một trị số băm duy nhất.

Hiểu nôm na, một khối dữ liệu có một trị số băm duy nhất tương tự như số chứng minh với một người. Điểm khác biệt là khi người đó chỉ rụng một sợi tóc thì khi tính lại trị số băm cũng thay đổi.

Tại sao lại dùng từ “băm”: để tính trị số băm, thường dữ liệu được chia nhỏ (băm) ra thành nhiều phần rồi áp dụng một thuật toán tính nào đó.

Một hàm băm lý tưởng sẽ có các tính chất sau:

  • Dễ dàng tính trị số băm với bất kỳ khối dữ liệu nào.

  • Từ trị số băm không thể tính ngược ra khối dữ liệu (hàm một chiều).

  • Không thể thay đổi khối dữ liệu (dù chỉ một bit) mà không làm thay đổi trị số băm.

  • Không thể có hai khối dữ liệu khác nhau mà có cùng một trị số băm.

Dùng làm gì:

  • Xác nhận tính toàn vẹn của dữ liệu sau khi truyền qua mạng: các file cài đặt một bản Linux (iso) được đặt trên Internet kèm theo trị số băm md5. Sau khi tải file về, tính lại md5 của file đã tải, nếu giống với trị số đã cho trước tức là file tải về nguyên vẹn, giống hoàn toàn như file đặt trên Internet, không bị lỗi (thiếu, sai) khi download. Một email, một file được gửi qua mạng cùng với trị số băm ban đầu của nó để người nhận kiểm tra tương tự.

  • Dùng trong chữ ký số (xem phần dưới)

  • Kiểm tra password: một phần mềm tạo ra password rồi lưu giữ không phải dưới dạng nguyên bản đọc được mà dưới dạng trị số băm của password đó (để tránh bị hacker xâm nhập lấy cắp). Khi user khai password, password đó được tính trị số băm và so sánh với trị số đã lưu.

  • ….

5-Chữ ký số (digital signatures)

Một chữ ký số đặt vào một văn bản điện tử cũng có công dụng tương tự như một chữ ký tay vào văn bản giấy:

  • Nó xác nhận rằng văn bản đúng là do người ký phát hành.

  • Người đã ký cũng không thể phủ nhận là mình không phát hành văn bản đó vì chỉ người đó mới có chữ ký số đó. Chữ ký tay có thể bắt chước giả mạo được, nhưng chữ ký số thì không. Cũng không thể tách chữ ký số ra khỏi một văn bản và gán nó vào văn bản khác.

  • Chữ ký số còn một công dụng nữa mà chữ ký tay không có là nó xác thực văn bản gốc vẫn nguyên vẹn không bị sửa đổi trên đường truyền. Văn bản giấy mà bị cạo sửa tinh vi thì chắc phải dùng máy móc chuyên dụng mới phát hiện được.

Hình 5.1: Chữ ký số

Quá trình tạo và kiểm tra chữ ký số cũng dùng kỹ thuật mã hóa hai khóa nhưng ngược với cách mã hóa đã nói ở trên, gồm 3 thuật toán:

  • Một thuật toán tạo khóa tạo ra một cặp khóa bí mật và công khai theo các số ngẫu nhiên như đã mô tả ở trên.

  • Một thuật toán tạo chữ ký số: từ một văn bản và một khóa bí mật tạo ra một chữ ký số và chèn nó vào văn bản. Văn bản trở thành văn bản đã ký.
    Trong hình bên trái của Hình 5.1, trị số băm của văn bản được tính sau đó mã hóa bằng khóa bí mật của người ký tạo thành chữ ký số của người đó. Nếu dùng dịch vụ chữ ký số của một nhà cung cấp thì có kèm theo một giấy chứng nhận (certificate) của nhà cung cấp đó. Tất cả được chèn vào văn bản tạo thành văn bản đã ký (Digital signed data)

  • Một thuật toán kiểm tra dùng văn bản đã ký, khóa công khai của người ký để xác thực chữ ký đúng là của người ký. Trong hình bên phải của Hình 5.1, từ văn bản đã ký tách riêng phần văn bản và chữ ký. Sau đó tính trị số băm của văn bản, dùng khóa công khai của người ký để giải mã chữ ký số và tách ra trị số băm gốc đã kèm trong chữ ký đó ở bước trên. Nếu hai trị số băm trùng nhau thì chữ ký đúng. (và văn bản đúng nguyên bản gốc không bị thay đổi trên đường truyền).

Hai hệ thống chữ ký số phổ biến hiện nay là RSA DSA.


6-PGP – một hệ thống mã hóa hỗn hợp.

PGP (Pretty Good Privacy) là một hệ thống mã hóa hỗn hợp, kết hợp những ưu điểm của hai hệ thống mã hóa một khóa và hai khóa nêu trên, do Phillip Zimmermann sáng tạo ra năm 1991.

Các bước phần mềm PGP thực hiện:

  • Nén dữ liệu chưa mã hóa lại. Việc nén này làm giảm thời gian truyền qua mạng và tiết kiệm ổ cứng nhưng tác dụng chính là tăng cường an ninh. Phần lớn các kỹ thuật phá mã (cryptanalysis) tìm kiếm các mẫu ký tự giống nhau trong dữ liệu đã mã hóa để dò ra khóa mã. Khi nén, số các mẫu giống nhau đó giảm xuống tối thiểu, sẽ khó dò hơn rất nhiều.

  • Tạo khóa mã bí mật dùng một lần (session key). Khóa mã này là một số ngẫu nhiên được tạo ra dựa trên chuyển động ngẫu nhiên của chuột và các phím ngẫu nhiên đã gõ. (TrueCryp dùng cách tạo khóa này, nhưng không phải dùng một lần, xem ở đây).

  • Mã hóa dữ liệu đã nén: Dùng khóa mã vừa tạo và một thuật toán mã hóa một khóa nhanh và tin cậy để mã hóa dữ liệu đã nén. Kết quả là dữ liệu được mã hóa (từ plaintext thành cyphertext). Để giải mã cũng vẫn dùng session key. Hai bước 2,3 dữ liệu được mã hóa bằng kỹ thuật mã hóa một khóa bí mật đã nói ở trên.

  • Mã hóa khóa mã session key: dùng khóa công khai của người nhận (public key) để mã hóa khóa bí mật dùng một lần (session key). Kết quả có được session key đã mã hóa.

  • Gửi dữ liệu đến người nhận: Gửi đồng thời cả dữ liệu đã mã hóa (cyphertext) và session key đã mã hóa cho người nhận.

  • Người nhận giải mã theo ba bước: dùng private key của mình để giải mã session key. Khi đã có session key, dùng nó để giải mã dữ liệu. Sau đó dữ liệu được giải nén để có thể đọc được. Ba bước đó phần mềm PGP tự làm. Như vậy trong các bước 4,5,6 session key được mã hóa dùng kỹ thuật mã hóa hai khóa.

Hình 6.1: PGP mã hóa và gửi đi ở máy tính người gửi

Hình 6.2: PGP giải mã trên máy tính người nhận

Trên đường truyền, người thứ ba có thể chặn, sao chép được dữ liệu đã mã hóa và session key đã mã hóa. Muốn giải mã được dữ liệu phải giải mã được session key, mà session key chỉ giải mã được bằng private key lưu ở máy tính người nhận. Session key lại là số ngẫu nhiên và quá lớn nên không thể dò bằng cách vét cạn các tổ hợp ký tự được.

Năm 1997, PGP trở thành chuẩn gọi là OpenPGP. Hầu hết các chương trình email hiện nay đều hỗ trợ chuẩn này.

Tổ chức Phần mềm Tự do (Free Software Foundation) đã xây dựng một phần mềm tự do, nguồn mở tương thích với OpenGPG gọi là GNU Privacy Guard (viết tắt GnuPG hoặc GPG) và một số giao diện đồ họa dùng thư viện GnuGPG để mã hóa, giải mã và ký số ( KGPG, Seahorse, MacGPG)

(còn tiếp)

Linux kernel làm việc như thế nào?

How the Linux kernel works

Posted at 9:24pm on Sunday March 15th 2009

Zxc232 lược dịch

Nói một cách đại thể, nhân Linux (kernel) là lớp phần mềm nằm giữa phần cứng và các chương trình ứng dụng chạy trên một máy tính. Nói một cách chặt chẽ theo đúng nghĩa khoa học máy tính, danh từ “Linux” chỉ dùng để chỉ phần nhân mà Linus Torvalds đã viết đầu những năm 90.

Tất cả các phần khác bạn thấy trong một bản Linux: Bash shell, KDE, trình duyệt, X server và nhiều cái khác là những ứng dụng chạy trên nhân. Để hình dung, một bản Red Hat Linux 5 chiếm khoảng 2,5GB ổ cứng thì trong đó phần nhân, bao gồm tất cả các module, chỉ có 47MB, tức là khoảng 2%.

Bên trong nhân.

Vậy thì nhân thực sự làm cái gì? Hình vẽ dưới đây cho thấy một bức tranh tổng thể. Nhân cung cấp các dịch vụ cho các phần mềm ứng dụng chạy trên nó qua một tập hợp các cổng vào (entry points) được gọi là các lời gọi hệ thống (system calls).

Hình 1: Nhân dùng những lời gọi hệ thống như ‘read’ và ‘write’ để cung cấp một lớp trừu tượng các phần cứng cụ thể cho các ứng dụng.

Đối với người lập trình thì lời gọi hệ thống cũng giống như các lời gọi hàm thông thường, mặc dù lời gọi hệ thống chuyển cách điều hành của bộ xử lý từ vùng user sang vùng nhân. Toàn bộ các lời gọi hệ thống tạo nên một “máy ảo Linux” là sự trừu tượng hóa các phần cứng bên dưới nó.

Một trong những lớp trừu tượng rõ ràng nhất do nhân cung cấp là hệ thống file. Ví dụ dưới đây là một chương trình ngắn viết bằng C mở một file và copy nội dung file ra một thiết bị ra tiêu chuẩn:

#include <fcntl.h>

int main()

{

int fd, count; char buf[1000];

fd=open(“mydata”, O_RDONLY);

count = read(fd, buf, 1000);

write(1, buf, count);

close(fd);

}

Trong ví dụ trên có bốn lời gọi hệ thống: open, read, writeclose. Đừng quan tâm đến cú pháp của lệnh, bây giờ chưa quan trọng. Điểm quan trọng là: thông qua các lời gọi hệ thống đó, nhân Linux cung cấp hình ảnh của một file – một dãy các byte dữ liệu có tên – và tránh cho bạn khỏi phải quan tâm đến những chi tiết nằm bên dưới như track, sector, head, …của cách lưu trữ file đó trên ổ cứng mà bạn phải biết và giao tiếp nếu bạn muốn nói chuyện trực tiếp với phần cứng. Đó là cái mà ta gọi là sự trừu tượng hóa.

Như bạn đã thấy ở hình trên, nhân phải làm rất nhiều việc để cung cấp được một hình ảnh trừu tượng của file mặc dù hệ thống file đó có thể có nhiều format khác nhau (ext3, fat, ntfs, …), nằm trên nhiều thiết bị lưu trữ như ổ cứng, CD, USB và thậm chí có thể nằm trên các máy khác trong mạng truy cập bằng các giao thức mạng như NFS hoặc CIFS (mà cuối cùng bạn vẫn chỉ truy cập đến nó bằng các lời gọi hệ thống, phần còn lại do nhân đảm nhiệm).

Đằng sau hậu trường.

Hệ thống file là sự trừu tượng dễ thấy nhất mà nhân cung cấp. Nhưng nhân còn có những hoạt động khác kém trực quan hơn. Ví dụ, nhân chịu trách nhiệm lập lịch xử lý. Ở mỗi thời điểm, bao giờ cũng có vài tiến trình (process) chờ để chạy. Nhân lập lịch bố trí thời gian để bộ xử lý chạy các tiến trình đó xen kẽ nhau sao cho sau một khoảng thời gian (vài giây) ta có cảm giác các tiến trình đó chạy đồng thời. Dưới đây là một chương trình ví dụ khác:

#include <stdlib.h>

main()

{

if (fork()) {

write(1, “Parent\n”, 7);

wait(0);

exit(0);

}

else {

write(1, “Child\n”, 6);

exit(0);

}

}

Chương trình này tạo ra hai tiến trình: một tiến trình cha và một tiến trình con, mỗi cái viết một message vào thiết bị xuất rồi kết thúc. Đừng quan tâm đến cú pháp của lệnh vội mà chỉ cần thấy rằng các lời gọi fork(), exit(), wait() tạo các tiến trình, kết thúc và đồng bộ chúng. Các lời gọi đơn giản đó che giấu cả một quá trình phức tạp của nhân để quản lý và lập lịch thực hiện các tiến trình.

Một chức năng khác của nhân còn ít rõ ràng hơn ngay cả với nhà lập trình là quản lý bộ nhớ. Mỗi tiến trình đều ảo tưởng rằng chúng có một vùng không gian địa chỉ bộ nhớ riêng. Thực ra chúng dùng chung bộ nhớ RAM với các tiến trình khác. Và nếu RAM không đủ, một phần không gian địa chỉ còn được đưa ra vùng swap trên ổ cứng. Nhân phải điều khiển sao cho một tiến trình không xâm phạm vào vùng địa chỉ của tiến trình khác.

Nhân cũng thực hiện các giao thức mạng như IP, TCP và UDP để liên lạc giữa máy với máy và tiến trình với tiến trình thông qua mạng. Ở đây cũng lại có các ảo tưởng. TCP tạo nên ảo tưởng rằng giữa hai tiến trình có một kết nối cố định như sợi dây đồng giữa hai máy điện thoại, thực ra thì không có kết nối cố định đó. Lưu ý rằng các giao thức ứng dụng như FTP, DNS, HTTP được thực hiện bởi các chương trình, không phải nhiệm vụ của nhân.

Linux (cũng giống như Unix trước nó) nổi tiếng về an ninh. Chính nhân là nơi theo dõi các mã định danh của người dùng và nhóm người dùng (user ID và group ID) của mỗi tiến trình đang chạy để quyết định có cho phép hay không mỗi lần tiến trình đòi truy cập một tài nguyên (như mở file để ghi vào đó) bằng cách kiểm tra quyền truy cập của tài nguyên đó.

Cuối cùng, nhân có rất nhiều các module. Mỗi module biết các chi tiết của phần cứng để nói chuyện với chúng: làm thế nào để đọc một sector trên ổ cứng, làm thế nào để tìm một gói dữ liệu từ card mạng, v.v và v.v. Đôi khi các module đó được gọi là các driver của thiết bị.

Cấu trúc module của nhân.

Các nhân Linux đời đầu có cấu trúc đơn khối (monolithic): các bộ phận của nhân liên kết cố định với nhau tạo nên một file chạy lớn.

Nhân Linux hiện nay có cấu trúc module: mỗi module chức năng chỉ được tải vào nhân khi cần đến. Do đó nhân có kích thước nhỏ và có thể tải hoặc thay thế các module trong một nhân đang chạy mà không cần phải reboot.

Lúc boot, phần lõi của nhân được tải vào bộ nhớ từ một file trong thư mục /boot, thường là file vmlinuz-<phiên bản của nhân> (ví dụ: vmlinuz-2.6.31.2-desktop586-0.rc1.1mnb). Các module của nhân nằm trong thư mục /lib/modules/<phiên bản của nhân>. Có thể biết phiên bản nhân bằng lệnh uname -r.

Quản lý các module.

Thường thì Linux tự quản lý các module. Nhưng cũng có những lệnh để xem và quản lý module nếu cần. Ví dụ lệnh lsmod cho biết danh sách các module hiện đang được tải vào bộ nhớ:

# lsmod

pcspkr 4224 0

hci_usb 18204 2

psmouse 38920 0

bluetooth 55908 7 rfcomm,l2cap,hci_usb

yenta_socket 27532 5

rsrc_nonstatic 14080 1 yenta_socket

isofs 36284 0

Các trường trong danh sách trên gồm: tên module, kích thước, số lần dùng và danh sách các module phụ thuộc vào nó. Số lần dùng là quan trọng để ngăn việc tải ra (unload) một module hiện đang dùng. Linux chỉ tải ra được các module nào có số lần dùng =0.

Có thể tải vào, tải ra một module bằng lệnh modprobe. Ví dụ, lệnh lsmod ở trên cho thấy module isofs có số lần dùng =0 và không có module nào phụ thuộc vào nó (isofs là module hỗ trợ các hệ thống file trên đĩa CD). Vậy có thể tải nó ra bằng lệnh sau:

# modprobe -r isofs

Nếu chạy lại lệnh lsmod sẽ thấy không còn module isofs nữa và tiết kiệm được 36,284 byte bộ nhớ. Nếu cho một đĩa CD vào ổ và để nó tự mount, nhân sẽ lại tải module isofs vào và số lần dùng nó được tăng lên thành 1. Nếu bây giờ ta lặp lại lệnh trên để tải nó ra thì sẽ bị báo lỗi vì nó đang được dùng:

# modprobe -r isofs

FATAL: Module isofs is in use.

Trong khi lệnh lsmod chỉ liệt kê các module đang được tải, lệnh lsmod -l sẽ liệt kê tất cả các module đã được cài đặt nằm trong thư mục /lib/modules/KERNELVERSION.

Lệnh modinfo liệt kê các thông tin về một module. Ví dụ dưới đây là thông tin về module snd-hda-intel (Intel sound driver):

# modinfo snd-hda-intel

filename: /lib/modules/2.6.20-16-generic/kernel/sound/pci/hda/snd-hda-intel.ko

description: Intel HDA driver

license: GPL

srcversion: A3552B2DF3A932D88FFC00C

alias: pci:v000010DEd0000055Dsv*sd*bc*sc*i*

alias: pci:v000010DEd0000055Csv*sd*bc*sc*i*

depends: snd-pcm,snd-page-alloc,snd-hda-codec,snd

vermagic: 2.6.20-16-generic SMP mod_unload 586

parm: index:Index value for Intel HD audio interface. (int)

parm: id:ID string for Intel HD audio interface. (charp)

parm: model:Use the given board model. (charp)

parm: position_fix:Fix DMA pointer (0 = auto, 1 = none, 2 = POSBUF, 3 = FIFO size). (int)

parm: probe_mask:Bitmask to probe codecs (default = -1). (int)

parm: single_cmd:Use single command to communicate with codecs (for debugging only). (bool)

parm: enable_msi:Enable Message Signaled Interrupt (MSI) (int)

parm: enable:bool

Các dòng bắt đầu bằng từ parm (viết tắt của parameter) là các tham số của module. Nếu muốn tìm hiểu về các tham số này, hãy cài mã nguồn của nhân. Sau đó tìm hiểu trong thư mục /usr/src/KERNELVERSION/Documentation

Hệ thống file /proc

Nhân Linux cũng cung cấp nhiều thông tin qua hệ thống file /proc. Để hiểu nó ta cần mở rộng khái niệm file.

Thay cho việc nghĩ file như các thông tin tĩnh lưu trên ổ cứng, CD, … ta cần xem file như bất kỳ loại thông tin gì có thể truy cập qua các lời gọi hệ thống như open/read/write/close đã nói ở trên và như vậy nghĩa là có thể truy cập bằng các chương trình xem file thông thường như cat hoặc less.

Các ‘file’ trong thư mục /proc là sự trừu tượng hóa ảnh của nhân, cung cấp nhiều thông tin về cấu trúc dữ liệu bên trong nhân. Ví dụ: nội dung file /proc/modules (hoặc thư mục /proc/modules) cho danh sách các module của nhân đang được tải vào bộ nhớ.

Tương tự, nội dung file /proc/meminfo cung cấp nhiều thông tin về bộ nhớ hơn là dùng các lệnh vmstat hoặc top.

Đặc biệt là các file nằm trong thư mục /proc/sys cho biết nhiều thông tin về hệ thống. Ví dụ dùng lệnh sau xem file ip_forward:

# cat /proc/sys/net/ipv4/ip_forward

0

Kết quả ‘0’ nghĩa là chức năng gateway của nhân hiện đang tắt.

Thú vị hơn khi biết rằng ta có thể viết vào các file đó. Lệnh sau đây sẽ bật chức năng trên lên:

# echo 1 > /proc/sys/net/ipv4/ip_forward

Thay cho dùng lệnh cat hoặc echo như trên để xem và thay đổi các settings trong /proc/sys, có thể dùng lệnh sysctl trực quan hơn. Hai lệnh dưới đây tương đương với hai lệnh cat và echo ở trên:

# sysctl net.ipv4.ip_forward

net.ipv4.ip_forward = 0

# sysctl -w net.ipv4.ip_forward=1

net.ipv4.ip_forward = 1

Đường dẫn sau lệnh sysctl dùng dấu chấm (.) thay cho dấu sược trái (/) thông thường và các đường dẫn trong đó là tương đối so với /proc/sys.

Lưu ý những thay đổi kiểu như trên chỉ có giá trị với kernel đang chạy và không được lưu lại. Khi reboot lại sẽ mất. Nếu muốn thay đổi cố định các settings, phải sửa file /etc/sysctl.conf.

Ghi chép về an ninh trong Linux

Ghi chép về an ninh trong Linux

I. Khái niệm chung

Trong hoạt động của máy tính, một thực thể có thể cần phải truy cập đến một thực thể khác để thực hiện một hành động nào đó. Ví dụ: một user đọc một file, một chương trình chơi nhạc gọi một chương trình khác để phát âm ra loa, v.v..

Các thực thể thực hiện các hành động đối với các thực thể khác được gọi là chủ thể truy cập (subject). Các thực thể được truy cập gọi là đối tượng truy cập (object). Chủ thể thường là một tiến trình (process) hoặc một mạch tiến trình (thread), đối tượng là file, thư mục, các cổng TCP, các vùng bộ nhớ dùng chung, v.v…

Để đảm bảo an ninh cho hệ thống, việc truy cập không thể tự do, bừa bãi mà cần được kiểm soát. Hệ thống kiểm soát truy cập (Access control systems) thực hiện ba dịch vụ chính: nhận dạng và xác thực ( identification and authenticationI&A), cấp phép ( authorization), và theo dõi ( accountability)

I.1-Xác nhận (Nhận dạng và xác thực – Identification and authentication – I&A)

Một chủ thể truy cập trước hết phải cung cấp một dấu hiệu nhận dạng (identity) hợp lệ (vd: một cặp username và password tối thiểu 6 ký tự chẳng hạn. Nếu chỉ có username, hoặc chỉ có pasword hoặc có cả username và password nhưng password chỉ có 5 ký tự là không hợp lệ). Sau khi kiểm tra là chủ thể có dấu hiệu nhận dạng hợp lệ, quá trình xác thực sẽ so sánh dấu hiệu đó với dấu hiệu đã đăng ký để xác nhận chủ thể đó đúng là nó.

Quá trình đó tương tự như khi ta trình giấy mời vào một cuộc họp quan trọng: đầu tiên người gác cổng phải xem giấy mời có hợp lệ không (đúng mẫu giấy mời, có chữ ký và dấu v.v…) sau đó tra xem tên ghi trên giấy và tên trên chứng minh thư có trùng nhau không và thậm chí tên đó có trong danh sách khách mời không v.v.. Nếu tất cả đều đúng thì ta được xác nhận đúng là người được mời họp và được vào.

I.2- Cấp phép (Authorization)

Việc cấp phép xác định chủ thể được làm những hành động gì trên đối tượng.

Trong các hệ điều hành, quyền của chủ thể trên đối tượng là tổ hợp của ba loại quyền truy cập cơ bản sau:

  • Read (R): chủ thể có thể

    • Đọc nội dung file

    • Đọc (liệt kê) nội dung thư mục

  • Write (W): chủ thể có thể thay đổi nội dung file hoặc thư mục.

  • Execute (X): nếu file là một chương trình, chủ thể có thể chạy chương trình đó.

Cách cấp phép cụ thể tùy theo mô hình (kỹ thuật) kiểm soát truy cập (xem dưới đây).

I.3- Theo dõi (Accountability)

Việc theo dõi các hành động của chủ thể được thực hiện tự động bằng các audit trails (records) và các file log. Dựa vào đó có thể:

  • Phát hiện các vi phạm quy tắc an ninh.

  • Tái tạo lại các sự cố về an ninh.

II. Các kỹ thuật kiểm soát truy cập (Access control techniques)

II.1-Kiểm soát truy cập tùy ý (Discretionary access control – DAC)

Trong kỹ thuật này, mỗi đối tượng đều có một chủ nhân (owner). Chủ nhân của đối tượng có toàn quyền quyết định chính sách truy cập đối tượng: cho chủ thể nào được truy cập và được làm những hành động gì trên đối tượng. Vì thế mới có tên là “Kiểm soát truy cập tùy ý”, theo ý muốn của chủ nhân đối tượng, không có một chính sách truy cập thống nhất trong toàn hệ thống.

Ví dụ khi một user tạo ra một file thì user đó là owner của file và có toàn quyền cho phép các user khác được truy cập vào file đó theo các mức độ khác nhau hoặc cấm hoàn toàn không cho ai ngoài mình được truy cập file.

Đây là kỹ thuật (hoặc còn gọi là mô hinh) kiểm soát truy cập phổ biến của các hệ thống file Linux hiện nay.

II.2-Kiểm soát truy cập bắt buộc (Mandatory access control – MAC)

Trong kỹ thuật MAC, chính sách truy cập các đối tượng được thiết lập chung, thống nhất, bắt buộc cho toàn hệ thống bởi người quản trị an ninh hệ thống ( security policy administrator), không phải theo ý thích của các chủ nhân các đối tượng. Kỹ thuật này thường được dùng trong các hệ thống phân cấp có các dữ liệu cần bảo mật cao như các hệ thống mật của chính phủ hoặc quân đội. Có hai đặc điểm quan trọng sau:

  • Nhãn bảo mật (Security label): trong hệ thống MAC, tất cả các chủ thể và đối tượng truy cập đều có nhãn bảo mật gán cho chúng. Để truy cập vào một đối tượng, chủ thể phải có nhãn với cấp bảo mật bằng hoặc cao hơn cấp bảo mật của đối tượng.

  • Kiểm soát xuất nhập dữ liệu: một trong các chức năng tối quan trọng của hệ MAC là kiểm soát việc nhập dữ liệu từ các máy khác vào và xuất dữ liệu ra các thiết bị bên ngoài (kể cả máy in). Trong quá trình xuất nhập, nhãn bảo mật phải luôn luôn được thiết lập và bảo trì một cách thích hợp sao cho các dữ liệu mật luôn luôn được bảo vệ.

Trong kỹ thuật DAC, chủ thể truy cập thừa kế các quyền của user khi truy cập đối tượng. Các quyền đó có thể quá rộng (ví dụ khi user là root, chương trình do root chạy sẽ có quyền truy cập như root) nên nếu chủ thể bị hacker điều khiển, tác hại sẽ lớn. MAC cho phép giới hạn quyền của chủ thể ở mức tối thiểu cần thiết, hạn chế được tác hại nói trên.

II.3-Kiểm soát truy cập dựa trên chức danh (Role-based access control – RBAC)

Trong kỹ thuật RBAC, hệ thống gồm nhiều chức danh khác nhau, tương tự như chức danh trong một tổ chức. Mỗi chức danh đó có quyền thực hiện các hành động khác nhau. Khác với MAC có hành động chỉ giới hạn ở các quyền đọc, viết, hành động trong RBAC từ mức đơn giản đọc, viết đến mức phức tạp là một chuỗi các hành động tạo thành một giao dịch (transaction) hoàn chỉnh. RBAC cũng giống MAC là chính sách truy cập được thiết lập tập trung bởi người quản trị an ninh mà không tùy thuộc vào chủ nhân các đối tượng như với DAC.

Ba quy tắc cơ bản của RBAC:

1. Gán chức danh: một chủ thể truy cập chỉ có thể thực hiện hành động nếu nó được gán một chức danh nhất định trong hệ thống.

2. Cho phép đảm nhiệm chức danh: một chủ thể chỉ có thể được gán một số chức danh nhất định. (tương tự như một nhân viên chưa có bằng đại học thì không thể làm trưởng phòng).

3. Cho phép thực hiện giao dịch: một chủ thể đã được gán một chức danh chỉ được thực hiện các giao dịch mà chức danh đó được phép làm.

RBAC thường được dùng trong các phần mềm thương mại hoặc quân sự, nơi cần bảo mật các giao dịch.

III. SELinux

SELinux là một công nghệ tăng cường an ninh cho nhân Linux. SELinux là sản phẩm chung của cục An ninh Quốc gia Mỹ và một số công ty tin học, đã được tích hợp vào nhân Linux (Linux kernel) từ phiên bản 2.6 trở đi.

Các bản Linux trước 2.6 chỉ dùng phương pháp quản lý truy cập tùy ý (DAC). SELinux thông qua cơ chế mô đun an ninh ( Linux Security Modules – LSM) bổ xung thêm hai phương pháp quản lý truy cập MAC và RBAC vào nhân Linux.


Hình 1: Chính sách an ninh và các module an ninh tăng cường độc lập với nhau trong SELinux.

Trong hình 1, người quản trị an ninh hệ thống dùng các công cụ chính sách (Policy utilities) để thiết lập chính sách an ninh (Security policy) chung cho hệ thống. Mỗi khi nhân Linux cần truy cập một đối tượng nào đó, trước tiên nó sẽ gọi (Request) hàm an ninh trong Security module, hàm này kiểm tra các điều kiện truy cập theo Security policy đã thiết lập rồi cho phép (Response) thực hiện truy cập.

IV. AppArmor

SELinux tuy tốt về mặt an ninh nhưng phức tạp, khó sử dụng. AppArmor là bộ phần mềm được xem là một giải pháp thay thế thân thiện, dễ sử dụng hơn. Các đặc điểm chính:

  • Cũng dựa trên cơ chế mô đun an ninh LSM như SELinux.

  • Mỗi chương trình có một security profile giới hạn quyền truy cập của chương trình ở mức tối thiểu đủ để thực hiện công việc của mình. Các profile này do người quản trị an ninh lập và như vậy áp dụng kỹ thuật MAC vào Linux. Chương trình chỉ được hoạt động trong giới hạn mà security profile của nó cho phép.

  • Ngoài các profile lập bằng tay, AppArmor còn có mode tự học: các hoạt động của chương trình được lưu lại trong log, các log này có thể chuyển thành profile.

  • SELinux dùng secutity label do đó đòi hỏi hệ thống file phải hỗ trợ dạng label đó. AppArmor không dùng secutity label nên áp dụng với hệ thống file nào cũng được.

  • SELinux truy cập file dựa trên số inode (inode number), AppArmor truy cập file bằng đường dẫn (path). Cách nào hay hơn thì còn đang cãi nhau. Một trong những phần mềm an ninh mới nhất dùng kỹ thuật MAC nhưng truy cập file bằng đường dẫn là Tomoyo.

V. Ứng dụng

Các máy để bàn thường chỉ kiểm soát truy cập theo kỹ thuật DAC. Vì vậy các bản Linux desktop không cài sẵn SELinux hoặc AppArmor. OpenSUSE là bản Linux desktop có đầy đủ giao diện đồ họa nhất để thiết lập và quản trị AppArmor (có cả wizard) nhưng mặc định cũng không kích hoạt (enable) AppArmor. Mandriva có các gói phần mềm SELinux và AppArmor trong kho nhưng không cài có lẽ vì đã có Msec. Linux Mint có cài một vài thư viện của hai phần mềm trên nhưng không đầy đủ.

Trong một thế giới kết nối Internet, các máy để bàn đều bị nhòm ngó và có nguy cơ bị biến thành máy tính âm binh (zombie) trong một mạng máy tính ma (botnet) thì có lẽ tăng cường an ninh bằng SELinux hoặc AppArmor vẫn tốt hơn mặc dù như vậy sẽ gây phức tạp hơn cho việc cài thêm các phần mềm mới.

Còn với các máy chủ thì tăng cường an ninh bằng SELinux hoặc AppArmor là đương nhiên.

VI. Ảo hóa hệ điều hành

Một trong những giải pháp nữa để tăng cường an ninh là dùng các máy chủ ảo. Trên một máy chủ vật lý chạy một hệ điều hành chủ, trong hệ điều hành chủ dùng phần mềm ảo hóa để tạo nên một số máy chủ ảo. Mỗi máy chủ ảo chạy một hệ điều hành và chương trình ứng dụng riêng. Các máy chủ ảo cô lập so với nhau và với máy chủ chính. Như vậy khi một máy ảo bị tấn công không ảnh hưởng tới các máy khác.

Multimedia trong Linux (sửa, bổ xung và hết)

Hệ thống multimedia trong Linux.

Multimedia trong Linux khá rắc rối. Bài này ghi lại vài khái niệm tìm hiểu được để đỡ lúng túng khi sử dụng.

I. Một vài khái niệm

Multimedia là từ chung để chỉ các dạng dữ liệu: văn bản (text), âm thanh (audio), ảnh tĩnh (still image), hoạt hình (animation) và phim (video).

Các dữ liệu audio, video được tạo ra (bằng máy ảnh, máy quay video) hoặc được chơi lại (playback, bằng loa, đèn hình TV hay màn hình máy tính) dưới dạng các sóng điện tử liên tục. Các sóng đó phải được chuyển thành dữ liệu số ( encoder, mã hóa: từ sóng thành các dãy số 0,1) rồi nén hoặc không nén để có thể lưu trữ, biên tập, truyền đi trên máy tính. Khi encoder, dữ liệu có thể để nguyên (lossless, không mất) hoặc bỏ đi các phần thừa mà con người không cảm nhận được để giảm dung lượng dữ liệu tiện cho lưu trữ hoặc truyền trên mạng (lossy, có mất dữ liệu).

Để con người có thể thưởng thức được (nghe, xem), các dữ liệu số multimedia nói trên lại được chuyển đổi ngược lại từ các dãy số 0,1 thành sóng điện từ làm kêu loa hoặc vẽ hình lên màn hình. Quá trình chuyển đổi ngược đó gọi là decoder, giải mã.

Một bài hát, khi ghi vào băng từ hoặc đĩa than vẫn ở dạng các sóng âm, khi ghi thành file MP3 là đã được mã hóa sang dạng số. Tương tự, một bức ảnh chụp lên phim được lưu dưới dạng các phổ màu liên tục, khi lưu thành file JPEG, PNG, … là đã mã hóa sang dạng số.

Codec (viết tắt của en coder/ decoder)là các phần mềm/thuật toán/công nghệ dùng để mã và giải mã (có nén hoặc không) dữ liệu multimedia như nói trên.

hàng nghìn codec nhằm vào các mục tiêu khác nhau: codec cho điện thoại phải có độ trễ thấp, chất lượng âm không cần cao; ngược lại, codec để chơi nhạc chất lượng âm phải cao nhưng độ trễ không quan trọng, v.v….

Multimedia Format: sau khi mã hóa, dữ liệu multimedia được lưu thành các file có định dạng (format) khác nhau. Một file ảnh có thể lưu dưới dạng file jpg, png, bmp, … Một đoạn phim thường gồm ba loại dữ liệu: video, audio và metadata để đồng bộ hình với tiếng. Ba loại dữ liệu đó được lưu chung trong một loại format gọi là media container format (ví dụ avi). Nhiều loại codec khác nhau có thể lưu file cùng một format avi, tất nhiên là chất lượng phim tùy theo codec.

Một vài codec và format chính (có hàng nghìn codec và hàng trăm format):

Microsoft: Microsoft có hai hệ codec phổ biến là Windows Media Audio (WMA) và Windows Media Video (WMV). Mỗi hệ gồm một số codec. Các file được mã hóa bằng hai codec trên được lưu theo media container format ASF (Advanced System Format). Tuy nhiên phần đuôi file (extension) thì tùy: file audio có đuôi là .wma, file video: .wmv nhưng nếu muốn cả hai loại file trên có thể có đuôi là .asf.

Microsoft còn có một container format cổ hơn là AVI (Audio Video Interleave), đuôi file .avi. Cả hai loại format ASF và AVI có thể chứa được nhiều loại codec khác, không bắt buộc phải là WMA và WMV.

MPEG: là tên tắt của Nhóm chuyên gia về ảnh động (Moving Picture Experts Group) chuyên thiết lập các chuẩn ISO về nén và truyền audio, video. MPEG-1 là chuẩn đầu tiên trong đó có MPEG-1 Audio Layer 3 ( MP3) vẫn còn rất phổ biến hiện nay. MP4 (viết tắt của MPEG-4 Part14) là một loại media container format, đuôi file cũng là .mp4.

DivX: là một video codec nổi tiếng vì có khả năng nén các file video lớn xuống dung lượng thấp nhưng vẫn giữ được chất lượng hình khá. Từ DivX 6 có thêm một media container format DivX Media Format (DMF), đuôi file là .divx, dành cho DVD-Video. DivX là một sản phẩm nguồn đóng.

Xvid: một video codec cạnh tranh với DivX, nguồn mở.

RealAudio/RealVideo: là các format của công ty RealNetwork cho file audio và video. Mỗi format này có thể dùng các codec khác nhau. Đuôi file tương ứng là .ra và .rv. Ngoài ra còn có một format tổ hợp cho cả audio và video gọi là Real Media Format có đuôi file là .rm. Các file .ram và .smil dùng cho các link từ website để chạy các file tải về từ Internet (streaming).

FFmpeg: là một dự án nguồn mở xây dựng các phần mềm và thư viện để ghi, chuyển đổi và truyền dẫn audio/video. Thư viện libavcodec cung cấp codec cho hàng chục loại format audio/video khác nhau.

Ogg: là media container format nguồn mở dành cho audio/video chất lượng cao. Trong đó, Ogg Theora là video codec, Ogg Vorbis là audio codec. Trước đây, file .ogg gồm cả audio và/hoặc video. Từ 2007, file .ogg chỉ còn là file audio, file .oga là file audio, file .ogv là file video.

Flash Video: là một media container format dùng chơi video trên các trang web bằng Adobe Flash Player. Có hai format là FLV và F4V, trong đó F4V mới hơn tuân theo chuẩn ISO. Đuôi file .f4v dành cho file video mp4, đuôi .f4a dành cho audio mp4. Nội dung trong file có thể dùng các codec khác nhau: H264, mp3, …

Adobe còn một format nữa là SWF (đuôi file .swf ) chuyên dùng cho đồ họa vector động trên web.

QuickTime: là một media container format độc quyền của Apple Inc. Đuôi file là .mov hoặc .qt. Mỗi loại dữ liệu: video, audio, text, … được lưu thành một track.

II. Driver cho sound card: ALSA

ALSA (Advanced Linux Sound Architecture) là một hệ thống con của nhân Linux gồm các driver cho sound card và dụng cụ nhạc điện tử (MIDI), các thư viện để lập trình giao tiếp với các thiết bị nói trên và một số công cụ cần thiết (mixer,…). Hiểu đơn giản ALSA tức là driver cho sound card.

Các driver đều dưới dạng module để có thể nạp khi cần. ALSA hiện nay thay thế cho hệ thống cũ OSS (Open Sound System) nhưng vẫn tương thích với các phần mềm OSS. OSS cũng là giao diện với các soundcard nhưng có nhiều hạn chế nên bị thay thế.

Ví dụ trong Mandriva, khi mở Control Center > Hardware > Sound Configuration, ta thấy màn hình sau:

Sound card đang dùng là Intel 82801G, driver là snd_hda_intel.

III. Sound Server

Nếu sử dụng âm thanh đơn giản thì chỉ cần sound driver (alsa, oss, …) là đủ. Nhưng trong những trường hợp phức tạp hơn thì phải có hẳn một máy chủ âm thanh Sound Server trong hệ điều hành làm các nhiệm vụ sau:

  • Nhận các luồng âm thanh từ nhiều nguồn khác nhau (micro hoặc các phần mềm chơi nhạc, phát âm, các luồng âm streaming tải về từ Internet,…).

  • Hòa trộn (mix) các luồng âm đó thành một rồi chuyển đến các thiết bị phát âm (các sound card trên máy, các sound server trên các máy khác trên mạng để phát âm tại đó,…). Tóm lại là tiếp nhận và điều phối các luồng âm thanh trong hệ thống.

  • Thực hiện một số chức năng khác mà sound driver không có.

Một vài sound server phổ biến:

aRts ( analog Real time synthesizer ): một cơ chế xử lý (framework) các luồng âm thanh theo thời gian thực, trong đó có một sound server (artsd), dùng phổ biến cho KDE2, 3, hiện ngừng phát triển. KDE4 chuyển sang dùng PulseAudio và Phonon.

JACK ( JACK Audio Connection Kit ): một sound server nguồn mở cạnh tranh với aRts, chạy được trên Linux, Mac, Windows. Nhiệm vụ chính là tạo kết nối âm độ trễ thấp giữa ứng dụng và thiết bị phát âm. Một số ứng dụng như Audacity, XMMS dùng sound server này.

ESD hoặc EsounD ( Enlightened Sound Daemon ): sound server dành riêng cho môi trường đồ họa Enlightenment và GNOME. Đây là sound server lâu đời thuộc dự án GNOME nên hầu hết các ứng dụng âm thanh đều hỗ trợ nó. Tuy nhiên từ tháng 4/2009, các module của nó chuyển vào thư viện libcanberra hoặc GStreame, PulseAudio.

PulseAudio : sound server nguồn mở chạy trên Windows và Linux, hiện đang được đưa vào thay cho ESD. Các bản Linux gần đây (Ubuntu, Fedora, Mandriva, openSUSE,…) đều dùng PulseAudio, ví dụ Ubuntu từ bản 8.04.

Cơ chế hoạt động của PulseAudio theo hình trên:

  • Các ứng dụng (Mplayer, Xine,…) chuyển âm thanh cho PulseAudio trực tiếp hoặc qua các thư viện trung gian. Các module tương ứng của PulseAudio được nạp khi cần để tiếp nhận các nguồn âm đó.

  • Các nguồn âm khác (từ micro nối với sound card, từ một máy khác trên mạng, …) cũng chuyển âm cho các driver ALSA/OSS hardware drivers hoặc các Network stack. Các driver đó lại chuyển tiếp âm cho PulseAudio thông qua các card ảo ALSA source, OSS source, RTP source, … là các cổng nhận âm ( source ) của PulseAudio.

  • PulseAudio server core tiếp nhận các nguồn âm từ các cổng nhận, xử lý (mix) rồi chuyển ra các cổng phát gọi là sink . Âm từ ví dụ ALSA sink sẽ chuyển cho ALSA driver để chuyển vào sound card và phát ra loa nối với sound card. Âm để phát trên máy khác trong mạng sẽ đi từ ví dụ RTP sink, qua các network stack ra network card để theo dây mạng đến các máy khác.

Như vậy, PulseAudio đóng vai trò điều hành trung gian, nhờ có nó:

  • Chỉnh được âm lượng cho từng ứng dụng thông qua phần mềm PulseAudio Volume Control.

  • Các nguồn phát âm (phần mềm chơi nhạc, micro, các máy khác trên mạng, …) chỉ cần giao tiếp với PulseAudio như với một sound card ảo, không cần hỗ trợ nhiều cơ chế xử lý âm, nhiều giao thức, … Các driver của thiết bị phát âm cũng chỉ cần giao tiếp với PulseAudio.

Nếu không dùng đến, có thể disable hoặc gỡ bỏ PulseAudio.

IV. Driver cho graphic card và Xorg server

Các loại ảnh, video, hoạt hình hiển thị trên màn hình phụ thuộc vào các driver của card màn hình (graphic card) và phần mềm Xorg server. Một vài thông tin liên quan xem tại đây.

V. Cơ chế xử lý dữ liệu multimedia (Multimedia framework)

Một cơ chế xử lý dữ liệu multimedia (Multimedia framework – MMF) là một hệ thống phần mềm xử lý các dữ liệu multimedia trên máy tính hoặc mạng máy tính theo một cơ chế nào đó. Hệ thống gồm một giao diện lập trình ứng dụng API, các module hỗ trợ các loại codecs, container formats và hỗ trợ các giao thức truyền dẫn luồng âm thanh, video (streaming media) qua mạng.

MMF dùng làm hệ thống nền (back-end) cho các ứng dụng chơi nhạc, video, các phần mềm biên tập âm thanh và video, các ứng dụng videoconferencing và các phần mềm multimedia khác.

Một vài MMF phổ biến:

GStreamer: một MMF nguồn mở chạy được trên Linux, Solaris, Mac, Windows.

GStreamer chia các công đoạn xử lý thành các bộ phận (element). Các bộ phận nối với nhau bằng các đường ống (pipeline) có đầu ra (source pad) và đầu vào (sink pad). Trong hình trên là ví dụ chơi một file MP3: bộ phận File đọc file từ ổ cứng rồi chuyển cho bộ phận giải mã (Decoder). Decoder chuyển dữ liệu số thành mã xung (Pulse-code Modulation). Mã xung theo đường ống chuyển cho bộ phận ALSA driver để từ đó đưa ra loa.

Mỗi bộ phận (chức năng) của GStreamer được lập trình dưới dạng plugin (phần mềm bổ xung) tạo nên các thư viện dùng chung. Hiện tại có ba bộ plugin là Good, BadUgly. Good plugins gồm các plugin chất lượng cao, tuân theo giấy phép nguồn mở LGPL, đã được kiểm định đầy đủ. Bad plugins gồm các plugin chưa hoàn chỉnh về mặt nào đó như Good (chất lượng chưa cao, hoặc chất lượng cao nhưng còn thiếu một cái gì đó, …). Ugly plugins là các plugins chất lượng tốt nhưng có vấn đề về bản quyền.

GNOME là nơi đầu tiên dùng công nghệ này. Ví dụ trình Totem (trên menu là Movie Player) hỗ trợ GStreamer. Một số điện thoại Nokia cũng dùng GStreamer.

DirectShow: MMF của Microsoft (hiện được thay bằng Media Foundation trong Windows Vista và Windows 7).

Tương tự như trên, DirectShow chia các công đoạn xử lý media thành các filter, mỗi filter có đầu vào (input pin) và đầu ra (output pin) để kết nối với nhau. Các luồng dữ liệu media được chuyển qua từng filter tương tự như sơ đồ trên của GStreamer. Nhược điểm của DirectShow là số codec được hỗ trợ rất hạn chế.

FFmpeg: là một dự án nguồn mở xây dựng các phần mềm và thư viện để ghi, chuyển đổi và truyền dẫn audio/video. Thư viện libavcodec cung cấp codec cho hàng chục loại format audio/video khác nhau. Thư viện libavformat có các công cụ để dồn/tách kênh (mux/demux) truyền dẫn media.

Trình media player Mplayer (và giao diện Smplayer) dùng backend là FFmpeg.

VLC: VLC vừa là tên của một media player, vừa là một MMF, nguồn mở. VLC hỗ trợ khá nhiều codec (dùng cả libavcodec và có các codec không có trong libavcodec), về mặt này nó khá hơn Mplayer. VLC chạy được trên nhiều hệ điều hành (Windows, Mac, Linux, Solaris, …). VLC chơi được các DVD mã hóa, chơi DVD không cần biết mã vùng. Đặc biệt nó có thể chơi các file video còn đang download dở hoặc bị hỏng.

Xine: một máy chơi video và nhạc (multimedia playback engine) nguồn mở, chạy được trên nhiều hệ điều hành. Thư viện xine-lib có thể decoder nhiều loại codec khác nhau. Xine cũng dùng các thư viện của các dự án khác như FFmpeg, libmpeg2, …

Phonon: Phonon được xếp vào loại MMF nhưng thực ra nó chỉ là một giao diện lập trình ứng dụng (API – Application Programming Interface) dành riêng cho môi trường đồ họa KDE4. KDE4 dùng Phonon làm trung gian để giao tiếp với nhiều MMF, backend khác nhau (Xine, GStreamer, ….).

Phonon cho phép cấu hình tập trung (hiện nay mới chỉ là audio, chưa có video). Ví dụ trong Mandriva KDE4, mở mục Multimedia trong System Settings (Configure Your Desktop) ta có:

Trong hình trên, về nguyên tắc có thể chọn các audio output (cột bên phải) cho các hệ thống âm thanh ở cột bên trái. Nhấn vào tab Backend:


Như vậy trên máy này đã cài hai backend và GStreamer là ưu tiên.

VI. Vài vấn đề khác

Như vậy rắc rối chính khi chơi multimedia trên Linux là ở hai vấn đề:

  1. Có quá nhiều codecs, trong đó có nhiều cái không phải nguồn mở hoặc không miễn phí. Do đó các bản Linux “lớn” như Ubuntu, openSUSE, Mandriva mặc định sẽ không cài sẵn để tránh rắc rối. Người dùng phải tự cài và tự chịu trách nhiệm. Các bản Linux “ nhỏ” như Linux Mint, PCLinuxOS thì cài sẵn để tạo thuận lợi cho người dùng.

  2. Có nhiều backend khác nhau, mỗi cái đều có cái hay dở riêng và cũng chưa có cái nào thật hoàn chỉnh. Hiện cũng đang có những dự án nhằm mục tiêu thống nhất backend cho Linux.

Theo kinh nghiệm cá nhân thì hai trình SMplayerVLC hiện nay tương đối đáp ứng được nhu cầu hơn cả. Khi cài SMplayer xong, lưu ý vào Options → Preferences → General → Video → Output driver (và Audio → Output driver) chọn các driver thích hợp là có thể chơi được hầu hết các định dạng multimedia phổ biến như với Windows Media Player.

Khi dùng Windows Media Player để nghe nhạc, plugin DFX cho các hiệu ứng âm thanh như 3D sourround, ambien, hyperbass, … Trong Linux, bật các hiệu ứng 3D âm thanh như sau:

Với các bản Linux KDE, mở Menu – Sound&Video – KMix (Sound Mixer) ta có:


Trong hình trên có ba mục: 3D Control-Switch, 3D Control-Depth và 3D Control-Center (nếu chưa có thì vào Settings – Configure Channels để add nó vào. Bỏ chọn mục Mute của 3D Control-Switch để bật hiệu ứng 3D rồi chỉnh hai cái còn lại. Chú ý là các mục trên phụ thuộc tính năng sound card, có sound card không có ba mục trên nhưng lại có Surround.

Với các bản Linux Gnome (Ubuntu, …), cần cài thêm ALSA Mixer hoặc GNOME ALSA Mixer rồi mở ra cũng có màn hình tương tự như trên.

Nghe nhạc trong Windows mà không bật DFX, trong Linux không bật các hiệu ứng 3D nói trên thì chán hẳn.

Multimedia trong Linux

Hệ thống multimedia trong Linux.

Multimedia trong Linux khá rắc rối. Bài này ghi lại vài khái niệm tìm hiểu được để đỡ lúng túng khi sử dụng.

I. Một vài khái niệm

Multimedia là từ chung để chỉ các dạng dữ liệu: văn bản (text), âm thanh (audio), ảnh tĩnh (still image), hoạt hình (animation) và phim (video).

Các dữ liệu audio, video được tạo ra (bằng máy ảnh, máy quay video) hoặc được chơi lại (playback, bằng loa, đèn hình TV hay màn hình máy tính) dưới dạng các sóng điện tử liên tục. Các sóng đó phải được chuyển thành dữ liệu số ( encoder, mã hóa: từ sóng thành các dãy số 0,1) rồi nén hoặc không nén để có thể lưu trữ, biên tập, truyền đi trên máy tính. Khi encoder, dữ liệu có thể để nguyên (lossless, không mất) hoặc bỏ đi các phần thừa mà con người không cảm nhận được để giảm dung lượng dữ liệu tiện cho lưu trữ hoặc truyền trên mạng (lossy, có mất dữ liệu).

Để con người có thể thưởng thức được (nghe, xem), các dữ liệu số multimedia nói trên lại được chuyển đổi ngược lại từ các dãy số 0,1 thành sóng điện từ làm kêu loa hoặc vẽ hình lên màn hình. Quá trình chuyển đổi ngược đó gọi là decoder, giải mã.

Một bài hát, khi ghi vào băng từ hoặc đĩa than vẫn ở dạng các sóng âm, khi ghi thành file MP3 là đã được mã hóa sang dạng số. Tương tự, một bức ảnh chụp lên phim được lưu dưới dạng các phổ màu liên tục, khi lưu thành file JPEG, PNG, … là đã mã hóa sang dạng số.

Codec (viết tắt của en coder/ decoder)là các phần mềm/thuật toán/công nghệ dùng để mã và giải mã (có nén hoặc không) dữ liệu multimedia như nói trên.

hàng nghìn codec nhằm vào các mục tiêu khác nhau: codec cho điện thoại phải có độ trễ thấp, chất lượng âm không cần cao; ngược lại, codec để chơi nhạc chất lượng âm phải cao nhưng độ trễ không quan trọng, v.v….

Multimedia Format: sau khi mã hóa, dữ liệu multimedia được lưu thành các file có định dạng (format) khác nhau. Một file ảnh có thể lưu dưới dạng file jpg, png, bmp, … Một đoạn phim thường gồm ba loại dữ liệu: video, audio và metadata để đồng bộ hình với tiếng. Ba loại dữ liệu đó được lưu chung trong một loại format gọi là media container format (ví dụ avi). Nhiều loại codec khác nhau có thể lưu file cùng một format avi, tất nhiên là chất lượng phim tùy theo codec.

Một vài codec và format chính (có hàng nghìn codec và hàng trăm format):

Microsoft: Microsoft có hai hệ codec phổ biến là Windows Media Audio (WMA) và Windows Media Video (WMV). Mỗi hệ gồm một số codec. Các file được mã hóa bằng hai codec trên được lưu theo media container format ASF (Advanced System Format). Tuy nhiên phần đuôi file (extension) thì tùy: file audio có đuôi là .wma, file video: .wmv nhưng nếu muốn cả hai loại file trên có thể có đuôi là .asf.

Microsoft còn có một container format cổ hơn là AVI (Audio Video Interleave), đuôi file .avi. Cả hai loại format ASF và AVI có thể chứa được nhiều loại codec khác, không bắt buộc phải là WMA và WMV.

MPEG: là tên tắt của Nhóm chuyên gia về ảnh động (Moving Picture Experts Group) chuyên thiết lập các chuẩn ISO về nén và truyền audio, video. MPEG-1 là chuẩn đầu tiên trong đó có MPEG-1 Audio Layer 3 ( MP3) vẫn còn rất phổ biến hiện nay. MP4 (viết tắt của MPEG-4 Part14) là một loại media container format, đuôi file cũng là .mp4.

DivX: DivX codec nổi tiếng vì có khả năng nén các file video lớn xuống dung lượng thấp nhưng vẫn giữ được chất lượng hình khá. Từ DivX 6 có thêm một media container format DivX Media Format (DMF), đuôi file là .divx, dành cho DVD-Video.

RealAudio/RealVideo: là các format của công ty RealNetwork cho file audio và video. Mỗi format này có thể dùng các codec khác nhau. Đuôi file tương ứng là .ra và .rv. Ngoài ra còn có một format tổ hợp cho cả audio và video gọi là Real Media Format có đuôi file là .rm. Các file .ram và .smil dùng cho các link từ website để chạy các file tải về từ Internet (streaming).

FFmpeg: là một dự án nguồn mở xây dựng các phần mềm và thư viện để ghi, chuyển đổi và truyền dẫn audio/video. Thư viện libavcodec cung cấp codec cho hàng chục loại format audio/video khác nhau.

Ogg: là media container format nguồn mở dành cho audio/video chất lượng cao. Trong đó, Ogg Theora là video codec, Ogg Vorbis là audio codec. Trước đây, file .ogg gồm cả audio và/hoặc video. Từ 2007, file .ogg chỉ còn là file audio, file .oga là file audio, file .ogv là file video.

Flash Video: là một media container format dùng chơi video trên các trang web bằng Adobe Flash Player. Có hai format là FLV và F4V, trong đó F4V mới hơn tuân theo chuẩn ISO. Đuôi file .f4v dành cho file video mp4, đuôi .f4a dành cho audio mp4. Nội dung trong file có thể dùng các codec khác nhau: H264, mp3, …

Adobe còn một format nữa là SWF (đuôi file .swf ) chuyên dùng cho đồ họa vector động trên web.

II. ALSA

ALSA (Advanced Linux Sound Architecture) là một hệ thống con của nhân Linux gồm các driver cho sound card và dụng cụ nhạc điện tử (MIDI), các thư viện để lập trình giao tiếp với các thiết bị nói trên và một số công cụ cần thiết (mixer,…). Hiểu đơn giản ALSA tức là driver cho sound card.

Các driver đều dưới dạng module để có thể nạp khi cần. ALSA hiện nay thay thế cho hệ thống cũ OSS (Open Sound System) nhưng vẫn tương thích với các phần mềm OSS. OSS cũng là giao diện với các soundcard nhưng có nhiều hạn chế nên bị thay thế.

Ví dụ trong Mandriva, khi mở Control Center > Hardware > Sound Configuration, ta thấy màn hình sau:

Sound card đang dùng là Intel 82801G, driver là snd_hda_intel.

III. Sound Server

Nếu sử dụng âm thanh đơn giản thì chỉ cần sound driver (alsa, oss, …) là đủ. Nhưng trong những trường hợp phức tạp hơn thì phải có hẳn một máy chủ âm thanh Sound Server trong hệ điều hành làm các nhiệm vụ sau:

  • Nhận các luồng âm thanh từ nhiều nguồn khác nhau (micro hoặc các phần mềm chơi nhạc, phát âm, …).

  • Chuyển các luồng âm đó đến các thiết bị phát âm (các sound card trên máy, các sound server trên các máy khác trên mạng để phát âm tại đó,…).

  • Thực hiện một số chức năng khác mà sound driver không có.

(còn tiếp tại đây)

/home/zxc/DATA/Mydocuments/Dropbox/Bai viet blog/Hệ thống multimedia trong Linux.odt Page4of4

Thiết kế kiến trúc hệ thống mở

Đọc hai bài báo gần đây (bài 1bài 2) cũng thấy mừng cho ngành Công nghệ Thông tin nước nhà bắt đầu đi vào nề nếp. Đây cũng là vấn đề tôi ấp ủ nhưng chưa làm được, xả ra trên blog vậy.

Cách đây khoảng 3 năm, đặt vấn đề với FIS về “Thiết kế kiến trúc hệ thống” theo một framework có sẵn còn thấy ngơ ngác, đưa cho cái link TOGAF thì tấm tắc khen hay. Vậy mà bây giờ đã có người đỗ chứng chỉ! Tuy nhiên đây là một công việc khá khó, khối lượng lớn, một người e rằng quá ít.

Ngay cả việc bộ Ngoại giao giao cho Microsoft thiết kế kiến trúc chuẩn cũng là việc đáng bàn. Nhưng cái đó để sau.

Vậy thì “Kiến trúc hệ thống” hoặc “Kiến trúc doanh nghiệp”, rộng hơn là “Kiến trúc một tổ chức” tạm dịch từ “Enterprise Architecture” là cái gì?

Khi xây một cái nhà, bước đầu tiên là thiết kế kiến trúc (nếu cả một khu nhà lớn thì trước đó còn có cả quy hoạch nữa). Thiết kế kiến trúc xong mới đến thiết kế xây dựng, thiết kế thi công và thiết kế hoàn công.

Xây một hệ thống thông tin lớn cũng vậy. Kiến trúc của một tổ chức được định nghĩa theo ISO/IEC 42010:2007 là:

Tổ chức cơ bản của một hệ thống thể hiện trong các bộ phận cấu thành, quan hệ giữa các bộ phận với nhau và với môi trường ngoài và trong các nguyên tắc chỉ đạo việc thiết kế và phát triển các bộ phận đó

The fundamental organization of a system, embodied in its components, their relationships to each other and the environment, and the principles governing its design and evolution.”

Qua định nghĩa này, kiến trúc hệ thống liên quan đến toàn bộ các mặt hoạt động của một tổ chức mà trong đó, hệ thống tin học chỉ là một bộ phận công cụ.

Kiến trúc hệ thống đại thể có các thành phần lớn sau:

  1. Kiến trúc nghiệp vụ (Business Architecture): xác định chiến lược hoạt động của tổ chức, cách quản lý, hệ thống tổ chức và các hoạt động nghiệp vụ chính.
  2. Kiến trúc ứng dụng (Application Architecture): là bản thiết kế (đến mức nào?) các ứng dụng, tương tác giữa chúng với nhau và quan hệ của chúng với các hoạt động nghiệp vụ chính của tổ chức.
  3. Kiến trúc dữ liệu (Data Architecture): mô tả cấu trúc các kho dữ liệu logic và vật lý của tổ chức và các tài nguyên dùng quản lý dữ liệu.
  4. Kiến trúc công nghệ (Technology Architecture): mô tả hạ tầng phần mềm để khai triển các ứng dụng quan trọng, cốt lõi của hệ thống.

Mục 1 là trách nhiệm các nhà lãnh đạo, mục 2 và 3 có khi được gọi chung là Kiến trúc hệ thống thông tin (Information System Architecture).

Khối lượng công việc thiết kế như trên rất lớn và rất phức tạp. Vì vậy cần phải có một quy trình thiết kế tiêu chuẩn và vô số công cụ hỗ trợ gọi chung là Phương pháp kiến trúc hoặc Khung kiến trúc (Achitecture Framework).

Phương pháp kiến trúc là một công cụ dùng để phát triển các kiến trúc bao gồm:

  • một phương pháp thiết kế hệ thống thông tin gồm nhiều bộ phận có tương tác với nhau
  • một bộ các công cụ thiết kế và một từ điển thuật ngữ thống nhất.
  • một danh sách các tiêu chuẩn nên dùng
  • một danh sách các sản phẩm thoả mãn chuẩn có thể dùng để xây dựng nên các bộ phận của hệ thống thông tin.

Nói nôm na nó là bản hướng dẫn từng bước thiết kế kiến trúc như thế nào.

Cái framework này rất quan trọng để có được một thiết kế đúng, hợp lý, thống nhất chung cho toàn hệ thống. Vì vậy chính phủ một số nước cũng như các bộ quốc phòng Anh, Mỹ và thậm chí NATO đều ban hành framework chuẩn cho hệ thống của mình (xem thêm). Các công ty và các loại tổ chức khác thì có thể chọn một trong các frameworks phổ biến để áp dụng.

TOGAF (The Open Group Architecture Framework) là một framework do tổ chức Open Group xây dựng. Open Group là một consortium độc lập với công nghệ và nhà cung cấp có mục tiêu hỗ trợ truy cập thông tin tích hợp bên trong và giữa các tổ chức dựa trên các chuẩn mở và tính tương tác toàn cầu (The Open Group is a vendor- and technology-neutral consortium, whose vision of Boundaryless Information Flow™ will enable access to integrated information within and between enterprises based on open standards and global interoperability.) Thành viên của Open Group có các đại công ty như HP, IBM, HSBC, các trường, viện, và các tổ chức, cá nhân khác.

Phiên bản 1 của TOGAF ra đời năm 1995 trên cơ sở framework TAFIM của bộ quốc phòng Mỹ. Phiên bản 9 là mới nhất hiện nay. Tài liệu được công bố công khai trên mạng và có thể tải về dùng nội bộ miễn phí (dùng thương mại, thiết kế kiếm tiền thì phải trả tiền).

Mỗi bản TOGAF là một tài liệu dài cỡ 300 trang mô tả rất chi tiết các khái niệm, các bước thiết kế cụ thể, các tiêu chuẩn, form mẫu, các công cụ hỗ trợ. Xem thoáng qua thì rất hay và rất thích nhưng hiểu được thì … chết liền, mất khá nhiều thời gian và nơ ron thần kinh mà cũng chưa chắc đã hiểu, chưa nói đến ứng dụng!

Điểm hay của TOGAF là nó vô tư (độc lập với công nghệ và nhà cung cấp, dựa trên các chuẩn mở), tài liệu hướng dẫn từng bước rất chi tiết, có diễn đàn hỗ trợ, nói tóm lại là nó mở. Ai đã từng làm thiết kế đều biết cửa ăn hoa hồng dễ nhất là trói thiết kế vào vật tư, sản phẩm cụ thể. Nhược điểm là nó không định ra tiêu chí thế nào là một kiến trúc tốt.

Bởi vậy, tôi mới thấy băn khoăn về cái thiết kế của bộ Ngoại giao. Có nên tin vào tính vô tư của Microsoft hay không?

Phần mềm nguồn mở có an toàn không?

Một trong những lý luận thường gặp nhất của những người chống Linux (nhưng tuyệt đại đa số không hiểu gì về Linux) là Linux không an toàn. Cái cảm giác mơ hồ về một sản phẩm  do một đám người ảo trên mạng tham gia xây dựng, ai cũng có thể đọc được “ruột” của nó dẫn đến cảm giác bất an cũng là điều dễ hiểu.

Để trấn an nỗi lo lắng đó của những người sử dụng bình thường, có thể dùng các lý lẽ sau đây:

  1. Quân đội Mỹ, quân đội Pháp, các tổ chức tài chính hàng đầu: ngân hàng HSBC, Morgan Stanley, thị trường chứng khoán NewYork, các chính phủ G7, các đại công ty thuộc danh sách Fortune 500, v.v…. đều đang dùng Linux và dùng trong những hệ thống có yêu cầu an ninh rất cao (chi tiết xem thêm ở đây).
  2. Trong một cuộc thi hack các hệ điều hành năm 2008, các hệ điều hành Mac Leopard và Windows Vista đều bị hạ. Duy nhất chỉ có Ubuntu Linux trụ vững được.
  3. Khi bạn mua một thiết bị gia dụng đắt tiền (xe máy, điều hòa, v.v…), giữa một thiết bị được mở toang, bày giữa cửa hàng cho ai cũng xem được từng bộ phận bên trong với một thiết bị niêm phong kín, (của cùng các hãng danh tiếng) cái nào đáng tin cậy hơn?
  4. Cách đây ít năm, Microsoft đã có lần bị tố cáo là để cổng hậu (backdoor) trong Windows cho FBI khi cần có thể vào kiểm soát máy tính. Tất nhiên là hãng ra sức thanh minh. Nhưng ngoài việc tin vào Bill Gate, bạn có cách nào kiểm tra được không? Ngược lại, với phần mềm nguồn mở, về nguyên tắc có thể đọc từng dòng mã nguồn để kiểm tra xem có mã độc nào lẫn trong đó không trước khi cho dịch thành mã máy để chạy. Tất nhiên việc này đòi hỏi phải có một đội ngũ chuyên gia trình độ cao mà chỉ ở quy mô chính phủ hoặc các ngành cần an ninh cao như quân đội, công an có thể tổ chức làm được (và nên làm, như Cuba, một nước có tinh thần cảnh giác rất cao hiện đang làm. Việt nam mà chưa làm thì cũng hơi lạ).
  5. Nếu các lý lẽ nói trên vẫn chưa thuyết phục nổi bạn và bạn cho rằng mình cẩn thận hơn chính phủ Anh, công việc của mình quan trọng hơn chỉ huy tác chiến của quân đội Mỹ và những thứ “linh tinh” đã nêu ở mục 1 thì mời bạn chịu khó xem báo cáo sau đây:

 

Báo cáo về an ninh: Windows so với Linux

Một đánh giá độc lập của  Nicholas Petreley

Posted in Security, 22nd October 2004 07:26 GMT

(Bản báo cáo này khoảng 50 trang, tôi lược dịch một số phần đáng chú ý. Những lập luận thì có thể còn phải bàn, nhưng hệ tiêu chí đánh giá lỗi bảo mật và số lượng, tỷ lệ lỗi thì đáng tin cậy. Nguyên bản xem tại đây – ND)

Tóm tắt

Nhiều công trình đã được thực hiện để xem Linux có thực sự an toàn hơn Windows hay không. Chúng tôi so sánh Windows và Linux bằng cách tìm hiểu 40 bản vá/thông báo lỗi bảo mật gần đây của Microsoft Windows Server 2003 và Red Hat Enterprise Linux AS v.3 theo các tiêu chí sau:

  1. Mức độ nghiêm trọng của lỗi bảo mật dựa trên các tiêu chí:
    1. Mức độ thiệt hại có thể do lỗi đó gây ra.
    2. Khả năng khai thác lỗi đó dễ hay khó.
    3. Khả năng bộc lộ của hệ thống do lỗi (cần loại truy cập nào để khai thác được lỗi?)
  2. Số lượng lỗi nghiêm trọng.

Kết quả không có gì bất ngờ. Ngay cả theo những tiêu chuẩn chủ quan của Microsoft, 38% lỗi bảo mật của Windows được xem là nghiêm trọng, trong khi đó Red Hat chỉ có 10%. Nếu theo các tiêu chuẩn riêng của chúng tôi, số lỗi nghiêm trọng của Windows chiếm tới 50% tổng số lỗi đã công bố.

Thêm vào đó, chúng tôi đã tìm kiếm trong cơ sở dữ liệu lỗi bảo mật của đội Ứng cứu khẩn cấp máy tính Mỹ ( the United States Computer Emergency Readiness Team- CERT), các dữ liệu ở đó khẳng định kết luận của chúng tôi ở một tầm mức còn lớn hơn. Khi tìm trong cơ sở dữ liệu về lỗi bảo mật của Windows, trong 40 lỗi đầu xếp theo thứ tự giảm dần về mức độ nghiêm trọng thì 39 lỗi thuộc loại trên ngưỡng báo động cao (severe alert) của CERT. Trong khi đó Red Hat Linux chỉ có 3/40 lỗi thuộc loại đó. Nếu tìm chung trong cơ sở dữ liệu Linux, chỉ có 6/40 lỗi đầu vượt ngưỡng nói trên.

Vậy thì tại sao vẫn còn những lời đồn đại rằng Linux không an toàn bằng Windows? Một trong những nguyên nhân là những lời đồn đại đó dựa trên những tiêu chí không đầy đủ và có những lỗ hổng về mặt logic như phân tích dưới đây.

Hóa giải những điều đồn đại

Số lượng ít nên an toàn

Một trong những điều hoang tưởng được lặp lại nhiều nhất về độ an toàn của Windows so với Linux là lập luận rằng Windows có nhiều virus, mã độc và các vụ tấn công an ninh là do các hacker chỉ tập trung vào Windows vì thị phần của nó rất lớn. Linux ít bị hơn vì chiếm thị phần nhỏ, các hacker chưa thèm để ý đến. Và ngụ ý đằng sau lập luận này là Linux và các ứng dụng Linux cũng không an toàn gì hơn Windows và các ứng dụng Windows.

Lý luận này không đứng vững được khi xét đến các phần mềm máy chủ web. Theo một nghiên cứu của hãng NetCrap tháng 9/2004 [1], 68% website chạy trên phần mềm máy chủ web nguồn mở Apache, 21% chạy trên Microsoft IIS (Internet Information Services). Nếu theo lý luận trên, virus, malware nhằm vào Apache và hệ điều hành bên dưới nó phải nhiều hơn, cũng như các cuộc tấn công thành công vào Apache phải nhiều hơn Windows server và IIS.

Tuy nhiên thực tế lại chứng tỏ ngược lại. IIS từ lâu đã là mục tiêu hàng đầu của các loại sâu (worm) và các kiểu tấn công, và nhiều những cuộc tấn công thành công lớn. Sâu Code Red khai thác lỗi tràn bộ đệm của IIS để giành quyền kiểm soát web server đã lan tràn trên 300,000 máy chủ và chỉ dừng lại do bản thân sâu đó được lập trình tự ý ngừng lây nhiễm. Sâu Code Red.A còn lây nhanh hơn và cũng tự ngừng sau ba tuần. Một sâu khác, IISWorm, có tác hại giới hạn chỉ vì người viết nó kém chứ không phải IIS tự bảo vệ tốt.

Sâu cho Apache cũng có, ví dụ Slapper (mặc dù thực ra Slapper khai thác lỗi của OpenSSL, không phải lỗi của Apache). Tuy nhiên, sâu Apache hiếm khi tạo nên thành tựu nổi bật vì tác hại của chúng giới hạn và dễ dàng bị tiêu diệt. Có thể diệt sâu và khôi phục site bị nhiễm chỉ bằng một vài lệnh mà không cần phải reboot máy nhờ vào bản chất module của Linux và Unix.

Có lẽ vì thế mà theo nghiên cứu nói trên của Netcrapt, 47 trong 50 site có thời gian chạy liên tục dài nhất (uptime) chạy trên Apache [2] . Không một site nào trong 50 site trên chạy trên Windows hoặc IIS.

Xem được mã nguồn là dễ tìm ra lỗi để tấn công.

Thành công về an ninh nêu trên của Apache cũng bác bỏ một điều hoang tưởng khác: Phần mềm nguồn mở nguy hiểm hơn phần mềm nguồn đóng vì ai cũng có thể tìm hiểu mã nguồn để tìm ra khe hở tấn công.

Thực tế thì số lượng virus, worm, Trojan, spyware và các loại mã độc khác trên Windows nhiều không đếm xuể (mặc dù mã nguồn của Windows không công khai). Chúng hung hăng tới mức có thể lây nhiễm vào một hệ Windows XP chưa được vá sau 16 phút kết nối Internet, ngắn hơi thời gian cần để tải và cài đặt bản vá [3].

Một ví dụ khác: Apache là phần mềm nguồn mở và thường cũng chạy trên các hệ điều hành nguồn mở, ai cũng đọc được mã nguồn của hai phần mềm đó. Nếu theo lý luận trên, chúng phải bị tấn công nhiều hơn, thời gian uptime ngắn hơn Microsoft Windows và IIS, nhưng thực tế ngược lại như đã nói ở trên. Vậy việc đọc được mã nguồn không mang lại lợi ích gì thêm cho hacker. (Đọc được mã nguồn là một chuyện, có tìm ra khe hở trong đó để tấn công hay không lại là chuyện khác – ND)

Các lý lẽ mơ hồ chỉ dựa trên một tiêu chí

Hai lý lẽ nữa là “Linux có nhiều cảnh báo về lỗi an ninh hơn Windows và vì thế Windows an toàn hơn” và “thời gian trung bình từ lúc phát hiện lỗi đến lúc công bố bản vá của Linux dài hơn của Windows và do đó Windows an toàn hơn”.

Cái lý lẽ sau là bí hiểm nhất vì không hiểu nó dựa vào đâu. Microsoft mất bảy tháng để chữa một trong những lỗi nghiêm trọng nhất (Microsoft Security Bulletin MS04-007 ASN.1 Vulnerability, eEye Digital Security publishes the delay in advisory AD20040210) và có những lỗi Microsoft còn công khai nói họ sẽ không bao giờ chữa.

Thời gian khắc phục lỗi nhanh cũng không phải là một tiêu chí để nói là Windows an toàn hơn Linux. Nếu bạn bị đau tim, bạn muốn vào cấp cứu ở một bệnh viện có thời gian từ lúc vào viện đến lúc xuất viện ngắn nhất hay là đến một bệnh viện có chế độ chăm sóc chu đáo nhất?

Việc lựa chọn phần mềm rõ ràng không chỉ dựa trên một tiêu chí thời gian chữa lỗi ngắn nhất. Ngay số lần cảnh báo lỗi an ninh chung chung cũng vô nghĩa. Phải biết rõ trong đó bao nhiêu lỗi có thể gây hậu quả, trong các hậu quả, bao nhiêu phần trăm là nghiêm trọng? Nên chọn một phần mềm có 100 lỗi nhưng đều nhẹ hoặc chỉ user có quyền đăng nhập mới khai thác được hay chọn một phần mềm chỉ có 1 lỗi nhưng hacker có thể qua Internet chui vào xóa hết dữ liệu?

(Trong phần sau của báo cáo này, tác giả xây dựng một hệ thống các tiêu chí logic, chi tiết để đánh giá mức độ nghiêm trọng của các lỗi bảo mật. Kết quả đánh giá đã trình bày tóm tắt ở phần đầu báo cáo – ND)

So sánh thiết kế của Windows và Linux.

1- Thiết kế của Windows

Virus, Trojan và các loại mã độc khác thâm nhập được vào Windows vì những nguyên nhân rất thông thường với Windows nhưng xa lạ với Linux:

  1. Windows chỉ gần đây mới chuyển từ thiết kế một người dùng sang thiết kế nhiều người dùng.
  2. Windows được thiết kế theo nguyên tắc đơn khối (monolithic) không phải đa khối (modular) như Linux.
  3. Windows phụ thuộc quá sâu vào mô hình RPC ( Remote Procedure Call).
  4. Windows tập trung vào giao diện đồ họa.

Gần đây Windows mới phát triển từ thiết kế một người dùng (single-user design) sang mô hình đa người dùng (multi-user model)

Thiết kế đầu tiên của Windows là một người dùng (single-user). Vì vậy cả người dùng và phần mềm ứng dụng đều có thể tự do truy cập đến toàn hệ thống, lục lọi mọi chương trình hệ thống hoặc file hệ thống quan trọng. Do đó, virus và các loại mã độc cũng có thể làm vậy vì Windows không cô lập, bảo vệ các chương trình hoặc file hệ thống.

Windows XP là phiên bản Windows đầu tiên có những cố gắng nghiêm chỉnh để cách ly người dùng khỏi hệ thống, mỗi người dùng có các file riêng và quyền truy cập hệ thống hạn chế. Nhưng khi đó, các ứng dụng Windows cũ lại không chạy được vì chúng “quen” được phép lục tung hệ thống. Do đó, Windows XP có một kiểu chạy tương thích (compatibility mode) cho phép các chương trình ứng dụng chạy như thể chạy trên các hệ Windows cũ, có quyền truy cập tự do vào hệ thống. (Và virus cũng có thể làm được vậy – ND)

Như vậy, Windows XP đã là một tiến bộ nhưng vẫn không phải hệ đa người dùng (multi-user) thực sự và do đó vẫn còn các lỗ hổng an ninh của hệ single-user.

Windows Server 2003 là một bước tiến mới về môi trường đa người dùng thật sự nhưng vẫn không thoát khỏi các lỗ hổng an ninh thừa kế từ các đời single-user trước. Vì vậy, Windows server 2003 mặc định phải tắt nhiều tính năng của trình duyệt có nguy cơ về an ninh như ActiveX, scripting,…

(Ở đây có hai vấn đề: a/do mới chuyển sang multi-user nên công nghệ sẽ không hoàn chỉnh, chín muồi được như Linux đã làm từ hàng chục năm nay, b/vẫn phải đảm bảo tương thích với một số ứng dụng cũ nên sẽ tạo lỗ hổng an ninh. Gần đây, Google khi xây dựng hệ Chrome OS đã hứa hẹn là sẽ thiết kế mới hoàn toàn để đảm bảo an ninh. Và chỉ có như vậy mới triệt để -ND)

Windows được thiết kế đơn khối (Monolithic by Design) không phải đa khối (Modular).

Một hệ đơn khối thì các tính năng tích hợp trong một thể thống nhất. Ngược với đơn khối, trong hệ đa khối các tính năng được chia thành các lớp (các module) riêng biệt, mỗi lớp có khả năng truy cập giới hạn đến các lớp khác.

Trong khi một số nhược điểm an ninh của Windows là do thiết kế đơn người dùng như đã nói ở trên, một số nhược điểm khác lại do những quyết định thiết kế cố tình. Microsoft đã loại trình duyệt Nestcape cạnh tranh bằng cách tích hợp trình duyệt Internet Explorer vào hệ điều hành đến mức không thể gỡ ra được. Dùng Help hay Outlook, … đều phải gọi đến IE. Microsoft đã thành công loại các sản phẩm cạnh tranh bằng cách tích hợp ngày càng nhiều các dịch vụ vào hệ điều hành nhưng điều đó cũng tạo nên một con quái vật gồm các dịch vụ phụ thuộc qua lại lẫn nhau chặt chẽ và đó chính là một hệ đơn khối.

Sự phụ thuộc chặt chẽ vào nhau của các dịch vụ tạo ra hai hệ quả xấu.

Thứ nhất, trong một hệ đơn khối, mọi lỗ hổng an ninh của một bộ phận sẽ ảnh hưởng đến tất cả các bộ phận khác phụ thuộc vào nó. Việc tích hợp IE vào hệ điều hành sẽ làm cho một lỗ hổng an ninh của IE sẽ ảnh hường đến hàng loạt ứng dụng khác.

Thứ hai, một hệ đơn khối về bản chất là không ổn định. Khi thiết kế một hệ có quá nhiều quan hệ phụ thuộc lẫn nhau giữa các bộ phận, việc thay đổi một bộ phận có thể gây nên vô số rủi ro, ảnh hưởng dây chuyền đến các bộ phận khác phụ thuộc vào bộ phận bị thay đổi. Một ví dụ điển hình là mỗi lần cập nhật hoặc vá lỗi một bộ phận của Windows thường làm hỏng các bộ phận hoặc ứng dụng khác (nhất là ứng dụng của bên thứ ba).

Windows phụ thuộc quá nhiều vào mô hình RPC.

RPC là chữ viết tắt của Remote Procedure Call (gọi thủ tục từ xa). Một chương trình gửi một message lên mạng để bảo một chương trình khác làm một việc gì đó. Sở dĩ có từ “remote – từ xa” là vì chương trình được gọi có thể nằm trên cùng máy, trên máy khác trong mạng hoặc thậm chí trên Internet.

RPC là một nguy cơ an ninh tiềm ẩn vì nó cho phép một máy khác trong mạng có thể bảo máy của bạn làm một việc gì đó. Windows phụ thuộc vào RPC đến mức mà bạn không thể tắt RPC đi ngay cả khi máy không nối mạng. Một số lỗi an ninh nghiêm trọng của Windows Server 2003 (xem bảng dưới đây) là do khe hở an ninh trong chính chức năng RPC chứ không phải trong chương trình sử dụng RPC. Cách thông thường nhất để khai thác một lỗ hổng RPC là tấn công dịch vụ sử dụng RPC.

Điều quan trọng là RPC không phải lúc nào cũng cần và vì thế rất khó hiểu là tại sao Microsoft lại dựa vào nó một cách bừa bãi đến vậy. Nếu một web site dùng một database server và một web server trên cùng một máy thì database server không cần phải dùng đến RPC để liên lạc với web server (nhưng lại vẫn phải dùng nếu là sản phẩm của Microsoft).

Nhắc đến điều đó vì chính sâu Slammer, một trong những sâu nguy hiểm nhất từng tấn công Internet, khai thác một trong những lỗi RPC của Microsoft. Slammer lây nhanh qua nhiều hệ thống đến nỗi thực tế đã làm tê liệt Internet.

Windows chú trọng vào giao diện đồ họa máy để bàn quen thuộc

Microsoft xem giao diện Windows quen thuộc của máy để bàn là một ưu điểm khi dùng Windows Server 2003.

Vì thế người dùng đăng nhập vào Windows Server với tên người quản trị (admininstrator) và có toàn quyền với hệ thống. Như vậy, khi dùng một chương trình dễ bị lỗi an ninh như IE, toàn server sẽ bị nguy hiểm.

(Trong Linux server thì không như vậy. Xem phần sau)

2- Thiết kế của Linux

Theo kết quả một cuộc điều tra mùa hè 2004 của Evans Data Linux Developers, 93% nhà lập trình Linux đã gặp dưới hai sự cố khi máy Linux bị lỗi. 87% chỉ gặp 1 sự cố và 78% chưa bao giờ gặp một cuộc xâm nhập nào vào máy Linux. Trong một số ít trường hợp bị xâm nhập, nguyên nhân chủ yếu là do đặt cấu hình an ninh không tốt.

92% số người được hỏi chưa bao giờ gặp một virus, Trojan hoặc các loại mã độc khác trên các máy Linux.

Virus, Trojan và các loại mã độc khác hiếm khi nhiễm được vào một hệ Linux một phần vì các lý do sau:

  1. Linux có thiết kế multi-user lâu đời, được rà soát, bổ xung đầy đủ.
  2. Linux hầu như dựa trên thiết kế đa khối.
  3. Linux không phụ thuộc vào RPC, các dịch vụ thường mặc định được cấu hình không dùng RPC.
  4. Các máy chủ Linux là lý tưởng để quản trị từ xa, không trực tiếp.

Linux có thiết kế multi-user lâu đời, được rà soát, bổ xung đầy đủ.

Ngay từ đầu, Linux xây dựng theo mô hình Unix đã là một hệ multi-user, mỗi user chỉ có quyền truy cập hạn chế, vừa đủ vào hệ thống vào các ứng dụng. Khi một user chạy một ứng dụng, ứng dụng đó chạy theo các quyền hạn chế của user, chỉ ghi vào thư mục riêng của user, không thay đổi các file hệ thống và cả các thư mục của user khác trừ khi người quản trị cho phép.

Điều quan trọng nữa là mọi tính năng, dịch vụ mà Linux cung cấp hầu hết đều dưới dạng các module thư viện (modular libraries). Do đó, khi một trình soạn văn bản cần tô màu một ảnh JPEG, chức năng tô màu sẽ chạy với cùng quyền truy cập như trình soạn văn bản, tức là với quyền của user sử dụng trình soạn văn bản đó. Nếu có một lỗ hổng an ninh trong thủ tục tô màu, hacker khai thác lỗ hổng đó cũng chỉ có quyền như user và do đó hạn chế thiệt hại vì không tác động được vào hệ thống. Đó chính là ưu điểm của thiết kế đa khối.

Do bản chất đa khối của Linux, khi gửi một email có nhiễm virus cho một Linux user, virus đó không thể lan ra toàn bộ máy. Dù trình email client có tồi đến thế nào đi nữa thì virus cũng chỉ có thể nhiễm, làm hỏng thư mục riêng của user. Trình duyệt Linux không hỗ trợ các đối tượng kém an toàn như ActiveX controls, và dù nó có hỗ trợ thì một ActiveX control chứa mã độc cũng chỉ chạy với quyền của user đang dùng trình duyệt, không thể phá hoại hệ thống hoặc các user khác được.

Ngay cả các dịch vụ, như máy chủ web, cũng chạy như một user với quyền truy cập hạn chế. Ví dụ trong bản Linux Debian, máy chủ web Apache chạy với quyền của user www-data. Nếu hacker chiếm được quyền kiểm soát Apache, hacker đó cũng chỉ tác động được đến các file mà user www-data là chủ (owner). Cơ sở dữ liệu MySQL, thường dùng chung với Apache, được chạy với quyền của user mysql. Do đó nếu Apache có lỗ hổng, hacker kiểm soát được Apache cũng không kiểm soát được MySQL vì MySQL do một user khác làm chủ.

Ngoài ra, các user điều khiển các dịch vụ như nói ở trên thường không có quyền truy cập các lệnh. Vì vậy nếu hacker nắm được quyền điều khiển user mysql cũng không thể phát ra các lệnh cho máy chủ Linux vì user mysql không có quyền chạy lệnh.

Ngược hẳn lại các điều nói trên, Windows ban đầu được thiết kế để mọi user và mọi ứng dụng đều có quyền admininstrator với mọi file của toàn bộ hệ thống. Chỉ sau này, Windows mới hạn chế dần quyền của user. Windows Server 2003 đã gần đạt được đến mức đó. Nhưng phương pháp luận của Microsoft để dựng rào cản giữa user và hệ thống vẫn là dựa trên cơ sở thiết kế cũ mà không thiết kế lại một cách cơ bản để hỗ trợ khả năng multi-user và đảm bảo an ninh.

Thiết kế Linux là đa khối, không phải đơn khối

Linux là một hệ điều hành phần lớn theo thiết kế đa khối từ nhân (kernel) đến các ứng dụng. Trong Linux hầu như không có cái gì liên kết chặt với cái khác đến mức không gỡ ra được. Hệ thống Help hoặc trình email không phụ thuộc vào một động cơ trình duyệt (browser engine) duy nhất. Có thể dễ dàng cấu hình trình email dùng động cơ trình duyệt có sẵn hoặc bất kỳ trình duyệt nào khác để xem các thư HTML. Vì vậy một lỗ hổng an ninh trong động cơ trình duyệt sẽ ảnh hưởng rất ít hoặc không ảnh hưởng đến các ứng dụng khác vì có ít hoặc không có ứng dụng nào phụ thuộc vào trình duyệt đó.

Không phải mọi thứ trong Linux đều đa khối. Hai môi trường đồ họa phổ biến nhất GNOME và KDE có thiết kế ít nhiều đơn khối; ít nhất cũng đủ để nếu update một phần của GNOME hoặc KDE có thể có nguy cơ làm hỏng các phần khác. Tuy nhiên, chúng cũng không đơn khối đến độ chỉ cho phép chạy các ứng dụng viết riêng cho chúng. Có thể chạy các ứng dụng GNOME trong KDE và ngược lại.

Nhân Linux dùng các module driver, nhưng về cơ bản nó là nhân đơn khối trong đó các dịch vụ của nhân phụ thuộc lẫn nhau. Tuy nhiên, tác hại của tính đơn khối này cũng được giảm đến mức tối thiểu vì nhân Linux được thiết kế sao cho nhỏ nhất. Linux đi theo triết lý sau: “Nếu một việc có thể làm được bên ngoài nhân, thì nó phải được làm ngoài nhân”.

(Hình như điều này bây giờ đã thay đổi, xem tại đây – ND)

Ngược lại, lỗi driver màn hình là nguyên nhân phổ biến nhất dẫn đến cái-chết-màn-hình-xanh của Windows. Đó là vì Windows tích hợp đồ họa vào nhân, lỗi đồ họa sẽ làm sập cả hệ thống. Trong Linux, trừ một vài trường hợp ngoại lệ như với driver màn hình Nvidia, Linux buộc tất cả các driver card màn hình chạy bên ngoài nhân. Một lỗi của driver có thể làm hỏng môi trường đồ họa nhưng không làm sập cả hệ thống. Chỉ cần khởi động lại môi trường đồ họa mà không phải khởi động lại máy tính.

Linux không bị phụ thuộc vào mô hình RPC (Remote Procedure Call)

Như đã nói ở trên, Windows phụ thuộc nặng vào RPC và cho chạy nó cả khi không cần thiết. Điều đó dẫn tới những nguy cơ an ninh nghiêm trọng.

Phần lớn các chương trình Linux khi cài đặt đều mặc định tắt truy cập mạng. Ví dụ cơ sở dữ liệu MySQL thường được cài sao cho nó không nghe các lệnh từ mạng. Nếu bạn xây dựng một website dùng Apache và MySQL chạy trên cùng một máy thì Apache sẽ liên hệ trực tiếp với MySQL và MySQL sẽ không liên hệ gì với mạng. (Ngược lại Microsoft SQL Server luôn luôn lắng nghe mạng dù có cần hay không). Nếu muốn MySQL nghe các lệnh đến từ mạng thì phải thiết lập điều đó bằng tay, rồi xác định user và máy được phép truy cập đến MySQL.

Ngay cả khi các ứng dụng Linux mặc định sử dụng mạng, chúng cũng thường được cấu hình để chỉ trả lời máy cục bộ, bỏ qua các yêu cầu của các máy khác trong mạng.

Các máy chủ Linux là lý tưởng để quản trị từ xa

Máy chủ Linux thường có thể và nên cài như một hệ “không đầu – headless” (không có màn hình) và quản trị từ xa (truy cập máy chủ từ một máy khác trong mạng, không dùng bàn phím, màn hình nối trực tiếp vào máy chủ – ND). Đó là kiểu cài lý tưởng cho máy chủ vì quản trị từ xa không có những nguy cơ mà quản trị tại chỗ có thể gặp.

Ví dụ, bạn có thể log in vào máy để bàn của bạn như một user thường với quyền hạn hạn chế rồi quản trị máy chủ Linux qua một giao diện quản trị web (Admininstration consol). Ngay cả những lỗi an ninh nguy hiểm nhất của trình duyệt web cũng chỉ ảnh hưởng đến user thường mà bạn đã dùng log in vào máy để bàn của bạn, không ảnh hưởng gì đến máy chủ.

(webmin là một trong những giao diện quản trị web quản trị được khá nhiều thứ trên máy chủ – ND)

Trong các phần tiếp theo, tác giả xây dựng một hệ thống các tiêu chí đánh giá lỗi bảo mật, áp dụng cụ thể vào 40 lỗi được công bố gần thời điểm viết báo cáo và kết quả tìm kiếm trong cơ sở dữ liệu lỗi của CERT. Kết quả tóm tắt đã được nêu ở phần đầu báo cáo.

Chi tiết đọc thêm tại đây.

Máy chủ mail gồm những gì

Để cài đặt một máy chủ email, có nhiều cách làm, nhiều lựa chọn. Tôi chia sẻ một vài điều “lọ mọ” được.

Đại thể khi gửi, nhận thư điện tử các bước và các phần mềm sau được sử dụng;

  1. Người gửi thư dùng một trong những phần mềm thư điện tử cá nhân (email client: Outlook, Outlook Express, Thunderbird, KMail, … hoặc các webmail như Gmail, Yahoo Mail, Squirrel Mail,,…) để soạn thư. Các email client còn được gọi là Mail User Agent (MUA).
  2. Khi nhấn nút Send, một kết nối theo giao thức SMTP qua cổng 25 được thiết lập với máy chủ mail. Để đảm bảo an toàn, kết nối này có thể dùng các giao thức mã hóa SSL (Secure Socket Layer) hoặc TLS (Transport Layer Security) để mã hóa các thông tin trao đổi giữa email client và máy chủ mail.
  3. Username và password của người gửi được một chương trình xác thực (authentication) kiểm tra. Chương trình này thường là OpenLDAP hoặc một cơ sở dữ liệu (MySQL, ….).
  4. Nếu kết quả kiểm tra xác nhận người gửi là người đã đăng ký, thư được chuyển cho chương trình Mail Transfer Agent (MTA). Chương trình này có thể là Sendmail, Postfix, Courrier, qmail, v.v…Trước khi nhận, MTA (hoặc một chương trình riêng Mail Submission Agent -MSA) soát, sửa các lỗi của thư (lỗi địa chỉ, ngày tháng, …).
  5. MTA sẽ đọc domain trong địa chỉ người nhận (phần bên phải @) rồi hỏi các DNS server trên Internet để tìm địa chỉ máy chủ mail của domain đó theo các MX record đã khai trong DNS server. Khi tìm được, MTA gửi thiết lập kết nối với MTA nhận qua cổng 25.
  6. Chương trình xác thực trên máy chủ nhận (OpenLDAP, MySQL, …) sẽ kiểm tra xem người nhận có được đăng ký trên máy đó không. Nếu không, sẽ có báo lỗi 550 về cho người gửi và từ chối nhận thư.
  7. Nếu người nhận được xác thực, thư sẽ được tiếp tục kiểm tra virus, spam bằng các chương trình antivirus (ví dụ clamAV), chương trình antispam (ví dụ Spamassasin hoặc Postgrey, …) và quota dung lượng hộp thư người nhận trên máy chủ cũng được kiểm tra xem còn không hay đã đầy. Nếu hộp thư đầy hoặc thư có virus sẽ có mail thông báo cho người gửi và thư bị từ chối.
  8. Sau khi kiểm tra mail xong, MTA chuyển giao thư cho phần mềm Mailbox Server qua giao thức LMTP. Tại đây, một phần mềm Mail Delivery Agent sẽ lưu thư vào hộp thư người nhận (Inbox hoặc Spam tùy theo thư có bị đánh dấu là spam hay không).
  9. Tại Mailbox Server còn một loạt hoạt động khác được thực hiện: lập chỉ số (index) của thư và file đính kèm bằng Lucent để tìm kiếm nhanh, lưu meta-data của mail vào một cơ sở dữ liệu nào đó, lưu thư theo định dạng mailbox hoặc maildir đã chọn vào một hệ thống file, convert các file đính kèm thành dạng HTML để xem trong trình duyệt, v.v… Các dịch vụ này có thể có hoặc không theo ý đồ của người thiết kế hệ thống mail.
  10. Người nhận dùng một phần mềm email client (Outlook, webmail, …) kết nối với máy chủ mail bằng giao thức POP3 hoặc IMAP để đọc thư. Trên máy chủ, phần mềm POP3 hoặc IMAP server (Dovecot, Courrier, …) phụ trách việc kết nối này và tìm thư từ mailbox để chuyển về hoặc hiển thị trên email client. Quá trình kết thúc ở đây.
  11. Ngoài ra trên máy chủ Mail server còn có thể có một số thành phần phụ nữa theo ý người cài đặt: webmail, một giao diện quản lý (Administrator consol) thường cũng là giao diện web, phần mềm backup, phần mềm clustering nếu muốn hệ có tính sẵn sàng cao, v.v…Với một hệ thống lớn có thể dùng nhiều máy chủ, thiết lập một cơ chế tự động cân bằng tải, bổ xung hoặc thay thế các máy chủ khi cần.

Mô tả thì hơi dài nhưng trong thực tế, một số phần mềm kiêm nhiều chức năng đã nêu ở trên.

Như vậy, cái gọi là Mail server không phải chỉ là một phần mềm. Nó là cả một cỗ máy gồm nhiều bộ phận kết hợp hài hòa với nhau mà gọi chính xác là một email solution. Do đó, để cài một Mail server ta có vài cách làm (cũng như khi xây nhà):

  1. Nếu bạn có đủ các điều kiện sau đây: chỉ sô IQ cao, lòng say mê, tính kiên nhẫn và thời gian dài rộng bạn có thể tự mình chọn lựa, thiết kế, tích hợp và cài đặt một mail server từ các bộ phận nói trên. Chỉ tìm đọc trên Internet và chọn thật sự một bộ phận đúng ý mình cũng đủ mệt rồi. Bước tiếp theo cài cho chúng làm việc khớp với nhau có thể theo các hướng dẫn kiểu như thế này. (thực hiện đến từng dòng lệnh). Nhưng phần còn lại mới là khó nhất: điều khiển (control), tinh chỉnh (fine tuning), khắc phục lỗi từng bộ phận sao cho toàn hệ thống làm việc đạt tốc độ tối ưu, trơn tru liên tục. Xây một cái trông giống như cái nhà không khó. Chất lượng thật của cái nhà đó sau một thời gian ở và vài cơn mưa bão mới là cái đáng bàn. Những ai đã từng tự xây nhà để ở đều hiểu những khó khăn chầy chật của cách làm này. Bù lại, kiến thức, tay nghề lên trông thấy, hiểu đến từng file config trong hệ thống. Nhưng nếu trình thấp, đọc tiếng Anh còn không thông, hay sốt ruột làm bừa thì …. cái bạn làm ra sẽ gieo tai họa cho người dùng. Tôi phải nhấn mạnh điều này vì tôi đã và có nguy cơ sẽ là nạn nhân của kiểu sản phẩm như vậy.
  2. Cách thứ hai là dùng các sản phẩm tích hợp sẵn ở mức cơ bản.Những sản phẩm này (eBox, iRedMail, deefOfix, …) có các bộ phận cấu thành vẫn là các phần mềm nguồn mở thông dụng như đã nêu ở mục trên nhưng được tích hợp sẵn, chặt chẽ với nhau. Các lệnh cài đặt, cấu hình được tập hợp lại thành một chương trình scripts. Vì vậy khi cài theo một mạch từ đầu đến cuối. Và đặc biệt khi thay đổi, cấu hình một bộ phận nào thì các phần liên quan sẽ tự động thay đổi theo. Thường cũng có thêm một phần mềm quản trị dưới dạng web.Tính năng của cả sản phẩm nằm trong phạm vi tính năng của từng bộ phận cấu thành và vì vậy thường đơn giản nhưng đủ dùng cho những nhu cầu cơ bản. Các tính năng mở rộng cũng có nhưng phải tự cài qua các extensions.
  3. Loại sản phẩm thứ ba có các bộ phận cơ bản cũng vẫn như trên (postfix, openldap, spamassassin, …) nhưng phần giá trị gia tăng rất đáng kể. Zimbra, Open-Xchange, Scalix,. v.v… thuộc loại này. Giá trị gia tăng ở đây có thể là thiết kế hệ thống phức tạp và tinh vi hơn, nhiều bộ phận hơn, tính năng mở rộng, đầy đủ hơn, có nhiều phần mềm bổ xung, viết thêm ngoài những phần mềm nguồn mở cơ bản có sẵn, giao diện quản trị và sử dụng đầy đủ. Nhóm này thường không chỉ có mail mà là một bộ phần mềm cộng tác (collaborative software) có thể chia sẻ mail, lịch công tác, file, sổ địa chỉ, danh mục công việc, lên lịch họp và tự động gửi mail mời họp, báo thời gian bận, rỗi v.v… tương tự như cặp MS Exchange + Outlook.

Vì vậy, để học và nắm vững thì nên theo cách thứ nhất. Nhưng sau đó để dùng thì nên theo cách 2 hoặc 3.

Ảnh màn hình này có gì lạ?

Cái màn hình này hơi khác thường.Nếu bạn không nhận ra thì xem tiếp phần dưới

session-gimp-word

Thanh tiêu đề trên cùng cho biết đây là màn hình trình duyệt web Mozilla Firefox. Nhìn cái màu nâu là biết Firefox đang chạy trên Ubuntu.

Bên trong trình duyệt có hai cửa sổ: một cửa sổ của Microsoft Word và một của GIMP, trình xử lý ảnh nguồn mở chạy trên Linux (tương tự Photoshop). Một ứng dụng Windows và một ứng dụng Linux cùng chạy và lại chạy trong trình duyệt web!

Màn hình nền thì giống màn hình nền của một bản Linux nào đó. Nhưng cũng lại nằm trong trình duyệt web!

Đây là một công nghệ mới của hãng Ulteo (ulteo.com) gọi là Open Virtual Desktop (OVD) technology. Đại thể thì công nghệ đó thế này:

  • Trong mạng có các máy chủ ứng dụng (application server) Windows và Linux riêng biệt. Trên mỗi máy chủ đó chạy các ứng dụng cần thiết (MS Office và GIMP như trong ví dụ trên) trên nền Windows server hoặc Linux server.
  • Dùng một máy chủ Linux chạy OVD Session Manager kết nối với các máy chủ ứng dụng nói trên.
  • Các máy trạm dùng trình duyệt web truy cập vào máy OVD Session Manager để khởi tạo một phiên làm việc (session). Trên trình duyệt sẽ xuất hiện màn hình desktop của một máy trạm ảo (virtual desktop) có tất cả các ứng dụng Windows và Linux đang chạy trên các máy chủ ứng dụng. Khi chạy MS Word thì màn hình Word mở ra, Word thực tế chạy trên máy chủ, thông qua Terminal Service của Windows server để cấp giao diện Word đến trình duyệt. Máy chủ OVD Session Manager làm nhiệm vụ đầu mối trung gian để các máy trạm giao tiếp với các máy chủ ứng dụng.
  • Như vậy các máy trạm chỉ cần cài trình duyệt, không cần cài ứng dụng. Máy trạm có thể cài bất cứ hệ điều hành nào (Windows, Mac, Linux, …) miễn là có một trình duyệt web hỗ trợ java.
  • Tóm lại cũng tương tự khi dùng trình duyệt web để soạn văn bản bằng Google Docs hoặc Zoho Writer từ các máy chủ Internet. Điểm khác biệt là các máy chủ ở đây nằm trong mạng LAN (và cả WAN). Tức là một dạng điện toán đám mây, phần mềm như dịch vụ (SaaS) nhưng ở trong mạng LAN (WAN). Chắc cũng dùng được cả trên Internet.

ulteo-scheme-web

Nhận xét sơ bộ (chưa thử) thì công nghệ này có mấy ưu điểm:

  • Web-base hóa ứng dụng đã có nhưng thực tế lại không phải sửa ứng dụng. Điều này rất tiện cho các đơn vị đã có các ứng dụng Windows, nay muốn chuyển desktop sạng dùng Linux.
  • Không rõ chế độ bán giấy phép sử dụng các phần mềm bản quyền cho trường hợp này tính thế nào. Nếu vẫn tính là cài cho một máy (chủ) thì người dùng lợi to.
  • Các máy trạm chỉ cần chạy được trình duyệt có hỗ trợ Java. Máy cũ và yếu chắc là vẫn xử lý ảnh được vì GIMP (hoặc Photoshop) chạy trên máy chủ.
  • Sướng nhất là các phòng tin học. Khỏi lo cài cắm ứng dụng, quét virus, backup dữ liệu trên máy trạm, chỉ tập trung chăm sóc mấy cái máy chủ. Tuy nhiên như đã nói trong bài “Điện toán đám mây”,  điều này có thể dẫn đến thất nghiệp, giảm biên vô khối “cử nhân tin học” đang làm nhiệm vụ chăm sóc cả đống máy trạm.

Thống kê về phần mềm Mail Server

Một dự án thực hiện năm 2007 điều tra  400’000 máy chủ mail trên toàn mạng và cho kết quả như sau:

pinged_in_piechart

Theo biểu đồ trên, 4 mail server nguồn mở (Sendmail, Postfix, Exim và qmail) chiếm khoảng 30% thị trường, trong đó Sendmail, một mail server lâu đời nhất vẫn còn chiếm thị phần lớn nhất là 12,3%. Postini,  MXLogic và Concentric Hosting là các dịch vụ bảo vệ và giá trị gia tăng chắn ở lớp ngoài nên không biết đằng sau nó chạy mail server gì.

Một nghiên cứu khác trên gần 60’000 máy chủ mail cho kết quả như sau:

Sendmail (24%)
Postfix (20%)
qmail (17%)
Exim (13%)
IMail (2%)
Other MTA (5%)
Theo kết quả này thì Sendmail+Postfix+qmail+Exim chiếm tới 74% thị trường.
Còn ai có số liệu nào khác, nhất là ở Việt nam thì cho xin. Thank in advance.

Chọn lựa

Máy chủ Linux có độ sẵn sàng cao (High Availability Server)

High Availability có nghĩa là “Độ sẵn sàng cao“, những máy chủ, thiết bị loại này luôn luôn sẵn sàng phục vụ, người sử dụng không cảm thấy nó bị trục trặc, hỏng hóc gây gián đoạn. Để đảm bảo được điều đó, tối thiểu có một cặp máy, thiết bị chạy song song, liên tục liên lạc với nhau, cái chính hỏng, cái phụ sẽ lập tức biết và tự động thay thế. Một ví dụ đơn giản nhất là một số máy chủ có hai bộ nguồn, tự động thay thế nóng cho nhau.

Đối với các máy chủ phần mềm (Mail server, File server, web server, database server,…) vấn đề phức tạp hơn thiết bị phần cứng một chút vì để thay thế tự động được cho nhau, dữ liệu giữa hai máy chủ phải được liên tục đồng bộ đến từng lần ghi dữ liệu dù nhỏ nhất vào ổ cứng.

Phần mềm DRBD (Distributed Replicated Block Device) đảm nhận việc đồng bộ này. Khi được cài đặt trên hai hay nhiều máy chủ trong một nhóm (cluster), drbd thực hiện việc liên tục đồng bộ giữa các partition ổ cứng được chỉ định thông qua mạng. Một lệnh ghi ổ cứng trên máy chủ chính chỉ được coi là hoàn thành khi lệnh ghi đó cũng được thực hiện xong ở các máy chủ khác trong cùng cluster. Nói cách khác, drbd thực hiện việc tạo các nhóm ổ cứng RAID-1 qua mạng, còn gọi là net-raid.

Heartbeat đảm nhận các công việc còn lại (trước năm 2007). Heartbeat chạy thường trú (daemon) trên các máy trong một cluster, thông tin liên tục cho máy phụ biết về trạng thái dịch vụ cần high availability trên máy chính (tôi còn sống và đang làm việc!). Một khi dịch vụ đó “chết”, heartbeat lập tức khởi động các dịch vụ thay thế trên máy phụ để chuyển máy đó thành máy chính. Việc thay thế này thực hiện được vì partition ổ cứng trên hai máy đã được drbd đồng bộ như nói ở trên.

Khi một cặp máy chủ Mail server, File server, Web server sẵn sàng cao chạy, nếu máy chính bị shutdown, hỏng card mạng, phần mềm mail server, … bị treo, v.v… máy chính sẽ bị loại ra ngoài hệ thống, máy phụ lập tức khởi động dịch vụ thay thế và được chuyển thành máy chính.  Quá trình đó hoàn toàn tự động và trong suốt với người dùng. Người dùng chỉ cảm thấy bị gián đoạn lúc máy phụ đang khởi động dịch vụ.

DRBD và Heartbeat đều là phần mềm nguồn mở chạy trên các máy chủ Linux (trong các kho phần mềm của RedHat, SUSE, Ubuntu, CentOS, … đều có sẵn hai phần mềm này). Dự án Linux HighAvailability (Linux-HA) đã được ứng dụng ổn định trong thực tiễn từ năm 1999 cho những phần mềm quan trọng (The Linux-HA project has been in production in mission-critical applications since about 1999) tại hàng nghìn site trong rất nhiều lĩnh vực khác nhau. Một số ví dụ thành công (success stories) xem ở đây.

Cách giải thích như trên chỉ là cách nói đơn giản nhất về khái niệm high availability trong thế giới nguồn mở. Đi sâu vào đương nhiên còn nhiều chi tiết hơn (drbd có thể thực hiện ba kiểu mirror, cluster có thể gồm nhiều máy và tất cả các máy đều là chính, v.v…). Nguồn mở có cái hay là nếu bạn định tìm hiểu hãy đăng ký vào trường đại học Internet, thụ giáo giáo sư Gúc, lấy hai cái máy để bàn có nối mạng ở cơ quan, tải phần mềm về thử luôn. Điều kiện để được nhập học: chỉ số IQ trên trung bình + khả năng đọc tiếng Anh tốt+ lòng say mê, không ngại khó. Bù lại khi tốt nghiệp bạn sẽ hiểu sâu thêm khá nhiều điều. Sau khoảng 2 tháng qua nhiều thử nghiệm, cuối cùng tôi dừng lại ở một cặp cluster Ubuntu Server 8.04, drbd, heartbeat, Zimbra mail server chẳng kém gì Win Server 2003, Exchange, Outlook. Cài được chỉ là một bước, quản trị được, tinh chỉnh (fine tuning), khắc phục sự cố còn cả một quãng đường dài. Linux desktop tạm coi là đủ và cày mãi cũng chán. Đi thám hiểm vùng đất mới! Một lý do nữa: cặp mail server đang dùng do công ty tin học hàng đầu VN cài chán quá!

Nếu không đủ ba điều kiện nhập học trên, tốt nhất là nấp sau lưng Bill Gate, lén kiếm ba bộ đĩa crack trên về và theo cái wizard của nó. Tôi rất ủng hộ wizard cho máy để bàn (như Mandriva) nhưng với máy chủ thì … ta sẽ bàn vấn đề này trong một post sau.

KDE hay GNOME?

KDE và GNOME là hai môi trường đồ họa (graphic desktop environnent) phổ biến nhất của Linux nhưng cũng không phải là duy nhất. Ngoài ra còn có Xfce, Lxde, e17, … khoảng một tá nữa. Thời mới làm quen với Linux, KDE gây được cảm tình hơn GNOME vì dạng giao diện gần Windows, có System Settings giống với Control Panel và màu xanh tươi mát của nó (hồi đó chưa biết cách tùy biến màn hình, cũng chưa biết bật Control Center của GNOME). Nhìn cái giao diện của Ubuntu 6.10 xấu tệ.

Vì vậy để tránh những phức tạp chưa cần thiết, nếu mới làm quen với Linux nên chọn KDE.

Sau này khi công lực thâm hậu rồi thì KDE hay GNOME chỉ còn là sở thích. Vì nói chung các phần mềm ứng dụng viết cho KDE vẫn cài chạy được trên GNOME và ngược lại.

Ví dụ đang dùng Ubuntu nhưng hay ghi đĩa CD thì nên cài k3b (viết cho KDE) có nhiều tính năng hay hơn là trình ghi đĩa brasero mặc định của GNOME. Ngược lại, trình System Monitor cùa GNOME nhiều thông tin hơn System Monitor của KDE v.v…

Cái hay của thế giới nguồn mở là khả năng tự do lựa chọn chỉ sau vài cú nhấp chuột. Những phần mềm cài sẵn theo một hệ Linux chưa chắc đã phải là cái hay nhất đối với từng người. Để chơi nhạc, Amarok, Songbird, SMplayer, VLC, …. ? thử cũng đủ mê mải rồi.

Đến hiện nay, GNOME (ví dụ Ubuntu) nên dùng để làm việc vì chạy nhanh, nhạy hơn so với KDE4, giao diện nguyên thủy tương đối chân phương giống như một anh công chức nghiêm chỉnh vậy. KDE nhất là KDE4 màu sắc điệu đà, rực rỡ nhưng chậm hơn, kém nhạy hơn, đòi hỏi cấu hình máy cao hơn. Tính năng thì cũng một chín một mười, KDE4 mới sinh nên còn chưa đủ độ chín.

Trước đây cứ phải tải về Ubuntu, Kubuntu, Mandriva KDE, Mandriva GNOME, … rồi chia nhiều partition cài lần lượt từng bộ. Thực ra thì không cần phải thế.

Với Ubuntu, cài xong mở Synaptic cài thêm kubuntu-desktop (khoảng hơn 300MB) thậm chí cả xubuntu-desktop. Hoặc ngược lại cài Kubuntu xong, cài thêm ubuntu-desktop, v.v… Khi cài như vậy, không chỉ KDE, GNOME mà cả một số phần mềm ứng dụng phổ biến của môi trường đó cũng được cài. Ví dụ khi cài ubuntu-desktop thì trình thư điện tử Evolution cũng kèm theo. Nếu muốn cài riêng GNOME có thể dùng lệnh sudo apt-get install --no-install-recommends ubuntu-desktop.

Với Mandriva cài xong mở Install & Remove Software, chọn Meta Packages ở danh sách góc trên, bên trái màn hình, chọn tiếp Graphic Desktop thì sẽ có cả KDE3, KDE4, GNOME, Xfce, Enlightenment, Lxde, Ede để chọn. Mỗi gói có chữ task đằng trước, ví dụ task-gnome. Trong đó nếu chọn task-gnome-minimal thì chỉ cài tối thiểu GNOME, chọn task-gnome là cài đầy đủ các phần mềm kèm theo.

Cài xong logout ra, trong màn hình Login, nhấn vào biểu tượng bút chì (Mandriva) hoặc Options -> Select Session (Ubuntu) chọn GNOME, KDE, … tùy ý. Sau đó nhập username, password là đăng nhập được vào môi trường đã chọn. Trong menu chương trình sẽ có thêm nhiều chương trình của các môi trường khác nhau. Ví dụ cài cả KDE và GNOME thì có cả KMail và Evolution. Nếu không thích, gỡ bỏ cả hai rồi cài Thunderbird (trình email chống spam tốt nhất hiện nay).

Cài như vậy, trên cùng một partition sẽ có cả ba bộ Ubuntu, Kubuntu và Xubuntu, thích login vào bộ nào cũng được.

Tóm lại cuối cùng ta sẽ có thế này:

  • Khi khởi động máy lên, xuất hiện boot menu có vài ba hệ Linux khác nhau để chọn (mỗi bộ mất khoảng 5GB, cách cài đã nói trong một post trước).
  • Chọn một hệ để khởi động vào, tới màn hình Login lại có vài ba lựa chọn môi trường đồ họa nữa. Thích chân phương đứng đắn thì chọn GNOME (nguyên bản), thích màu mè thì KDE4, thích nhanh, nhẹ (nhưng cũng không kém đẹp) hoặc máy cấu hình yếu thì chọn Xfce, Lxde, v.v…

Nhưng cái trò đó cũng chỉ để tìm hiểu khi còn đang khám phá, và cũng nên cẩn thận không dễ bị “tẩu hỏa nhập ma”: cái nào cũng thích, cũng hay, loay hoay giữa đàn mỹ nữ không biết nên thiên vị cô nào. Nếu còn thích một bộ hơn bộ khác vì quen hơn, dễ dùng hơn là tu luyện chưa thành chính quả.

Khi công lực đã đạt đến hỏa hầu nhất định thì bộ Linux nào cũng không quan trọng nữa (nếu căn cứ trên nhu cầu sử dụng thông thường). Tất cả đều na ná giống nhau, có thể tùy biến, bổ xung cái mình thích. Vì về cơ bản các bộ phận để lắp ráp nên chúng đều là một: nhân Linux, môi trường đồ họa, các trình ứng dụng,…. Cài một bộ mới không khó khăn gì và mất thêm đôi chút thì giờ tìm hiểu những điểm khác biệt. Trong vài ba bộ phổ biến nhất, bộ nào cũng có cái hay, cái dở, xêm xêm như nhau.

Khi đã giang hồ hoa lá chán rồi thì sẽ dừng lại ở một nơi mà yên hưởng tuổi già. Lúc đó Linux chỉ còn là công cụ, không còn là đối tượng khám phá nữa. Tuy nhiên, nếu máu giang hồ chưa dứt thì vẫn còn cả thế giới nguồn mở mênh mông. Linux chỉ là một góc và là góc dễ khai phá nhất mà thôi.

Điện toán đám mây (cloud computing)

Định viết một bài về ổ cứng ảo, nghĩ lan man sang cái này.

Có một quy luật triết học nói rằng mọi sự trên đời phát triển theo vòng xoáy trôn ốc. Sự việc phát triển đến một mức nào đó thì lặp lại những cái trước đó nhưng ở một trình độ cao hơn. Điều đó cũng đúng với máy tính.
Thời kỳ bình minh của điện toán, mọi thứ xoay quanh vài cái mainframe (bây giờ dịch là siêu máy tính). Tất cả mọi thứ: bộ xử lý, bộ nhớ, ổ cứng, phần mềm đều nằm trên đó. Xung quanh mỗi mainframe có hàng chục cái gọi là terminal chỉ gồm màn hình, bàn phím (chưa có cả chuột). Mỗi user dùng bàn phím màn hình đó truy cập vào mainframe, chạy các phần mềm trên đó cho công việc của mình, dùng chung bộ xử lý, bộ nhớ, phần mềm, … và mọi thứ khác từ một nơi cấp phát tập trung.
Bây giờ mọi thứ có vẻ sắp quay về thời kỳ đó. Internet đã tạo nên một cái mainframe khổng lồ gồm hàng ngàn máy chủ kết nối với nhau chứa đựng sức mạnh xử lý, bộ nhớ, ổ cứng và phần mềm. Các máy tính cá nhân rồi ra sẽ chỉ còn dùng để chạy trình duyệt, cài phần mềm tối thiểu và ổ cứng cũng tối thiểu. Nối máy vào Internet, mở trình duyệt ra là có thể soạn văn bản, bảng tính (bằng Google Docs và Zoho Writer chẳng hạn), soạn xong lưu ngay vào ổ cứng máy chủ, yên tâm rằng mọi việc quét virus, sao lưu, bảo trì cho phần mềm luôn luôn sẵn sàng có người khác lo. Mua bán cũng qua trình duyệt, thậm chí ngồi nhà làm việc qua trình duyệt luôn. Còn mỗi một cái phải quan tâm là Bookmarks (hoặc Favorites).
Hiện tại thì tốc độ Internet còn chập chờn và chưa đủ nhanh, điểm kết nối còn chưa đủ rộng, phần mềm trên Internet cũng chưa có tính năng bằng phần mềm cài trên máy để bàn. Nhưng cứ theo đà này, máy tính cá nhân rồi sẽ teo lại chỉ còn là bàn phím, màn hình, chuột với một cái case bé xíu lắp ngay sau lưng màn hình là đủ để chạy trình duyệt web. Giống cái terminal ngày xưa nhưng hiện đại hơn. Các nhà sản xuất phần mềm sẽ không còn bán các bộ phần mềm đóng gói cho từng cá nhân mà cài lên máy chủ Internet rồi bán dịch vụ sử dụng cho người dùng. Game online là một dạng dịch vụ như thế.

Một xu hướng rõ ràng là không cưỡng lại được, chỉ có điều nó đến nhanh hay chậm mà thôi.

Nhưng lúc đó, dân tin học làm gì? Máy tính chỉ còn như cái TV, ít hỏng và cũng chẳng cần cài đặt. Phần mềm “tây” đầy trên Internet, mua thẻ rồi dùng như học ngoại ngữ online bây giờ, học sử dụng cũng qua web. Cái thị trường rộng lớn mà vố số “kỹ sư tin học” với trình độ cao nhất là biết cài Windows, MS Office hiện đang lĩnh lương sống được sẽ không còn nữa.

Nghĩ cho cùng nó cũng giống như chuyện sát nhập tỉnh, thừa ra khối thứ từ lãnh đạo đến ôtô. Đáng lo không?

Nhưng có nhanh chắc cũng phải 10-20 năm nữa. Khi nào thấy Internet wifi cao tốc miễn phí khắp hang cùng ngõ hẻm lo cũng vừa.

Các hệ thống file nhật ký của Linux

Giải phẫu hệ thống file nhật ký của Linux

M.Tim Jones (mtj@mtjones.com), Consultant Engineer, Emulex Corp. 04 Jun 2008

zxc232 lược dịch

Khi hệ điều hành bị tắt bất thình lình (mất điện, lỗi phần mềm, v.v..), trong hệ thống file xuất hiện lỗi do file đang ghi dở, địa chỉ chưa được cập nhật,… Nếu hệ thống file đang dùng không thuộc loại hệ thống file nhật ký (ext2,…), khi khởi động lại, hệ điều hành sẽ phát hiện được lần tắt bị lỗi (unclean shutdown) trước đó và tự động dùng phần mềm fsck (file system check) để soát và sửa lỗi. Nếu ổ cứng lớn, quá trình chạy fsck sẽ khá lâu và nếu lỗi nặng fsck không sửa được nó sẽ báo cho hệ điều hành khởi động vào chế độ single user mode để người dùng sửa.

Hệ thống file nhật ký tránh việc hỏng hệ thống file bằng cách ghi một nhật ký. Nhật ký là một file riêng ghi lại mọi thay đổi của hệ thống file vào một vùng đệm (thay vì ghi thẳng vào hệ thống file trên ổ cứng). Sau từng khoảng thời gian định trước, những thay đổi đó được thực hiện chính thức vào hệ thống file. Nếu giữa khoảng thời gian đó, hệ thống bị tắt đột ngột, file nhật ký sẽ được dùng để khôi phục lại các thông tin chưa lưu và tránh làm hỏng metadata của hệ thống file.

[Metadata của hệ thống gồm các thông tin về cấu trúc dữ liệu trên ổ cứng: ngày giờ tạo, xoá file và thư mục, tăng giảm dung lượng file, chủ nhân của file, …]

Tóm lại, hệ thống file nhật ký là một hệ thống file tự chữa lỗi bằng cách dùng một file nhật ký lưu lại mọi thay đổi trước khi thay đổi đó được thực hiện thật sự vào hệ thống file (xem hình 1).

111
Hình 1: Sơ đồ một hệ thống file nhật ký.

(Các hệ Linux hiện tại, sau khoảng 25-30 lần mount một partition, thường bằng số lần khởi động hệ thống, sẽ tự động thực hiện kiểm tra hệ thống file trong các partition đã mount. Do vậy, thỉnh thoảng ta thấy hệ thống khởi động lâu hơn thường lệ -ND)

Lịch sử hệ thống file nhật ký của Linux.

Hệ thống file nhật ký đầu tiên là IBM Journaled File System (JFS) ra đời năm 1990, version hiện nay là JFS2. Năm 1994, công ty Silicon Graphics công bố hệ thống file nhật ký cao tốc XFS cho hệ điều hành IRIX. XFS được chuyển vào Linux năm 2001. Smart File System (SFS) của công ty Amiga ra đời năm 1998 và công bố thành nguồn mở, dùng trong Linux năm 2005. Hệ thống file nhật ký phổ biến nhất hiện đang dùng trong các hệ Linux là ext3fs (third extended file system, thường viết tắt là ext3), được đưa vào Linux năm 2001. Ext3 là mở rộng (thêm khả năng nhật ký) của hệ thống file ext2 (không nhật ký). Cuối cùng, hệ thống file ReiserFS với nhiều tính năng hay, được chấp nhận rộng rãi nhưng hiện tác giả đang gặp khó khăn cá nhân nên không tiếp tục được.

Các kiểu ghi nhật ký.

Hệ thống file nhật ký dùng một file nhật ký làm vùng đệm lưu mọi thay đổi của hệ thống file nhưng có nhiều kiểu ghi nhật ký khác nhau. Ba kiểu thường dùng nhất là writeback, ordereddata.

Khi dùng kiểu writeback, chỉ các metadata được lưu nhật ký còn các block dữ liệu được ghi thẳng vào vị trí của nó trên ổ cứng. Cách này bảo vệ được cấu trúc dữ liệu nhưng bản thân dữ liệu vẫn lỗi (ví dụ hệ thống bị tắt sau khi metadata đã được ghi nhưng trước khi dữ liệu được ghi vào ổ cứng). Để tránh điều đó có thể dùng kiểu ordered: trước tiên dữ liệu phải được ghi xong vào ổ cứng rồi sau đó metadata mới được lưu vào nhật ký. Kiểu data là an toàn nhất: cả metadata và dữ liệu đều được ghi trước vào file nhật ký rồi mới cập nhật vào ổ cứng. Tuy nhiên tốc độ chậm vì dữ liệu phải ghi hai lần (đầu tiên ghi vào nhật ký sau đó ghi vào ổ cứng).

Kiểu ghi nhật ký cũng còn một số khía cạnh khác nhau nữa. Ví dụ nội dung nhật ký được ghi vào ổ cứng khi file nhật ký gần đầy hay là ghi sau từng khoảng thời gian nhất định?

Các hệ thống file nhật ký hiện nay.

Dưới đây xem xét bốn hệ thống file nhật ký phổ biến nhất hiện nay. Mỗi loại đều có ưu nhược điểm riêng.

JFS2

JFS2 là hệ thống file nhật ký đầu tiên đã nhiều năm dùng trong hệ điều hành AIX của IBM trước khi được mang sang Linux. JFS2 là hệ thống file 64 bit hỗ trợ kiến trúc đa xử lý.

JFS2 dùng kiểu ghi nhật ký ordered ở mức nhỏ hơn giây. JFS2 cũng dùng cách ghép các block thành từng nhóm liên tục (gọi là một extent) trong bộ nhớ trước khi ghi vào ổ cứng, do đó tốc độ ghi và đọc nhanh hơn và cũng giảm được lượng metadata cần quản lý. Nếu không dùng extent, metadata được cập nhật cho từng block dữ liệu, khi dùng extent, metadata chỉ cập nhật cho từng nhóm block.

JFS2 dùng cấu trúc thư mục kiểu B+ để duyệt nhanh hơn. JFS2 không có chính sách ghi nhật ký vào ổ cứng riêng mà dựa vào thời gian hết hạn (timeout) của kupdate daemon.

XFS

XFS cũng là hệ thống file nhật ký 64-bit có tốc độ rất cao dùng cây thư mục và vị trí file kiểu B+. XFS cũng dùng cách lưu file extent-based, dung lượng block có thể biến thiên từ 512 bytes đến 64KB.

Một tính năng đáng chú ý khác là XFS có tốc độ I/O cố định dành riêng và I/O trực tiếp: dữ liệu được copy trực tiếp giữa ổ cứng và vùng đệm (không phải qua nhiều vùng đệm khác nhau). XFS dùng kiều ghi nhật ký writeback.

XFS sử dụng kỹ thuật ghi trễ (Allocate-on-flush hoặc còn gọi là delayed allocation): khi các block trên ổ cứng được bố trí để chuẩn bị ghi dữ liệu, dung lượng ổ tương ứng được trừ đi khỏi bộ đếm dung lượng còn trống nhưng chưa thực sự được đánh dấu đã dùng. Dữ liệu vẫn nằm chờ trong bộ nhớ cho đến khi nó được ghi vào ổ cứng vì các nguyên nhân khác nhau.

Như vậy, nhiều dữ liệu được tích lại chờ trong bộ nhớ cho đến khi được ghi đồng thời, làm giảm cường độ sử dụng CPU, và giảm phân mảnh ổ cứng đặc biệt với những file tăng chậm. Nó cũng cho phép bố trí các vùng liên tục khi có nhiều file cùng lớn lên đồng thời.

EXT3 (Third extended file system – ext3fs)

Ext3 là hệ thống file nhật ký phổ biến nhất hiện nay và là cuộc cách mạng từ ext2. Ext3 tương thích với ext2 vì dùng cùng cấu trúc chỉ thêm vào phần nhật ký. Thậm chí có thể mount một partition ext3 như ext2 hoặc convert ext2 sang ext3 (dùng công cụ tune2fs).

Ext3 có thể dùng cả ba kiểu nhật ký (writeback, ordered và data) nhưng mặc định là ordered. Chính sách ghi vào ổ cứng có thể cấu hình được, mặc định là khi đầy ¼ nhật ký hoặc timeout của một trong những bộ đếm thời gian.

Một trong những nhược điểm chính của ext3 là phát triển từ ext2 lên, không phải là hệ thống file nhật ký được thiết kế từ đầu. Do đó nó thiếu một số tính năng tiên tiến mới đây có trong một số hệ thống file nhật ký khác (ví dụ extent-based). Tốc độ cũng chậm hơn các hệ thống file khác như ReiserFS, JFS và XFS nhưng lại tốn ít CPU và bộ nhớ hơn.

ReiserFS

ReiserFS là hệ thống file nhật ký được phát triển từ đầu nhằm vào nhật ký. Kiểu ghi nhật ký mặc định là ordered và cho phép resize online để tăng dung lượng partition. ReiserFS cũng hỗ trợ kiểu đặt nhiều file nhỏ trong một block để giảm phân mảnh và tăng tốc độ so với ext3.

ReiserFS v3 có nhiều tính năng hiện đại như cây thư mục B+. Định dạng cơ bản của hệ thống file dựa trên một cây B+ duy nhất, do đó tìm kiếm nhanh hơn và mở rộng dễ. Chính sách ghi từ nhật ký vào ổ cứng tuỳ theo kích thước nhật ký nhưng dựa trên số block cần ghi.

Hệ thống file nhật ký trong tương lai.

Reiser4

Sau khi ReiserFS được tích hợp thành công vào nhân Linux và được nhiều bản Linux chấp nhận, Namesys (công ty đứng đằng sau ReiserFS) tiếp tục xây dựng một hệ thống file nhật ký mới Reiser4. Reiser4 được thiết kế từ đầu như một hệ thống file nhật ký mới với nhiều tính năng tiên tiến.

Sau khi chủ công ty Namesys bị kết án hình sự, các hoạt động thương mại về Reiser4 đã ngừng. Hiện nay đang có những cố gắng tiếp tục.

EXT4 (Fourth extended file system – ext4fs)

Hệ thống file nhật ký mở rộng thứ tư (ext4) là sự phát triển của ext3, tương thích với ext3 (do đó có thể mount một partition ext4 như ext3 và ngược lại) và có thêm nhiều tính năng tiên tiến.

Thứ nhất, ext4 là hệ thống file 64-bit được thiết kế để hỗ trợ các dung lượng rất lớn (toàn hệ thống tới 1exabyte và một file tới 16 terabyte). Nó cũng có thể dùng cách lưu file theo nhóm block (extents), một extent tới 128 MB vùng ổ cứng liên tục với các block 4KB (nhưng nếu dùng thì sẽ không tương thích với ext3 nữa). Cũng như XFS và Reiser4, ext4fs dùng kỹ thuật ghi trễ dữ liệu lên ổ cứng. Nội dung file nhật ký được tính số kiểm tra (checksum) do đó file nhật ký có độ tin cậy cao. Thay cho các cấu trúc tiêu chuẩn B+ hoặc B*, ext4 dùng một biến thể của cấu trúc B tree gọi là H tree, có số thư mục con lớn hơn (64.000 thư mục trong khi ext3 giới hạn ở 32.000).

Mặc dù kỹ thuật ghi trễ làm giảm độ phân mảnh nhưng sau một thời gian một hệ thống file lớn vẫn bị phân mảnh. Một công cụ xoá phân mảnh online (e4defrag) được xây dựng để xử lý việc đó. Có thể dùng công cụ này để xoá phân mảnh một file riêng rẽ hoặc cả hệ thống file.

Một nét khác biệt giữa ext3 và ext4 là độ chia thời gian. Trong ext3, mốc thời gian (timestamp) nhỏ nhất là 1 giây. Ext4 nhìn về tương lai: khi tốc độ xử lý và tốc độ giao diện tăng lên, cần chia thời gian nhỏ hơn. Mốc thời gian tối thiểu của ext4 là 1 nano giây.

Ngày 11/10/2008, bản vá đánh dấu mã ext4 như mã ổn định được tích hợp vào nhân Linux 2.6.28, kết thúc giai đoạn phát triển và khuyên dùng ext4. Nhân Linux phiên bản 2.6.28 chứa hệ thống file ext4 được chính thức phát hành ngày 25/12/2008.

Một số bản Linux sắp phát hành (OpenSuse, …) cũng sẽ chính thức dùng ext4.

Sửa một số lỗi Linux (phần 2)

Chữa các lỗi kết nối mạng.

Trước tiên kiểm tra xem hệ thống có nhận card mạng không bằng lệnh:

sudo ifconfig -a

Nếu có, card mạng LAN sẽ được ký hiệu là eth0, card wifi là wlan0, ath0 hoặc ngay cả là eth1. Màn hình terminal sẽ có kết quả như sau:

Nếu không thấy có card nào, boot lại máy bằng đĩa Live CD (của hệ Linux khác) rồi chạy lại lệnh trên. Nếu Live CD nhận được card, chạy lệnh sau để xem nó dùng module nào:

sudo lspci -k

sau đó tìm trên web để có driver cần thiết cho hệ Linux đang cài trên máy.

Một số card wireless cần có file firmware đặt trong thư mục /lib/firmware. Khi driver của card được tải vào bộ nhớ, nó sẽ tải file firmware lên bộ nhớ của card. File firmware thường có trong các driver Windows (giải nén các file cab Windows để tìm) hoặc tải từ Internet.

Nếu không tìm được driver cho card thì cách cuối cùng là dùng driver của Windows. Trong Linux có trình NdisWrapper dùng cho việc này.

Trước hết cần cài NdisWrapper từ kho phần mềm của Linux. Sau đó cần tìm file Windows driver của card từ đĩa CD bán kèm theo card. Phải dùng đúng đĩa CD vì một số nhà chế tạo card có thói quen thay đổi chipset của card và do đó thay driver mà không thay đổi model card.

Tải file driver đó (là một file INF trên CD) vào bằng lệnh:

sudo ndiswrapper -i /path/to/driver.inf

Kiểm tra xem driver có làm việc không bằng lệnh:

sudo ndiswrapper -l

Lệnh trên sẽ liệt kê các driver hiện có của ndiswrapper. Tải ndiswrapper vào bộ nhớ bằng lệnh:

sudo modprobe -v ndiswrapper

Chạy lại lệnh ifconfig đã nêu ở trên, card wifi bây giờ sẽ xuất hiện như wlan0 (hoặc eth1, v.v…). Nếu không tìm thấy file INF trên CD, thì rất có thể nó được nén trong một file nén tự dãn dạng exe. Trong Linux, dãn file đó ra bằng lệnh (gói unzip phải đã cài):

unzip /mnt/cdrom/install.exe

Trong phần trước đã hướng dẫn cách tải tự động module khi Linux khởi động. Dùng cách đó để tải NdisWrapper.

Kết nối wifi bao giờ cũng được mã hoá để bảo mật. Nhưng khi đang thử, hãy tạm tắt chức năng mã hoá. Kiểm tra xem router của mạng đừng hạn chế địa chỉ MAC (nhất là khi đang kết nối một máy mới hoặc card wifi mới).

Phần lớn hệ Linux dùng trình Network Manager để quản lý các kết nối. Khi nhấn chuột vào biểu tượng Network Manager trên taskbar, tên các mạng wifi sẽ hiện lên để chọn kết nối. Nếu tên mạng không hiện, kiểm tra xem mạng có đặt ở chế độ thông báo tên mạng (broadcast SSID) không. Một số mạng wifi vì lý do an ninh không thông báo tên mạng.

Cũng có thể kiểm tra các mạng wifi hiện có bằng các lệnh sau:

sudo ifconfig wlan0 up
sudo iwlist wlan0 scan

Lệnh đầu để kích hoạt card wifi, lệnh sau cho hiện danh sách các mạng wifi đang trong vùng phủ sóng. Nếu nhận được thông báo “Interface Doesn’t Support Scanning” thì hoặc ta kích hoạt sai card hoặc card không có driver hoặc firmware đúng. Quay lại phần trên để chọn lại driver, firmware.

Nếu kết nối được thành công thì lập tức ngắt kết nối và khôi phục lại chế độ mã hoá của mạng rồi thử kết nối lại. Chế độ mã tốt nhất là WPA2 (nếu card không hỗ trợ thì dùng WPA – Wi-Fi Protected Access). Không nên dùng WEP vì độ an toàn thấp, dễ bị phá.

Mạng Internet có dây.

Nếu truy cập Internet có vẻ không thông, đầu tiên hãy thử dùng lệnh ping đến một địa chỉ đã biết. Ví dụ:

ping www.linuxformat.co.uk

Nếu mạng vẫn thông thì lệnh này sẽ cho biết số gói tin (packet) gửi và nhận tới địa chỉ trên. Nếu không, thử lại một lần nữa:

ping 80.244.178.151

Dãy số trên là địa chỉ IP của site www.linuxformat.co.uk. Nếu lệnh thứ hai làm việc mà lệnh thứ nhất không thì có nghĩa là bạn không phân giải được tên miền thành địa chỉ IP.

Kiểm tra file /etc/resolv.conf xem có chứa các địa chỉ máy chủ DNS của nhà cung cấp dịch vụ Internet không. Nếu trong mạng có router, nên kiểm tra xem địa chỉ IP của router trong file nói trên có đúng không.

Khi ping đến địa chỉ IP không được, hãy thử ping đến địa chỉ DNS server của nhà cung cấp dịch vụ Internet. Nếu ping được thì lỗi là từ chỗ nhà cung cấp thông ra mạng Internet. Một nguyên nhân khác là máy của bạn dùng IPv6, chuẩn IP mới nhưng router không hiểu.

Bước tiếp theo, thử mở giao diện web cấu hình của modem hoặc ping đến modem. Nếu được nghĩa là kết nối giữa modem và nhà cung cấp dịch vụ Internet bị ngắt. Kiểm tra dây cắm trong nhà hoặc báo cho nhà cung cấp.

Cũng có trường hợp, nếu card mạng dùng driver ngoài (không có trong Linux kernel) trước đây đã làm việc tốt, sau khi update kernel sẽ ngừng làm việc. Khi kernel được update, thường vẫn có thể khởi động bằng kernel cũ (các hàng menu dưới có chữ kernel trong menu khởi động), thử khởi động như vậy xem có phải nguyên nhân đó không.

Khắc phục lỗi IPv6

Cập nhật modem: kiểm tra website của nhà sản xuất, tìm firmware để cập nhật modem router cho phép xử lý IPv6. Xem kỹ hướng dẫn.

Thử bằng Firefox: tắt hỗ trợ IPv6 trong Firefox: gõ about:config vào thanh địa chỉ của Firefox rồi Enter. Trong thanh Filter xuất hiện, gõ IPv6. Tìm đến mục network.dns.disableipv6, nhấn phím phải chuột rồi chọn Toggle để chuyển giá trị từ false sang true. Sau đó thử truy cập lại website trước đây không vào được, nếu vào được tức là lỗi do IPv6.

Tắt IPv6 trong Linux: Có thể tắt hỗ trợ IPv6 trong Linux bằng cách sửa file cấu hình /etc/modprobe.conf hoặc /etc/modprobe.d/aliases tuỳ bản Linux. Mở các file đó bằng quyền root rồi bỏ các dòng có IPv6 và thêm hai dòng sau:

alias net-pf-10 off
alias ipv6 off

private:streamPage 3 of 3

Sửa một số lỗi chung trong Linux (phần 1)

Cách sửa các lỗi chung trong Linux (phần 1)

CHÚ Ý: các khuyến nghị dưới đây phần lớn là thực hiện bằng các lệnh. Đó là vì các lệnh thì bản Linux nào cũng cơ bản giống nhau. Cùng chức năng như các lệnh đó, mỗi bản Linux có thể có chương trình đồ hoạ dễ làm hơn, bạn phải tự tìm lấy.

Một số lệnh dưới đây phải thực hiện với quyền của root. Ubuntu và một số bản Linux có thể làm điều đó bằng cách thêm sudo vào trước lệnh. Với Mandriva, … thì trước tiên phải chạy lệnh su để chuyển sang root rồi mới chạy lệnh đã nêu (không cần sudo nữa).

Khôi phục boot menu (Distro fixes)

Các bản Linux khi cài đặt đều phát hiện được Windows đã cài và thiết lập boot menu có cả Win và Linux để chọn khi khởi động. Nhưng nếu phải cài lại Win bị lỗi thì sau khi cài, boot menu bị xóa, máy sẽ boot thẳng vào Win không thấy Linux đâu nữa!

Đừng sợ: Win đã viết đè trình Grub bootloader bằng trình khởi động riêng của nó. Bản Linux đã cài vẫn còn nguyên. Chỉ cần tải lại cấu hình bootloader vào Master Boot Record (MBR) của ổ cứng. Trước tiên khởi động máy boot từ một đĩa Linux Live CD, mở terminal và chạy lệnh:

sudo grub-install /dev/sda

Lệnh trên đúng khi các hệ điều hành cài trên ổ cứng thứ nhất (hoặc ổ cứng duy nhất – /dev/sda). Trình grub-install sẽ phát hiện ra Grub đã có và khôi phục lại mọi thứ. Nếu không được, bạn phải cài thủ công như sau:

Chạy lệnh sudo grub (với Ubuntu, hoặc với Mandriva chạy lệnh su rồi chạy tiếp grub) để vào grub shell (dấu nhắc lệnh chuyển thành grub>). Trong grub shell chạy lệnh:

find /boot/grub/stage1

… để xác định xem partition nào có file Grub. Nếu Win cài trên partition 1 thì Grub sẽ nằm trên partition 2 và lệnh trên trả lại kết quả (hd0,1). Sau đó chạy tiếp ba lệnh:

root (hd0,1)
setup (hd0)
quit

Lệnh thứ nhất xác định boot partition, lệnh thứ hai ghi bootloader vào MBR, lệnh thứ ba để thoát khỏi Grub shell.

Dùng lệnh để phát hiện lỗi

Giao diện đồ họa thân thiện, dễ dùng nhưng khó phát hiện lỗi. Giao diện dòng lệnh (màn hình terminal) là nơi hiện lên chi tiết quá trình thực hiện một lệnh và các thông báo lỗi nếu có.

Khi thực hiện một số việc trong màn hình đồ họa (cài một phần mềm, chạy một phần mềm, …) có thể không có kết quả mà không hề có thông báo lỗi.

Khi đó, nếu biết lệnh tương ứng, mở terminal và chạy lệnh đó trong terminal sẽ có các thông báo lỗi hiện trên màn hình. Thậm chí cả khi đã chạy được một phần mềm, nhấn vào một nút lệnh trong màn hình đồ họa bị lỗi cũng có thể làm như trên: mở terminal, chạy lệnh theo tên phần mềm, để nguyên terminal vẫn mở, nhấn vào nút lệnh bị lỗi, quay lại đọc trên màn hình terminal có thể có thông báo lỗi.

Dùng Live CD để chẩn đoán lỗi.

Khi không boot trực tiếp vào Linux đã cài trên ổ cứng, vẫn có thể chạy Linux từ đĩa Live CD (hoặc Live DVD) mà không cần cài bất kỳ thứ gì vào ổ cứng. Các hướng dẫn dưới đây dùng Live CD của bản Linux Knoppix.

Còn một phương án nữa là dùng bản Linux System Rescue CD. Bản này nhỏ (dưới 250MB), có thể cài lên ổ USB, có giao diện đồ hoạ và một số công cụ sửa chữa, khôi phục.

Khi khởi động ngưng lại giữa chừng.

Trước đây, khi khởi động các hệ Linux cho hiện lần lượt hàng loạt text trên màn hình. Phần lớn người dùng bình thường không hiểu nổi những text đó. Nhưng nếu quá trình khởi động có lỗi bị dừng lại thì những dòng text cuối cùng có thể cho biết nguyên nhân lỗi.

Hiện nay, các bản Linux khi khởi động đều có màn hình đồ hoạ (splash) đẹp nhưng nếu quá trình boot bị lỗi thì màn hình đó không cho biết nguyên nhân.

Khi đó có thể thêm option noapic vào quá trình boot hoặc sửa file /boot/grub/menu.lst hoặc /boot/grub/grub.conf để cho hiện các thông báo text khi khởi động.

Làm tương tự, nếu quá trình shutdown có lỗi.

Từng bước: phát hiện lỗi khi boot

Bỏ màn hình splash:

Knoppix: điểm sáng mục đầu trong boot menu, nhấn E để soạn thảo, chuyển con trỏ xuống dòng bắt đầu bằng từ “kernel” nhấn E lần nữa. Bỏ các option liên quan đến quiet và splash, làm xong nhấn Enter rồi B để boot lại.

Ubuntu, Mandriva, openSUSE: khi boot menu xuất hiện, dùng phím mũi tên chuyển thanh sáng xuống dòng Recovery Mode (với Ubuntu) hoặc Safe Mode (với Mandriva) hoặc Failsafe (với openSUSE) rồi Enter để khởi động tiếp.

(hoặc để thanh sáng ở hàng đầu tiên, nhấn F2, bên dưới màn hình xuất hiện Boot Options. Xoá các mục có từ quiet, splash rồi Enter để khởi động tiếp.)

Tìm vấn đề:

  • Theo dõi màn hình khởi động như trên để phát hiện lỗi khi quá trinh boot bị ngừng lại. Google thông báo lỗi để tìm cách giải quyết. Lỗi cũng có thể do không tương thích phần cứng: tháo các phần cứng không cần thiết rồi khởi động lại.
  • Nếu hệ thống khởi động được đến dấu  nhắc lệnh thì phần kernel không có lỗi. Gõ lệnh startx rồi Enter để vào chế độ đồ hoạ. Nếu đồ hoạ khởi động tốt thì lỗi thường nằm ở phần cấu hình của user (ở các chế độ recovery mode, … này đăng nhập theo user root). Xoá user đi tạo lại hoặc tạo user mới thường giải quyết được vấn đề.

Sửa các lỗi liên quan đến phần cứng.

Các driver cho phần lớn thiết bị phần cứng đã được cài khi cài Linux dưới dạng các kernel module. Hệ thống HAL/D-BUS sẽ nhận ra các thiết bị và tự động tải các driver module tương ứng vào bộ nhớ. Làm sao biết module nào đã được tải và nếu chưa thì giải quyết thế nào?

Phát hiện các phần cứng.

Để xem có các thiết bị nào kết nối vào các cổng PCI và USB, chạy các lệnh sau trong terminal:

sudo lspci
sudo lsusb

(lệnh trên dùng cho Ubuntu. Với Mandriva đầu tiên chạy lệnh su để chuyển sang user root, rồi chạy lệnh lspci và lsusb)

…lspci  sẽ cho ra kết quả tương tự như thế này:

00:1f.2 SATA controller: Intel Corporation 82801HR/HO/HH (ICH8R/DO/DH) 6 port SATA AHCI Controller (rev 02)

01:00.0 VGA compatible controller: nVidia Corporation GeForce 7100 GS (rev a1)

02:00.1 IDE interface: JMicron Technologies, Inc. JMicron 20360/20363 AHCI Controller (rev 03)

03:00.0 Ethernet controller: Attansic Technology Corp. L1 Gigabit Ethernet Adapter (rev b0)

…hoặc như thế này (với lệnh lsusb):

Bus 001 Device 004: ID 03f0:2c17 Hewlett-PackardBus 004 Device 002: ID 051d:0002 American Power Conversion Uninterruptible Power SupplyBus 002 Device 002: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port

Muốn xem thêm thông tin về một thiết bị, thêm các option -s và -v như sau:

sudo lspci -s 03:00.0 -v
sudo lsusb -s 001:004 -v

Ví dụ lệnh sudo lspci -s 02:00.0 -v  với một card mạng LAN sẽ cho kết quả như sau:

02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 02)
Subsystem: Giga-byte Technology Device e000
Flags: bus master, fast devsel, latency 0, IRQ 17
I/O ports at d000 [size=256]
Memory at e1110000 (64-bit, prefetchable) [size=4K]
Memory at e1100000 (64-bit, prefetchable) [size=64K]
[virtual] Expansion ROM at e1120000 [disabled] [size=64K]
Capabilities: [40] Power Management version 3
Capabilities: [50] Message Signalled Interrupts: Mask- 64bit+ Queue=0/1 Enable-
Capabilities: [70] Express Endpoint, MSI 01
Capabilities: [b0] MSI-X: Enable- Mask- TabSize=2
Capabilities: [d0] Vital Product Data <?>
Capabilities: [100] Advanced Error Reporting <?>
Capabilities: [140] Virtual Channel <?>
Capabilities: [160] Device Serial Number 78-56-34-12-78-56-34-12
Kernel driver in use: r8169
Kernel modules: r8169

Thông tin trên cho biết (2 dòng cuối) driver của card mạng này là r8169 và driver này có trong môđun r8169. Một kernel module có thể có nhiều driver nên tên driver và tên module có thể khác nhau.

Ngoài công cụ dòng lệnh, có thể dùng các chương trình đồ hoạ (tương tự như Device Manager của Windows) để xem thông tin về phần cứng. Một số hệ Linux cài sẵn chương trình này (Mandriva, openSUSE), một số hệ khác phải cài thêm. Một trong những chương trình đó là Hardinfo. Màn hình như sau:

Nếu một thiết bị nào không làm việc trong bộ Linux đã cài nhưng làm việc khi boot bằng Live CD thì vẫn trong chế độ Live CD, chạy lệnh lspci -k để xem thiết bị đó dùng module nào. Sau đó quay lại khởi động vào hệ Linux đã cài và thử tải module đó bằng lệnh:

modprobe -v modulename

Nếu lệnh trên không có thông báo lỗi nghĩa là module đã được tải vào bộ nhớ. Để kiểm tra, dùng lệnh lsmod (list module), trong danh sách hiện ra phải có module vừa tải bằng lệnh modprobe ở trên. Nếu có thông báo “device not present” nghĩa là thiết bị ứng với module đó không có, tức là trong lệnh modprobe trên ta chọn sai module.

Nếu thông báo là “module not found” nghĩa là trong nhân Linux không có module hỗ trợ thiết bị đang xét. Khi đó hoặc phải dịch lại kernel để kích hoạt module cần thiết hoặc chờ nâng cấp lên kernel mới hơn.

Kiểm tra version của linux kernel bản Live CD và bản Linux đã cài bằng lệnh sau:

uname -r

Nếu kernel của Live CD mới hơn, nâng cấp kernel của bản Linux đã cài lên (nếu có).

Một trường hợp nữa là thiết bị đang xét không có driver trong kernel mà phải dùng một driver bên ngoài cài thêm. Một số card wifi, máy in ở trường hợp này. Đầu tiên tìm các driver này trong các kho phần mềm của bản Linux, nếu không thấy phải tìm trên Internet.

Tải tự động các module.

Thông thường, Linux sẽ tự động nhận các thiết bị phần cứng và tải các module cần thiết khi khởi động. Trong trường hợp có một module cần thiết không tải tự động, ta có thể bắt nó tải như sau:

Trong Ubuntu, mở file /etc/modules rồi thêm tên module đó vào cuối file. Trong SUSE, mở file /etc/sysconfig/kernel đặt settings MODULES_LOADED_ON_BOOT:

MODULES_LOADED_ON_BOOT="module1 module2"

Trong Fedora, thêm một file script có đuôi là .modules vào thư mục /etc/sysconfig/modules/. Ví dụ cần tải module NdisWrapper, file /etc/sysconfig/modules/ndiswrapper.modules có nội dung như sau:

#!/bin/sh/sbin/modprobe ndiswrapper

Vì đó là file script nên cần phải gán cho nó thuộc tính chạy được (executable) bằng lệnh sau:

sudo chmod +x /etc/sysconfig/modules/ndiswrapper.modules

Đừng đổ mọi lỗi cho phần mềm.

Lỗi khó chẩn đoán nhất là những lỗi xảy ra ngẫu nhiên, nhất là khi nó gây treo máy hoặc tắt máy không có cảnh báo trước. Nếu lỗi xảy ra cùng vào một thời điểm hoặc khi dùng cùng một phần mềm thì còn có thể đoán được nguyên nhân, nhưng nếu nó xảy ra hoàn toàn ngẫu nhiên thì có thể là do phần cứng. Thông thường nhất là máy bị quá nóng, lỗi bộ nhớ hoặc bộ nguồn điện bị quá tải.

Cũng đừng có nghĩ rằng “lỗi này không xảy ra với hệ điều hành khác của tôi (ngụ ý Windows) vậy thì nó là lỗi của Linux rồi” vì các hệ điều hành làm việc với phần cứng theo những cách khác nhau. Ví dụ, Linux dùng bộ nhớ tích cực hơn do đó nếu bộ nhớ bị lỗi, Linux sẽ dễ mất ổn định hơn trước khi Windows để lộ ra triệu chứng. Quạt và các cánh tản nhiệt lâu ngày sẽ bị bụi và các chất bẩn khác bám làm giảm tác dụng, hãy định kỳ làm sạch. Cài gói phần mềm lm_sensors để theo dõi nhiệt độ CPU và case, cài những trình theo dõi hệ thống như GKrellM để hiện các thông số nhiệt độ trên desktop.

Laptop được thông gió tốt nhưng cũng nên kiểm tra các cửa thông gió tránh bị nghẽn. Nguồn của laptop tương đối an toàn vì có pin đảm bảo cung cấp điện ổn định. Nhưng nguồn của desktop thì không chắc như vậy nhất là các bộ nguồn rẻ tiền, no-name đi cùng với các case giá rẻ. Do giảm giá nên một số bộ nguồn đó chỉ đáp ứng đúng tính năng khi còn mới. Vì vậy nên thử các bộ nguồn khác nhau, bạn có thể sẽ ngạc nhiên. Nguồn không tốt có thể làm hỏng phần cứng và dữ liệu, vì vậy tiết kiệm có thể là không tiết kiệm trong khi một bộ nguồn tốt có thể dùng được nhiều năm. Nếu nguồn điện nơi bạn ở không ổn định, một bộ lưu điện là đáng đầu tư. Thiết bị chống sốc điện chỉ chống sốc không chống được giảm điện áp.

Test bộ nhớ rất dễ dàng chỉ tốn thời gian. Phần lớn các đĩa Linux Live CD đều có menu test bộ nhớ. Cần phải boot máy bằng Live CD để dùng ít bộ nhớ nhất vì chỉ test được vùng bộ nhớ không sử dụng. Nên test trong chế độ full test ít nhất hai lần và có thể để chạy qua đêm. Càng test kỹ càng chắc là bộ nhớ OK. Nếu đã có lỗi thì nên thay bộ nhớ khác.

Card màn hình.

Các cách làm nói trên không áp dụng cho card màn hình. Các driver card màn hình nằm trong phần mềm X.org, trừ các card ATI hoặc Nvidia vừa có driver nguồn mở vừa có driver nguồn đóng của chính hãng (tốt hơn). Nếu cần các hiệu ứng 3D để chơi game hay kích hoạt các hiệu ứng màn hình thì nên dùng driver chính hãng.

Nếu các driver chính hãng có trong kho phần mềm của bản Linux đang dùng thì cài từ đó dùng trình package manager là tốt nhất vì khi cài nó sẽ thay đổi cả file xorg.conf kiểm soát cấu hình đồ hoạ. Còn nếu phải tải driver từ site của hãng về thì cần đọc kỹ hướng dẫn cài đặt.

Mất màn hình đồ hoạ.

Sau khi đã cài đặt xong Linux, khởi động lại máy, thay vì màn hình đồ hoạ, bạn chỉ thấy màn hình đen xì với con trỏ nhấp nháy (hoặc màn hình đồ hoạ nhưng độ phân giải thấp, màu xấu, màn hình méo). Điều gì xảy ra? Thường nguyên nhân là vì chương trình cài đặt đã không tự phát hiện được đúng các thuộc tính của card màn hình và màn hình. Vì vậy phải cấu hình lại card màn hình, màn hình.

(Hiện tượng trên cũng xảy ra khi bạn chỉnh một số thông số của card màn hình, màn hình)

Dùng giao diện giòng lệnh.

Để cấu hình lại card màn hình, màn hình (và cả bàn phím, chuột), chạy các lệnh sau đây:

  • openSUSE – yast2
  • Debian – dpkg-reconfigure xserver-xorg
  • Ubuntu – sudo dpkg-reconfigure xserver-xorg
  • Mandriva – XFdrake

Các lệnh trên sẽ mở ra một giao diện text để cấu hình. Nếu bản Linux của bạn không có các lệnh trên thì dùng lệnh:

X -configure

Sau khi cấu hình xong, nếu vẫn còn ở giao diện dòng lệnh thì chạy lệnh sau để khởi động giao diện đồ hoạ:

startx

Nếu màn hình đồ hoạ vẫn không khởi động được thì tìm lỗi trong file:

/var/log/ Xorg.0.log

.trong đó những dòng có chứa cụm ký tự (EE) là thông báo lỗi. Có thể tìm nhanh thông báo lỗi bằng lệnh sau:

grep EE /var/log/Xorg.0.log


Quản lý file audio/video trên Linux.

Hướng dẫn quản lý các file audio/video trên Linux

Posted by: Damien March 3rd, 2009.

Dịch: zxc232

Bạn đã bao giờ gặp tình huống muốn chuyển một file video từ format này sang format khác trên máy Linux mà không biết làm thế nào chưa? Chơi DVD trên Ubuntu hoặc rip đĩa VCD thành file mpeg?

Dưới đây liệt kê các phần mềm dùng xử lý các file video/audio trong Linux. Các phần mềm này chạy được với hầu hết các bản Linux. Cách cài đặt và ảnh màn hình dựa trên Ubuntu nhưng cũng áp dụng được tương tự cho các bản Linux khác.

Các chương trình nêu dưới đây đều có link dẫn đến site gốc của chương trình.

I.Xử lý VideoCD

I.1 Chơi VCD trên Linux.

Hầu hết các chương trình multimedia đều có thể chạy VCD. Cá nhân tôi khuyên nên dùng VLC vì đó là trình duy nhất có thể chơi mọi loại file audio/video.

(Mplayer và Totem cũng chơi được hầu hết file audio/video. SMplayer có nhiều tính năng hơn Totem dùng để chơi nhạc và xem video thì rất tốt nhưng không có các tính năng convert format như VLC nêu dưới đây – ND.)

I.2 Ghi đĩa VCD

Các chương trình ghi đĩa CD như Brasero K3b đều có thể ghi được đĩa VCD. Riêng K3b thì file nguồn phải là file mpeg.

I.3 Ghi video từ VCD

Cách dễ nhất để ghi VCD thành file mpeg là dùng K3b.

Mở K3b và nhấn vào Tools → Rip Video CD.

VLC cũng có thể dùng để chuyển VCD sang một format khác.

Mở VLC, nhấn vào Media → Convert/Save.

Hướng dẫn chi tiết về chuyển định dạng file media bằng VLC xem tại đây

I.4 Tách audio từ VCD

Dùng VLC có thể tách file audio khỏi VCD. Nhấn vào Media → Convert/Save để mở màn hình sau:

Nhấn tiếp vào tab Audio codec rồi đánh dấu chọn mục Audio. Ở ô Codec, chọn định dạng file audio sẽ ghi lại (ví dụ MP3). Gõ tên file có cả đuôi file (ví dụ: song.mp3) vào ô Filename rồi nhấn nút Save.

II.Xử lý DVD

II.1 Xem DVD trên Linux.

Ubuntu không cho phép chơi DVD do các vấn đề pháp lý và kỹ thuật. Phải cài thêm gói ubuntu-restricted-extra rồi chạy file script libdvdread3 bằng lệnh:

sudo /usr/share/doc/libdvdread3/install-css.sh

Khi đó, file libdvdcss2 sẽ được tải về và cài. Nếu vì lí do gì mà lệnh trên không chạy, tải file libdvdcss2 từ địa chỉ sau để cài.

http://download.videolan.org/pub/libdvdcss/1.2.9/deb/libdvdcss2_1.2.9-1_i386.deb

II.2 Rip DVD

Để rip DVD, cá nhân tôi dùng Handbrake. Chương trình này có một số profile định trước (Presets) kể cả convert DVD thành format mong muốn cho iPhone và PS3.

Để cài Handbrake trên Ubuntu, tải file cài tại đây. Màn hình như sau:

Còn một chương trình khác là AcidRip. Chương trình này có một số tính năng có ích nhưng sắp xếp hơi lộn xộn. Chương trình có trong kho phần mềm của Ubuntu nên cài đặt dễ dàng.

II.3 Tạo DVD (DVD authoring)

Bạn có thể tạo DVD riêng với menu, các chương, v.v.. Hai trong số những chương trình tốt nhất tôi đã thử là DeVeDeManDVD. Cá nhân tôi thích ManDVD hơn vì có nhiều tuỳ chọn và có hướng dẫn chi tiết từng bước suốt quá trình tạo DVD. Nhưng nếu bạn tìm một phần mềm dùng nhanh mà không cần cấu hình nhiều thì chọn DeVeDe.

Để cài ManDVD, tải file deb về tại đây GetDeb. DeVeDe có sẵn trong kho phần mềm của Ubuntu nên cài dễ dàng. DeVeDe cũng có thể dùng để tạo VCD.

III. Xử lý file Video.

III.1 Chuyển đổi file từ format này sang format khác.

Handbrake và VLC đều có thể chuyển đổi file video từ định dạng này sang định dạng khác. Nhưng cũng có một phần mềm nhỏ chuyên làm việc đó là Winff làm việc với phần lớn định dạng file video.

Hướng dẫn cài đặt xem ở đây.

III.2 Biên tập file video

Avidemux, KinoKDEnlive là ba chương trình biên tập video lớn vừa mạnh vừa dễ dùng. Avidemux chạy trên nền Gnome, còn Kino và KDEnlive chạy trên KDE.

III.3 Biên tập thuyết minh

Hai chương trình Gnome-subtitlesAegisub là hai chương trình đơn giản dùng biên tập thuyết minh. Gnome-subtitles đơn giản và nhẹ dùng soạn, sửa đơn giản các thuyết minh (có sẵn trong kho phần mềm Ubuntu). Aegisub có nhiều tính năng hơn như kéo thả, xoay, thu phóng thuyết minh và cả một bản mẫu (template) để làm karaoke.

III.4 Chèn thuyết minh vào file video.

Có hai cách chèn thuyết minh vào file video: Softsub và Hardsub. Softsub là các thuyết minh chứa trong một file riêng đánh dấu kèm theo mốc thời gian cần hiển thị khi chạy file video và thường được điều khiển bởi phần mềm chơi video. Hardsub là thuyết minh hòa vào khung hình video gốc nên không cần thiết bị hoặc phần mềm đặc biệt để hiển thị.

Khi file video có file thuyết minh riêng (Softsub), chương trình VLC có tính năng tải file thuyết minh để xem. Nhấn vào menu Tools → Preferences. Trong màn hình Preferences (xem hình dưới), mục Show Settings chọn All. Trong cột trái màn hình, kích vào Video → Subtitles/OSD. Trong cột bên phải, mục Use subtitle file, nhấn nút Browse để chọn file thuyết minh.

Để tạo thuyết minh dạng Hardsub, có thể dùng Avidemux để nhúng file thuyết minh vào video. Trên màn hình chính của Avidemux, chọn encoder của video. Mở file video rồi nhấn vào menu Video → Filters. Trong cột bên trái màn hình xuất hiện, chọn Subtitles. Chọn các option thích hợp của thuyết minh rồi add nó vào Active Filters.

IV. Xử lý file audio.

IV.1 Tách file audio CD.

Trong Gnome, chương trình SoundJuicer dùng để tách và chuyển file audio CD thành định dạng khác. Trong KDE, dùng K3b.

Muốn chuyển thành định dạng nào, trước đó codecs tương ứng phải được cài đặt.

IV.2 Tạo audio CD.

Brasero và K3b đều có thể dùng tạo audio CD. Chọn Create audio CD rồi kéo thả file nhạc vào đó. File sẽ được tự động convert thành audio CD format.

IV.3 Chuyển file audio từ định dạng này sang định dạng khác.

Chương trình Sound-converter hỗ trợ chuyển đổi phần lớn định dạng audio.

IV.4 Biên tập file audio.

Audacity là chương trình tốt nhất để biên tập file audio. Nó cũng dùng để chuyển đổi file audio từ dạng này sang dạng khác.

Linux hay GNU/Linux và cấu trúc nhân Linux

CẤU TRÚC NHÂN LINUX

Lược dịch: zxc232

Nguyên bản: Anatomy of the Linux kernel

M. Tim Jones (mtj@mtjones.com), Consultant Engineer, Emulex Corp. 06 Jun 2007

I.Tóm tắt lịch sử Linux

Linux hay GNU/Linux?

Khi thì người ta gọi “hệ điều hành Linux”, lúc lại gọi là “hệ điều hành GNU/Linux”. Lí do là vì Linux thực ra là phần nhân của hệ điều hành. Nhiều các ứng dụng khác bổ xung kết hợp với nhân Linux làm thành một hệ điều hành sử dụng được, các ứng dụng đó phần lớn là phần mềm GNU. Vì vậy nhiều người coi gọi “hệ điều hành GNU/Linux” là đúng, còn tên Linux dùng để chỉ phần nhân của hệ điều hành đó.

GNU là các phần mềm của GNU Project, được gọi là GNU packages or GNU programs. Các thành phần chính gồm: bộ dịch GNU Compiler Collection (GCC), các công cụ mã nhị phân GNU Binary Utilities (binutils), lớp vỏ bash shell, thư viện C GNU C library (glibc), và các công cụ lõi GNU Core Utilities (coreutils).

(GNU Project cũng có dự án làm phần nhân hệ điều hành nhưng chưa xong. Vì vậy hiện nay các hệ điều hành mà ta vẫn gọi là Linux dùng nhân Linux của Linus Tovarlds kết hợp với các gói phần mềm nói trên của GNU Project. Do đó gọi hệ điều hành GNU/Linux thì hợp lý hơn – lời ND)

GNU là tên tắt đệ quy của GNU’s Not Unix: thiết kế phần mềm giống Unix nhưng là phần mềm tự do (free software) và không chứa mã Unix.

Tóm tắt lịch sử

Trong khi hiện nay Linux khá phổ biến thì lịch sử của nó lại khá mới. Thời kỳ bình minh của máy tính, các nhà lập trình viết chương trình cho phần cứng bằng ngôn ngữ của phần cứng đó. Do chưa có hệ điều hành nên chỉ một ứng dụng (và một user) có thể dùng một phần cứng lớn và đắt tiền tại một thời điểm. Đến 1950 mới bắt đầu có những hệ điều hành sơ khai.

Trong những năm 60, học viện Công nghệ Massachusetts (MIT) và một số công ty kết hợp xây dựng một hệ điều hành thí nghiệm gọi là Multics (Multiplexed Information and Computing Service) cho máy tính GE-645. Một trong những công ty đó, AT&T, bỏ Multics và xây dựng hệ điều hành riêng của mình vào năm 1970 gọi là hệ Unics. Cùng với Unics, ngôn ngữ lập trình C cũng được phát triển và được dùng để viết hệ điều hành sao cho nó không phụ thuộc vào kiến trúc phần cứng.

Hai mươi năm sau, Andrew Tanenbaum tạo nên một phiên bản vi nhân (microkernel) của Unix dùng để chạy trên các máy tính cá nhân nhỏ gọi là hệ MINIX (minimal UNIX). Đó là hệ điều hành nguồn mở đầu tiên tạo cảm hứng cho Linus Torvalds xây dựng nên Linux vào đầu những năm 90.

Hình 1: Lịch sử các phiên bản nhân Linux

Trục đứng là số dòng lệnh, trục ngang là thời điểm công bố. Phiên bản đầu 0.11 (tháng12/1991) có 10.239 dòng lệnh. Phiên bản 2.6.0 (tháng12/2003) có gần 6 triệu dòng lệnh.

Linux phát triển nhanh từ dự án của một người thành một dự án lập trình toàn cầu gồm hàng nghìn nhà lập trình. Một trong những quyết định quan trọng nhất của Linux là nó chấp nhận tuân theo giấy phép phần mềm nguồn mở GPL (GNU General Public License). Giấy phép đó tránh cho nhân Linux không bị khai thác thương mại và cũng cho phép nó kết hợp được với các ứng dụng của GNU Project.

II.Giới thiệu nhân Linux

Một hệ điều hành GNU/Linux có thể phân thành hai vùng: vùng người dùng (User Space) gồm các thư viện C và các phần mềm ứng dụng (soạn văn bản, …); vùng nhân (Kernel Space) gồm ba thành phần chính như hình 2.

Trên cùng là lớp các ứng dụng của người dùng (User Applications). Bên dưới là lớp các thư viện C (GNU C Library). Lớp thư viện phục vụ cho giao diện các lời gọi hệ thống tạo liên kết giữa các ứng dụng và nhân Linux. Giao diện này quan trọng vì nhân Linux và các ứng dụng chiếm các vùng địa chỉ bộ nhớ được bảo vệ khác nhau. Mỗi ứng dụng có vùng địa chỉ ảo riêng còn nhân có một vùng địa chỉ duy nhất.

Nhân Linux có thể chia thành ba lớp. Trên cùng là giao diện các lời gọi hệ thống thực hiện các chức năng cơ bản như đọc, ghi. Bên dưới là phần mã nhân hệ điều hành (kernel code) hoặc chính xác hơn là mã nhân độc lập với kiến trúc vi xử lý (processor). Các mã lệnh trong lớp này dùng chung cho mọi loại processor mà Linux hỗ trợ. Lớp dưới cùng là các mã lệnh phụ thuộc vào kiến trúc từng loại processor (x86, x86-64, …).

III. Các hệ thống con chính của nhân Linux

Hình 3 dưới đây mô tả các hệ thống con chính của nhân Linux.

Hình 3: Các hệ thống con chính của nhân Linux

III.1 Nhân là gì?

Như hình 3, nhân Linux thực ra là bộ quản lý các tài nguyên. Các tài nguyên gồm: các tiến trình (process), bộ nhớ (memory) và thiết bị phần cứng. Nhân Linux quản lý các tài nguyên đó và là người điều hành việc truy cập tài nguyên đồng thời của nhiều user. (User trong bài này được hiểu theo nghĩa rộng bao gồm tất cả những gì có nhu cầu sử dụng tài nguyên hệ thống: các tiến trình, các phần mềm, v.v….)

Updated (8/2009): bản đồ nhân linux có ở đây. Nhấn vào từng mục để xem chi tiết.

III.2Giao diện lời gọi hệ thống (System call interface – SCI)

SCI thực hiện các lời gọi hệ thống từ vùng ứng dụng vào nhân Linux. Giao diện này độc lập với kiến trúc bộ vi xử lý ngay cả trong cùng một họ vi xử lý. SCI có thể thực hiện các dịch vụ gọi hàm dồn kênh và tách kênh. Các gói liên quan được cài trong thư mục ẩn ./linux/kernel và phần độc lập với kiến trúc vi xử lý nằm trong ./linux/arch.

III.3 Quản lý các tiến trình (Process management)

Quản lý tiến trình đảm bảo việc thực hiện các tiến trình. Trong vùng nhân Linux, mỗi tiến trình được gọi là một mạch lệnh (thread) và được thể hiện thành một vi xử lý ảo (gồm mã lệnh, dữ liệu, các ngăn xếp và các thanh ghi của CPU). Trong vùng ứng dụng thì chỉ dùng từ tiến trình mặc dù Linux không phân biệt hai khái niệm này (threads và processes). Nhân cung cấp một giao diện lập trình ứng dụng (API) để: tạo tiến trình mới (fork, exec hoặc các hàm POSIX), ngừng tiến trình (kill, exit) và thông tin, đồng bộ giữa các tiến trình (signal hoặc các cơ cấu POSIX).

Quản lý tiến trình còn dùng để chia sẻ CPU giữa các mạch lệnh đang hoạt động. Nhân thực hiện một thuật toán lập lịch cố định bất kể đến các mạch lệnh đang tranh chấp quyền sử dụng CPU. Lịch này cũng hỗ trợ cả chế độ đa xử lý đối xứng (Symmetric MultiProcessing – SMP). Các gói liên quan được cài trong thư mục ẩn ./linux/kernel và phần độc lập với kiến trúc vi xử lý nằm trong ./linux/arch.

III.4 Quản lý bộ nhớ (Memory management).

Một tài nguyên quan trọng khác mà nhân Linux quản lý là bộ nhớ. Để sử dụng bộ nhớ hiệu quả theo cách mà phần cứng quản lý bộ nhớ ảo, bộ nhớ được chia thành các trang (mỗi trang là 4KB đối với phần lớn loại vi xử lý). Linux có các cơ cấu quản lý lượng bộ nhớ khả dụng và các cơ cấu phần cứng để mapping giữa bộ nhớ vật lý và bộ nhớ ảo.

Việc quản lý bộ nhớ còn làm nhiều hơn là chỉ quản lý các trang 4KB. Linux dùng một sơ đồ định vị lát (slab allocator) lên trên mỗi trang. Sơ đồ này dùng trang 4KB làm cơ sở nhưng tạo một cấu trúc bên trong, theo dõi trang nào đầy, trang nào mới dùng một phần, trang nào còn trống.

Khi nhiều user sử dụng bộ nhớ, dung lượng có thể không đủ. Khi đó các trang nhớ được chuyển sang ổ cứng. Quá trình này được gọi là trao đổi (swapping) giữa bộ nhớ và ổ cứng. Các gói phần mềm liên quan đến quản lý bộ nhớ đặt trong thư mục ./linux/mm.

III.5 Hệ thống file ảo (Virtual file system)

Hệ thống file ảo (VFS) là một khía cạnh hay của nhân Linux, cung cấp một giao diện trừu tượng hoá chung cho hệ thống file. VFS tạo nên một lớp chuyển đổi giữa SCI và các hệ thống file của Linux.

Hình 4: VFS tạo nên một lớp chuyển đổi giữa user và các hệ thống file.

Nằm trên cùng của VFS là lớp các API các chức năng như mở, đóng, đọc, viết file. Dưới cùng của VFS là lớp trừu tượng hệ thống file xác định các chức năng lớp trên thực hiện như thế nào. Đó là các plug-in đối với một hệ thống file cho trước (có trên 50 plug-in như vậy). Các phần mềm liên quan đến VFS nằm trong thư mục ./linux/fs.

Bên dưới lớp file hệ thống là bộ đệm cache (buffer cache) gồm các chức năng chung cho mọi hệ thống file (không phụ thuộc vào một kiểu hệ thống file riêng biệt nào). Lớp cache này tối ưu hoá việc truy cập vào các thiết bị vật lý bằng cách giữ dữ liệu trong một thời gian ngắn (hoặc đọc trước sao cho dữ liệu luôn có khi cần). Dưới bộ đệm cache là các driver thiết bị là giao diện của các thiết bị vật lý cụ thể.

III.6 Các ngăn xếp mạng (Network stack)

Các ngăn xếp mạng được thiết kế theo một kiến trúc lớp mô phỏng theo đúng kiến trúc lớp của các giao thức. Nhắc lại rằng IP là giao thức lớp mạng lõi nằm bên dưới giao thức vận chuyển (thường là TCP). Bên trên TCP là lớp socket được gọi đến qua SCI.

Lớp socket là API chuẩn của hệ thống con network, tạo nên một giao diện cho các giao thức mạng khác nhau. Lớp socket quy định một cách quản lý kết nối và di chuyển dữ liệu chuẩn hoá giữa các điểm đầu cuối. Tài nguyên mạng nằm ở thư mục ./linux/net.

III.7 Các driver thiết bị (Device drivers)

Phần lớn mã nguồn của nhân Linux là các driver để điều khiển các thiết bị phần cứng. Cây thư mục của mã nguồn nhân Linux có một thư mục con driver trong đó có các thư mục con ứng với các thiêt bị khác nhau. Mã nguồn driver nằm ở ./linux/drivers.

III.8 Mã lệnh phụ thuộc kiến trúc vi xử lý (Architecture-dependent code)

Phần lớn Linux độc lập với kiến trúc vi xử lý, nhưng cũng có những bộ phận cần phải theo đúng từng kiến trúc cụ thể để hoạt động được và hiệu quả. Thư mục con ./linux/arch chứa các mã nguồn phụ thuộc kiến trúc đó. Ví dụ với một máy trạm tiêu biểu, thư mục đó là i386,

IV.Các đặc điểm đáng chú ý của nhân Linux

Cùng với thời gian, nhân Linux đã sử dụng bộ nhớ và CPU ngày càng hiệu quả hơn và đặc biệt ổn định. Nhưng khía cạnh thú vị nhất của Linux là tính khả chuyển (portability) mặc dù kích cỡ lớn và độ phức tạp của nó. Linux có thể dịch để chạy trên rất nhiều loại processor và nền tảng phần cứng khác nhau đáp ứng các ràng buộc kiến trúc và nhu cầu khác nhau. Một trong những ví dụ là Linux có thể chạy trên một processor có bộ phận quản lý bộ nhớ hoặc không có bộ phận đó. Cổng uClinux của Linux hỗ trợ việc không có bộ phận quản lý bộ nhớ.

Ngoài tính khả chuyển và hiệu quả, dưới đây là một vài đặc tính đáng chú ý khác của nhân Linux.

Linux, với tư cách là một hệ điều hành nguồn mở, là nơi dùng để test các giao thức mới và những đặc điểm tiên phong của các giao thức đó. Linux hỗ trợ một số lớn giao thức mạng từ TCP/IP cho đến các giao thức mạng cao tốc (trên 1 Gigabit Ethernet – 1GbE – cho đến 10GbE). Linux cũng hỗ trợ các giao thức như SCTP (Stream Control Transmission Protocol) có nhiều đặc tính tiên tiến hơn TCP.

Linux cũng là một kernel động, cho phép thêm bớt các thành phần phần mềm trong khi đang chạy. Các thành phần đó gọi là các module tải động được (dinamically loadable kernel modules) có thể được tải vào bộ nhớ khi boot (khi tìm thấy một phần cứng mới cần đến nó) hoặc tải và rút ra khỏi bộ nhớ bất kỳ lúc nào bởi user.

(Một ổ cứng đã cài Windows trên một máy, khi mang ổ cứng sang máy khác phải cài lại Windows. Ngược lại, một ổ cứng cài Linux có thể mang sang máy khác vẫn chạy tốt. Một ví dụ khác: các hệ Linux cài trên ổ USB boot được có thể cắm vào bất kỳ máy nào để chạy.).

Một đặc tính mới của Linux gần đây là nó có thể dùng làm hệ điều hành cho các hệ điều hành khác (hypervisor). Kernel Linux gần đây đã được bổ xung tính năng máy ảo từ nhân (Kernel-based Virtual Machine – KVM). Tính năng này tạo ra một giao diện mới cho vùng người dùng, cho phép các hệ điều hành khác (Linux hoặc Windows) chạy trên KVM. Yêu cầu duy nhất là processor phải hỗ trợ tập lệnh ảo hoá mới.

V.Tìm hiểu tiếp

Trên đây ta mới chỉ lướt qua các nét chính của nhân Linux. Bạn đọc có nhu cầu nên tìm hiểu thêm chi tiết hơn trong danh sách các tài liệu tham khảo cho dưới đây.

Learn:

  • The GNU site describes the GNU GPL that covers the Linux kernel and most of the useful applications provided with it. Also described is a less restrictive form of the GPL called the Lesser GPL (LGPL).

  • UNIX, MINIX and Linux are covered in Wikipedia, along with a detailed family tree of the operating systems.

  • The GNU C Library, or glibc, is the implementation of the standard C library. It’s used in the GNU/Linux operating system, as well as the GNU/Hurd microkernel operating system.

  • uClinux is a port of the Linux kernel that can execute on systems that lack an MMU. This allows the Linux kernel to run on very small embedded platforms, such as the Motorola DragonBall processor used in the PalmPilot Personal Digital Assistants (PDAs).

  • Kernel command using Linux system calls” (developerWorks, March 2007) covers the SCI, which is an important layer in the Linux kernel, with user-space support from glibc that enables function calls between user space and the kernel.

  • Inside the Linux scheduler” (developerWorks, June 2006) explores the new O(1) scheduler introduced in Linux 2.6 that is efficient, scales with a large number of processes (threads), and takes advantage of SMP systems.

  • Access the Linux kernel using the /proc filesystem” (developerWorks, March 2006) looks at the /proc file system, which is a virtual file system that provides a novel way for user-space applications to communicate with the kernel. This article demonstrates /proc, as well as loadable kernel modules.

  • Server clinic: Put virtual filesystems to work” (developerWorks, April 2003) delves into the VFS layer that allows Linux to support a variety of different file systems through a common interface. This same interface is also used for other types of devices, such as sockets.

  • Inside the Linux boot process” (developerWorks, May 2006) examines the Linux boot process, which takes care of bringing up a Linux system and is the same basic process whether you’re booting from a hard disk, floppy, USB memory stick, or over the network.

  • Linux initial RAM disk (initrd) overview” (developerWorks, July 2006) inspects the initial RAM disk, which isolates the boot process from the physical medium from which it’s booting.

  • Better networking with SCTP” (developerWorks, February 2006) covers one of the most interesting networking protocols, Stream Control Transmission Protocol, which operates like TCP but adds a number of useful features such as messaging, multi-homing, and multi-streaming. Linux, like BSD, is a great operating system if you’re interested in networking protocols.

  • Anatomy of the Linux slab allocator” (developerWorks, May 2007) covers one of the most interesting aspects of memory management in Linux, the slab allocator. This mechanism originated in SunOS, but it’s found a friendly home inside the Linux kernel.

  • Virtual Linux” (developerWorks, December 2006) shows how Linux can take advantage of processors with virtualization capabilities.

  • Linux and symmetric multiprocessing” (developerWorks, March 2007) discusses how Linux can also take advantage of processors that offer chip-level multiprocessing.

  • Discover the Linux Kernel Virtual Machine” (developerWorks, April 2007) covers the recent introduction of virtualization into the kernel, which turns the Linux kernel into a hypervisor for other virtualized operating systems.

  • Check out Tim’s book GNU/Linux Application Programming for more information on programming Linux in user space.

  • In the developerWorks Linux zone, find more resources for Linux developers, including Linux tutorials, as well as our readers’ favorite Linux articles and tutorials over the last month.

  • Stay current with developerWorks technical events and Webcasts.

Get products and technologies

  • Order the SEK for Linux, a two-DVD set containing the latest IBM trial software for Linux from DB2®, Lotus®, Rational®, Tivoli®, and WebSphere®.

  • With IBM trial software, available for download directly from developerWorks, build your next development project on Linux.

Discuss

Ảo hóa môi trường máy tính (Virtualization)

Ảo hóa môi trường máy tính hiện đang là một chủ đề “hot” vì những lợi ích to lớn mà nó mang lại.

Ảo hóa cũng là chủ đề nóng trong thế giới nguồn mở. Các hệ Linux máy chủ hàng đầu hiện nay như Red Hat, Suse đều tích hợp sẵn phần mềm ảo hóa và có nhiều ứng dụng thực tiễn (xem bài “Tình hình ứng dụng nguồn mở 2007).

Bài viết này tập hợp các thông tin trên Internet cố dựng một bức tranh chung về chủ đề đó. Các link trong bài dẫn đến các nguồn tin. Tải file “Ao hoa moi truong may tinh.pdf” tại kho Mediafire