Khái niệm về hệ điều hành LINUX
Linux là một hệ điều hành máy tính và cũng là tên của hạt nhân hệ điều hành, nổi tiếng với vai trò là phần mềm tự do và phát triển mã nguồn mở Phiên bản đầu tiên của Linux được Linus Torvalds phát triển vào năm 1991 khi ông còn là sinh viên tại Đại học Helsinki, và sau 3 năm làm việc, phiên bản Linux 1.0 ra mắt vào năm 1994 Hệ điều hành này được phát hành dưới giấy phép GNU General Public License, cho phép người dùng tải về và xem mã nguồn của Linux.
Thuật ngữ "Linux" thường được hiểu là nhân Linux, nhưng thực tế nó còn chỉ một hệ điều hành giống Unix, hay còn gọi là GNU/Linux, được hình thành từ sự kết hợp giữa nhân Linux và các thư viện, công cụ GNU Hệ điều hành này bao gồm nhiều phần mềm phong phú như máy chủ web, ngôn ngữ lập trình, hệ quản trị cơ sở dữ liệu, cùng với các môi trường desktop như GNOME và KDE, cũng như các ứng dụng văn phòng như OpenOffice và LibreOffice.
Linux, ban đầu được phát triển cho vi xử lý 386, hiện nay đã hỗ trợ nhiều kiến trúc vi xử lý khác nhau Hệ điều hành này được ứng dụng rộng rãi, từ máy tính cá nhân cho đến siêu máy tính và các thiết bị nhúng, bao gồm cả điện thoại di động.
Nguồn gốc của hệ điều hành LINUX
Vào năm 1991 trong khi đang học tại University of Helsinki, Torvalds bắt đầu có ý tưởng về một hệ điều hành, hơn nữa ông cũng nhận thấy hạn chế trong
10 giấy phép của MINIX Nó chỉ cho phép việc sử dụng MINIX trong giáo dục mà thôi Ông bắt đầu viết nên hệ điều hành riêng của mình
Torvalds phát triển kernel Linux trên môi trường MINIX, cho phép các ứng dụng viết cho MINIX hoạt động trên Linux Khi Linux phát triển, việc phát triển diễn ra trực tiếp trên hệ điều hành này Các ứng dụng GNU đã thay thế nhiều thành phần của MINIX, tận dụng lợi ích của mã nguồn mở từ dự án GNU cho một hệ điều hành còn mới mẻ.
Ưu điểm và hạn chế của hệ điều hành LINUX
1.3.1 Ưu điểm của hệ điều hành LINUX
- Bản quyền và chi phí hợp lý:
Linux là một hệ điều hành mã nguồn mở, phát triển miễn phí cho người dùng, cho phép họ truy cập hầu hết mọi dòng mã Ngược lại, Windows và bộ Office yêu cầu người dùng phải chi khoảng vài triệu đồng để sở hữu bản quyền.
Sử dụng Linux, bạn có thể truy cập miễn phí tất cả các tính năng cùng bộ ứng dụng văn phòng Hệ điều hành này cũng hỗ trợ tốt cho lập trình viên và quản trị mạng.
- Hỗ trợ tốt cho lập trình viên – quản trị mạng
Hệ thống Linux nổi bật với tính ổn định và hiệu suất cao, làm cho nó trở thành lựa chọn lý tưởng cho nhiều công việc, đặc biệt trong lĩnh vực quản trị mạng và lập trình viên, nơi yêu cầu hệ thống hoạt động ổn định.
- Sự hỗ trợ kỹ thuật tích cực
Linux cung cấp dịch vụ hỗ trợ kỹ thuật 24/7 trong cả năm đối với mọi dịch vụ Có thể kể đến nhu Red Hat, Novell và Canonical
Linux mang lại sự linh hoạt cao, cho phép người dùng dễ dàng tùy chỉnh theo nhu cầu cá nhân Với khả năng tương thích đa dạng với nhiều môi trường khác nhau, Linux trở thành một lựa chọn lý tưởng cho lập trình viên và nhà phát triển.
Hệ điều hành Linux nổi bật với giao diện phong phú, cho phép người dùng dễ dàng thay đổi môi trường giao diện mà không ảnh hưởng đến hệ thống hay các chương trình đã cài đặt Người dùng có thể thoải mái lựa chọn giữa các giao diện như GNOME, KDE và Unity, mang lại trải nghiệm sử dụng đa dạng và linh hoạt.
Linux cung cấp độ an toàn và khả năng bảo mật cao, giúp hạn chế sự tấn công của mã độc và virus Trong khi người dùng Windows thường phải đối mặt với nhiều loại virus và mã độc, Linux mang lại cảm giác an toàn hơn vì tất cả mã độc và virus đều không thể hoạt động trên nền tảng này.
Linux hoạt động mượt mà và ổn định trên cả những máy tính có cấu hình yếu, nhờ vào sự nâng cấp và hỗ trợ thường xuyên từ cộng đồng lập trình.
1.3.2 Nhược điểm của hệ điều hành LINUX
Bên cạnh những ưu điểm ở trên, hệ điều hành Linux vẫn còn một số điểm hạn chế:
• Số lượng ứng dụng hỗ trợ trên Linux chưa phong phú, còn khá ít sự lựa chọn cho người dùng
• Một số nhà sản xuất không phát triển Driver hỗ trợ nền tảng Linux
• Bạn sẽ mất một khoảng thời gian để “thích nghi” nếu chuyển từ hệ điều hành Windows sang Linux vì thực sự khá khó để làm quen với Linux
• Tùy vào tính chất, nhu cầu sử dụng mà bạn cần tìm một hệ điều hành thích hợp với mình
Linux hiện nay có nhiều bản phân phối đa dạng nhờ vào tính chất nguồn mở của nó Dưới đây là một số bản phân phối chính của hệ điều hành này.
- CentOS / Red Hat Enterprise Linux
Tổng kết chương 1
Trong chương này, báo cáo giới thiệu về hệ điều hành LINUX, bao gồm lịch sử hình thành và các phiên bản khác nhau của nó Hệ điều hành LINUX nổi bật với những đặc điểm như hoạt động mượt mà và giao diện thân thiện với người dùng.
Từ đó, đưa ra ưu nhược điểm của hệ điều hành LINUX Chương 2 sẽ tìm hiểu về kiến trúc và các thành phần trong hệ điều hành LINUX
Kiến trúc tổng quan
Hệ điều hành là phần mềm phức tạp giúp người dùng tương tác và điều khiển phần cứng cùng các ứng dụng trên máy tính Các hệ điều hành dựa trên Linux Kernel được gọi là các bản phân phối (distro) của Linux Thông thường, Linux bao gồm ba thành phần chính: Kernel, Shell và Applications.
Hình 1 : Hình minh họa kiến trúc tổng quan hệ điều hành linux
Kernel là phần quan trọng nhất của hệ điều hành, hoạt động như một chương trình máy tính được khởi động ngay sau bootloader Nó có nhiệm vụ quản lý bộ nhớ và điều khiển các thiết bị ngoại vi như bàn phím và chuột.
… và có quyền kiểm soát mọi thứ trong hệ thống
Kernel là thành phần quan trọng của hệ điều hành, thường được nạp vào vùng nhớ riêng và được bảo vệ khỏi sự can thiệp từ các chương trình ứng dụng cũng như các phần khác trong hệ điều hành.
Sự tách biệt giữa kernel và phần còn lại của hệ điều hành tạo ra hai khái niệm quan trọng trong Linux: kernel space và user space Tất cả hoạt động của kernel, như khởi tạo tiến trình, xử lý ngắt và quản lý phần cứng, diễn ra trong kernel space Ngược lại, các thao tác của người dùng, như chạy chương trình hoặc soạn thảo văn bản, được thực hiện trong user space Việc phân chia này giúp ngăn chặn xung đột dữ liệu giữa kernel và user, đồng thời bảo vệ kernel khỏi tác động từ user space.
Hình 2: Cách hoạt động của Kernel
Shell là một chương trình nằm trên Kernel, có chức năng thực thi các lệnh từ người dùng hoặc ứng dụng Nó hoạt động như một trung gian giữa Kernel và các ứng dụng, "phiên dịch" các lệnh từ ứng dụng gửi đến Kernel để thực hiện.
Các loại shell như sau:
- sh (the Bourne Shell): đây là shell nguyên thủy của UNIX được viết bởi Stephen Bourne vào năm 1974 Đến nay shell sh vẫn sử dụng rộng rãi
- bash(Bourne-again shell): đây là shell mặc định trên linux
- csh (C shell): shell được viết bằng ngôn ngữ lập trình C, được viết bởi Bill Joy vào năm 1978
- Ngoài ra còn có các loại shell khác như: ash (Almquist shell), tsh (TENEX
- Dấu nhắc Shell thay đổi tùy thuộc vào tài khoản user đang làm việc Ví dụ, khi làm việc với tài khoản user root, dấu nhắc shell có dạng:
Còn khi làm việc với tài khoản user thường, dấu nhắc shell có dạng:
Ứng dụng, phần mềm và tiện ích là những công cụ mà người dùng cài đặt và sử dụng hàng ngày trên máy tính Trên hệ điều hành Kali, các công cụ chính được coi là ứng dụng, trong đó bao gồm cả trình duyệt và giao diện GNOME mà người dùng đang sử dụng.
Kiến trúc hệ thống của nhân LINUX
Hình vẽ dưới đây mô tả kiến trúc tổng quan nhất về hệ điều hành Linux
Hệ thống nhân được tổ chức với phần không gian người dùng ở phía trên cùng, nơi các ứng dụng và chương trình người dùng được thực thi Khu vực này cũng chứa thư viện GNU C (glibc), đóng vai trò quan trọng trong việc hỗ trợ các hoạt động của ứng dụng.
Bên dưới vùng không gian người dùng là vùng không gian kernel (kernel space) Linux Kernel tồn tại chính ở vùng không gian này
Trong hệ điều hành Linux, không gian người dùng và không gian kernel hoạt động trong các vùng nhớ riêng biệt Để trao đổi dữ liệu giữa hai không gian này, Linux sử dụng cơ chế gọi hệ thống (system call) Các chương trình trong không gian người dùng có thể giao tiếp với kernel thông qua system call trực tiếp hoặc thông qua các hàm trong thư viện GNU C.
Vùng kernel space được chia làm 3 tầng:
- Trên cùng là giao diện system call, nơi cung cấp cơ chế trao đổi, làm việc giữa không gian người dùng và không gian kernel
Tầng tiếp theo trong cấu trúc hệ điều hành Linux là kernel, nơi chứa các mã nguồn độc lập với kiến trúc phần cứng Mã nguồn tại đây được sử dụng chung cho tất cả các loại kiến trúc vi xử lý mà Linux hỗ trợ.
- Tầng tiếp theo là phần mã nguồn kernel phụ thuộc vào từng phần cứng
Mã nguồn ở mức này được thiết kế để phục vụ từng loại kiến trúc, từng loại phần cứng khác nhau
Kiến trúc phân tầng của kernel được minh họa qua quy trình truy cập phần cứng từ user space Khi một chương trình gửi yêu cầu, nó sẽ thông qua tầng giao diện system call để chuyển tiếp yêu cầu đến kernel Tại đây, kernel thực hiện các thao tác chung cho mọi kiến trúc và phần cứng, như đóng gói và định tuyến gói tin, trước khi chuyển sang tầng xử lý riêng biệt cho từng loại phần cứng, nơi mà cách thức gửi gói tin sẽ khác nhau tùy vào loại card mạng.
2.2.2 Những hệ thống con trong nhân LINUX
Linux Kernel được cấu thành bởi các thành phần chính như hình vẽ dưới đây:
Hình 4: Những hệ thống con trong Linux Kernel
Giao diện System Call (SCI) là lớp thực hiện những yêu cầu, những lời gọi hàm từ không gian người dùng user space
Lớp giao diện system call thực chất là một giao diện có thể phụ thuộc vào kiến trúc phần cứng Cách thức xử lý các yêu cầu từ không gian người dùng có thể khác nhau tùy thuộc vào từng loại CPU.
Các vi xử lý x86 thế hệ mới áp dụng các hàm ảo hóa nhằm tối ưu hóa việc thực hiện system call, vượt trội hơn so với các vi xử lý x86 cũ sử dụng phương pháp truyền thống 80h.
Quản lý tiến trình Định nghĩa đơn giản nhất của tiến trình: Tiến trình – process là một chương trình được thực thi trong hệ thống
Trong Linux Kernel, hệ thống quản lý tiến trình chịu trách nhiệm thực thi các tiến trình, được gọi là luồng (thread) trong kernel space, trong khi đó, thuật ngữ tiến trình (process) được sử dụng trong user space Mặc dù có sự khác biệt về cách gọi, nhưng trong Linux, hai khái niệm này không có sự phân biệt và thực chất là tương đương nhau.
Hệ điều hành cung cấp các APIs thông qua system call để quản lý tiến trình, bao gồm việc tạo tiến trình mới (thông qua các lệnh fork, exec), dừng tiến trình (sử dụng kill, exit) và thực hiện giao tiếp cũng như đồng bộ giữa các tiến trình (qua tín hiệu signal).
Kernel phát triển bộ lập lịch với các thuật toán nhằm quản lý tiến trình và luồng đang hoạt động Nó phân chia thời gian và xác định thời điểm các tiến trình và luồng cần sử dụng CPU.
Một thành phần quan trọng trong Kernel là quản lý bộ nhớ Linux Kernel không chỉ quản lý bộ nhớ có sẵn mà còn cung cấp cơ chế ánh xạ giữa bộ nhớ vật lý và bộ nhớ ảo.
Hệ thống quản lý bộ nhớ là giải pháp tối ưu cho việc quản lý bộ nhớ, giúp cải thiện hiệu suất và tốc độ thao tác với bộ nhớ vật lý một cách hiệu quả.
Hệ thống file ảo tạo ra một giao diện thống nhất cho hệ thống file trên thiết bị, đồng thời cung cấp lớp chuyển đổi giữa các lệnh gọi hệ thống và hệ thống file được kernel hỗ trợ.
Hình 5: Hệ thống file ảo
Hệ thống file ảo bao gồm các API cơ bản như open, close, read và write ở lớp trên, trong khi lớp dưới là hệ thống file trừu tượng hóa, định nghĩa lại các hàm này cho từng loại hệ thống file cụ thể Khi gọi hàm open từ lớp trên, cách thực hiện sẽ khác nhau tùy thuộc vào loại hệ thống file; ví dụ, hàm open cho hệ thống file ext3 sẽ hoạt động khác so với hàm open cho hệ thống file /proc.
Dưới lớp hệ thống file là tầng bộ nhớ đệm Tầng này độc lập với các loại phần cứng
Bên dưới bộ nhớ đệm sẽ tới tầng device driver, là tầng cung cấp giao diện thực hiện việc giao tiếp với các thiết bị vậy lý khác nhau
Linux kernel được thiết kế và hỗ trợ các tính năng mạng một cách đầy đủ
Hình 6: Hệ thống network stack
Mã nguồn của device drivers là các đoạn mã dùng để giao tiếp và tương tác với từng loại phần cứng và thiết bị cụ thể Ví dụ, có các device drivers cho Bluetooth, I2C, cổng Serial và USB, mỗi loại đều phục vụ cho những chức năng và thiết bị riêng biệt.
Mã nguồn phụ thuộc kiến trúc
Hầu hết mã nguồn của các hệ thống con trong Linux Kernel được thiết kế để không phụ thuộc vào kiến trúc Tuy nhiên, vẫn tồn tại những phần trong Linux cần phải phụ thuộc vào loại kiến trúc mà nó hoạt động trên đó.
Thư mục /linux/arch là nơi chứ mã nguồn riêng biệt cho từng loại kiến trúc
Ví dụ cho một máy tính cá nhân, thư mục i386 sẽ được sử dụng.
Các thành phần của hệ điều hành linux
2.3.1 Hệ điều phối hoạt động : Quản lý tiến trình (Process Mangagement) Mỗi tiến trình trong Linux được biểu diễn bằng một cấu trúc dữ liệu task_struct(task có nghĩa là tiến trình trong Linux) Linux sử dụng task vector để
Quản lý các con trỏ đến các task_struct trong Linux có tối đa 512 phần tử Khi một tiến trình được tạo ra, một task_struct mới sẽ được cấp phát và thêm vào vector task Hệ điều hành Linux hỗ trợ hai loại tiến trình: loại bình thường và loại thời gian thực Cấu trúc task_struct bao gồm các trường thông tin như trạng thái (thi hành, chờ, ngưng, lưng chừng), thông tin lập lịch, định danh, thông tin liên lạc giữa các tiến trình, liên kết, định thời gian, hệ thống tập tin, bộ nhớ ảo và ngữ cảnh.
2.3.2 Thành phần quản lý và phân phối tài nguyên
Quản lý hệ thống tập tin
Linux nổi bật với khả năng hỗ trợ nhiều hệ thống tập tin, mang lại tính linh động và khả năng tương thích với nhiều hệ điều hành khác nhau Kể từ những phiên bản đầu tiên, Linux đã hỗ trợ 15 loại tập tin, bao gồm ext, ext2, xia, minix, msdos, vfat, proc, smb, ncb, iso9660, sysv, hpfs, affs và ufs.
Trong Linux và UNIX, hệ thống tập tin được truy cập qua cấu trúc cây thừa kế đơn, không phải thông qua các thiết bị xác định như tên hoặc số hiệu ổ đĩa Linux cho phép thêm các hệ thống tập tin vào một thư mục, được gọi là thư mục thiết lập.
Hệ thống tập tin của Linux và Unix được cấu trúc theo dạng cây phân cấp, với thư mục gốc là bậc cao nhất, được biểu thị bằng dấu gạch chéo “/”.
Đường dẫn /home/nhom5/l01/scnp.odt chỉ đến tập tin scnp.odt trong thư mục nhom5, nằm trong thư mục gốc (/) Dưới thư mục gốc (/) có nhiều thư mục quan trọng của hệ thống tập tin, được công nhận trên tất cả các bản phân phối Linux Dưới đây là danh sách các thư mục thường thấy dưới thư mục gốc (/):
Hình 7: Cấu trúc thư mục của root trong Linux
Một số thư mục chuẩn:
/bin, /sbin: chứa các lệnh cần thiết cho hệ thống
/dev: tập tin thiết bị hoặc các file đặc biệt
/etc: chứa các file cấu hình của Linux
/lib: kernel modules, thư viện chia sẻ cho các lệnh nằm trong /bin, /sbin /mnt, /media: (mount point) dùng để ánh xạ các phân vùng đĩa
/proc: những thông số của kernel
/boot: Linux kernel, system map cho bước 2 của bootloader
/home: thư mục người dùng
/root: thư mục của root (admin, người quản trị)
/usr: tài nguyên (tĩnh, chia sẻ) cho người dùng
/usr/local, /opt: phần mềm, thư viện chia sẻ
/var: dữ liệu thay đổi, thư mục spool (máy in), tập tin nhật ký (logs), thư mục chia sẻ và không chia sẻ
Tất cả các tập tin trong hệ thống tập tin Linux được gán quyền truy cập khác nhau cho từng người dùng, bao gồm quyền đọc, viết và thực hiện Người quản trị hệ thống, hay còn gọi là super user "root", có quyền truy cập vào mọi tập tin Mỗi tập tin thuộc về một người dùng cụ thể và được thiết lập các hạn chế truy cập tùy theo người dùng và nhóm người dùng Do đó, mỗi tập tin được bảo đảm an toàn bởi ba bộ quyền truy cập được gán cho chúng.
3 nhóm người dùng như sau, theo thứ tự từ cao đến thấp:
- User (người dùng) những quyền truy cập của nhóm này áp dụng cho người sở hữu tập tin
- Group (nhóm người dùng) những quyền truy cập của nhóm này áp dụng cho nhóm đã được gắn với tập tin
- Other (những người khác) những quyền truy cập của nhóm này áp dụng cho tất cả những người còn lại
Mỗi bộ quyền truy cập sẽ xác định cụ thể các quyền truy cập thực tế đối với các tập tin và các thư mục như sau:
- Read (đọc) quyền xem nội dung tập tin hoặc mở tập tin quyền xem nội dung của tập tin thư mục
- Write (ghi, viết) quyền ghi và sửa lại nội dung tập tin hoặc xoá tập tin quyền sửa lại nội dung của tập tin thư mục
Quyền thực thi được liên kết với các tập tin lệnh, cho phép nhóm người dùng đã được cấp quyền này thực hiện các tập tin lệnh và truy cập vào các thư mục.
Quyền trên hệ thống Linux được biểu thị bằng các số từ 0 đến 7 trong hệ thập phân Một user hoặc group có quyền R (read), W (write), E (execute) đối với một file hoặc folder sẽ được ký hiệu là 1, trong khi không có quyền tương ứng sẽ được ký hiệu là 0 (-).
Nếu một người dùng hoặc nhóm có quyền truy cập vào một file hoặc folder, điều này tương ứng với mã nhị phân 111 hoặc số thập phân 7 Quyền 777 cho phép quyền đọc, viết và thực thi (RWE) cho tất cả người dùng.
Trong môi trường quy mô trung bình, việc kết nối một máy đơn Linux với Internet có thể thực hiện dễ dàng thông qua modem và tài khoản dial-up từ nhà cung cấp dịch vụ Internet (ISP) Người dùng cần thiết lập dịch vụ PPP (Point-to-Point Protocol) và chọn tùy chọn TCP/IP trong cấu hình phần nhân Linux Mặc dù một số nhà cung cấp vẫn hỗ trợ giao thức SLIP, PPP thường được ưa chuộng hơn do tính năng tương thích cao Thách thức lớn nhất là xác lập PPP trên máy trạm, bao gồm việc sửa đổi các tập tin cấu hình trong thư mục /etc/ppp Ngoài ra, chương trình linuxconf cũng có thể được sử dụng để cấu hình tính năng dial-out của PPP.
Linux có khả năng được cấu hình thành trạm gateway Internet trong mạng LAN, cho phép nhiều máy tính chia sẻ một tài khoản Internet Điều này rất hữu ích cho những người dùng có nhu cầu sử dụng chung kết nối Internet cho 2 hoặc 3 máy Hơn nữa, Linux có thể được thiết lập thành server SLIPhay PPP để truy cập thông qua modem.
Trong hệ điều hành Linux, đặc biệt là Ubuntu, chỉ người dùng ban đầu được tạo ra mới có quyền quản lý hệ thống, trong khi tài khoản root mặc định bị vô hiệu hóa Các quản trị viên hệ thống có kinh nghiệm thường rất cẩn trọng khi sử dụng tài khoản root để đảm bảo an toàn cho hệ thống.
Người dùng chỉ có quyền truy cập vào thư mục Home hoặc các ổ lưu trữ ngoài với định dạng FAT32 trên phân vùng Windows Mặc dù tài khoản ban đầu có thể thực hiện nhiều tác vụ quản lý hệ thống, nhưng mỗi thao tác đều yêu cầu xác thực người dùng Ubuntu cũng thiết lập các phiên làm việc tương tự như trên website, tự động yêu cầu xác nhận mật khẩu sau một khoảng thời gian nhất định.
Người dùng và nhóm người dùng
User là thuật ngữ dùng để xác định một cá nhân trong hệ thống, trong khi Group được sử dụng để chỉ một tập hợp người dùng có những đặc điểm chung.
Một group có thể có nhiều user và một user có thể là thành viên trong nhiều group
Tất cả người dùng Linux được gán một ID người dùng (uid), đây là một số nguyên, người dùng bình thường bắt đầu với uid từ 1000 trở lên
Các file Log quan trọng trong hệ điều hành Linux
2.4.1 File log /var/log/messages
File log này chứa nhật ký hoạt động hệ thống, lưu trữ thông tin quan trọng liên quan đến hệ thống Nó ghi lại tất cả dữ liệu hoạt động, bao gồm mail, cron, daemon, kern, và auth, giúp theo dõi và quản lý hiệu suất của hệ thống một cách hiệu quả.
Người dùng có thể theo dõi các lỗi khởi động không liên quan đến kernel, các lỗi dịch vụ ứng dụng và các thông báo ghi lại trong quá trình khởi động hệ thống thông qua file log này.
28 Đây là file log đầu tiên mà các quản trị viên Linux nên kiểm tra nếu có sự cố trên hệ thống
Các bản phân phối Linux thuộc họ Redhat, chẳng hạn như CentOS và RHEL, lưu trữ thông tin trong thư mục /var/log/message, trong khi Ubuntu và các hệ thống dựa trên Debian khác lại lưu trữ trong /var/log/syslog.
Hình 8: Nhật ký hoạt động hệ thống
2.4.2 File log /var/log/auth.log
Thông tin xác thực trên hệ thống máy chủ Debian và Ubuntu được ghi lại, và khi người dùng gặp vấn đề liên quan đến cơ chế ủy quyền, họ nên tìm kiếm trong file log này để tìm ra nguyên nhân.
Thông qua file log này giúp cho người dùng xác định được:
• Các lần thử đăng nhập thất bại
• Điều tra các cuộc tấn công và các lỗ hổng liên quan đến cơ chế ủy quyền của người dùng
Hình 9: Nhật ký đăng nhập tài khoản root
Hình 10: Các lần đăng nhập thất bại
2.4.3 File log /var/log/secure Đối với các hệ thống sử dụng RedHat và CentOS thì file log này thay thế cho file log /var/log/auth.log bên trên
Hệ thống lưu trữ thông tin xác thực và bảo mật, bao gồm các lỗi xác thực và thông tin đăng nhập File log cho phép người dùng theo dõi các thông tin đăng nhập sudo, SSH, cũng như các lỗi do tiến trình bảo mật ghi lại Nó cung cấp chi tiết về các lần đăng nhập trái phép hoặc thất bại, đồng thời lưu trữ thông tin về các lần đăng nhập thành công và theo dõi hoạt động của người dùng hợp lệ.
2.4.4 File log /var/log/boot.log Đối với file log boot.log chính là nơi lưu trữ tất cả thông tin liên quan đến khởi động và mọi thông báo được ghi lại trong quá trình khởi động bao gồm tập lệnh khởi tạo hệ thống, /etc/init.d/bootmisc.sh, Người dung nên phân tích file log này để kiểm tra các vấn đề liên quan đến tắt máy không đúng cách, khởi động lại hoặc lỗi khởi động Và cũng có thể hữu ích để xác định thời gian ngừng hoạt động của hệ thống do tắt máy đột xuất
Hình 11: Thông báo trong quá trình khởi động
2.4.5 File log /var/log/dmesg
Bộ kernel ghi nhận thông tin quan trọng về thiết bị phần cứng và trình điều khiển trong quá trình khởi động hệ thống Khi khởi động, kernel phát hiện và ghi lại trạng thái của các thiết bị, lỗi phần cứng và các thông báo khác Nếu có thiết bị phần cứng hoạt động không đúng hoặc không được phát hiện, tệp nhật ký này sẽ là nguồn thông tin hữu ích để khắc phục sự cố.
2.4.6 File log /var/log/kern.log Đây là một file log vô cùng quan trọng chính là nơi chứa các thông tin được ghi bởi kernel Thông qua file log này giúp cho người dùng có thể khắc phục các lỗi và cảnh báo liên quan đến kernel Kernel log có thể hữu ích trong việc khắc phục sự cố kernel và có ích trong việc gỡ lỗi các vấn đề phần cứng
Hình 12: Thông tin được ghi bởi Kernel
2.4.7 File log /var/log/faillog
File này lưu trữ thông tin về các lần đăng nhập không thành công của người dùng Người dùng có thể sử dụng lệnh faillog để xem nội dung của file này Đây là một file log rất hữu ích trong việc phát hiện các vi phạm bảo mật liên quan đến việc hack tên người dùng hoặc mật khẩu, cũng như các cuộc tấn công mạng.
2.4.8 File log /var/log/cron
Nơi lưu trữ toàn bộ thông tin liên quan đến Crond, bao gồm việc khởi tạo công việc bởi tiến trình nền cron và các thông báo lỗi liên quan.
Mỗi khi một công việc cron được thực hiện, tệp nhật ký sẽ ghi lại toàn bộ thông tin liên quan, bao gồm kết quả thực thi thành công và các thông báo lỗi nếu có thất bại.
Nếu như người dùng đang gặp một vấn đề với cron theo lịch trình của mình thì cần kiểm tra file log này
2.4.9 File log /var/log/yum.log
Thông tin ghi lại khi cài đặt gói bằng yum được lưu trong file log, giúp người dùng theo dõi quá trình cài đặt các thành phần hệ thống và gói phần mềm Kiểm tra các thông tin này cho phép xác định xem gói đã được cài đặt chính xác hay chưa, từ đó hỗ trợ người dùng khắc phục sự cố liên quan đến cài đặt phần mềm.
2.4.10 File log /var/log/maillog hoặc /var/log/mail.log
Nơi đây lưu trữ thông tin từ máy chủ mail, bao gồm các dịch vụ như postfix, smtpd, MailScanner và SpamAssassin File log ghi lại tất cả email đã gửi hoặc nhận trong một khoảng thời gian nhất định, giúp người dùng kiểm tra vấn đề gửi thư thất bại và nhận thông tin về spam bị chặn Để theo dõi nguồn gốc của một email đến, người dùng có thể xem xét file log maillog hoặc mail.log.
2.4.11 File log /var/log/httpd
Tại đây lưu trữ các file error_log và access_log của tiến trình httpd Apache File error_log ghi lại tất cả các lỗi xảy ra trong httpd, bao gồm lỗi bộ nhớ và các vấn đề hệ thống khác Trong khi đó, access_log chứa bản ghi chi tiết về tất cả các yêu cầu HTTP, giúp người dùng theo dõi các trang được phục vụ và các tệp được tải xuống bởi Apache, đồng thời ghi lại địa chỉ IP của người dùng.
ID người dùng của tất cả các máy khách thực hiện yêu cầu kết nối đến máy chủ
Lưu trữ thông tin về trạng thái của các yêu cầu truy cập cho dù phản hồi đã được gửi thành công hay yêu cầu dẫn đến lỗi
Khi gặp vấn đề với máy chủ web Apache, hãy kiểm tra file log này để biết thông tin chẩn đoán
2.4.12 File log /var/log/mysqld.log hoặc /var/log/mysql.log
File log MySQL ghi lại tất cả các thông báo gỡ lỗi, thất bại và thành công
Chứa thông tin về việc bắt đầu, dừng và khởi động lại MySQL daemon mysqld
Tổng kết chương 2
Chương này phân tích kiến trúc hệ điều hành LINUX, bao gồm nhân hệ điều hành, lớp ứng dụng và giao diện người dùng Bên cạnh đó, báo cáo tìm hiểu về hệ điều phối hoạt động, các thành phần quản lý và phân phối tài nguyên Cấu trúc chi tiết của thư mục trên hệ điều hành LINUX cũng được cung cấp Cuối cùng, chương này đề cập đến cách hệ điều hành ghi lại nhật ký, nhấn mạnh một số nhật ký quan trọng trong HĐH LINUX Chương 3 sẽ tiếp tục khám phá dịch vụ và các vấn đề rò rỉ dữ liệu trên LINUX.
Một số dịch vụ mạng
Để các máy tính trên mạng có thể trao đổi thông tin, chúng cần biết địa chỉ IP của nhau, bên cạnh đó, mỗi máy còn có một tên gọi (hostname) Việc nhớ địa chỉ IP, đặc biệt là với sự gia tăng của địa chỉ IPv4, trở nên khó khăn, dẫn đến sự cần thiết phải chuyển sang sử dụng IPv6 Do đó, việc ánh xạ địa chỉ IP thành hostname và ngược lại trở nên quan trọng, giúp người dùng chỉ cần nhớ tên máy tính thay vì dãy số phức tạp Ban đầu, mạng ARPA NET chỉ sử dụng một tập tin HOST.TXT để lưu trữ thông tin ánh xạ này, nhưng khi quy mô mạng mở rộng, mô hình này bắt đầu bộc lộ nhiều nhược điểm.
Lưu lượng mạng và máy chủ duy trì tập tin HOST.TXT đang gặp phải tình trạng quá tải Điều này dẫn đến nguy cơ xung đột tên, do tên máy không phân cấp và thiếu cơ quan quản lý tập tin Quản trị hệ điều hành Linux là một vấn đề cần được chú trọng.
Page 25 - Không đảm bảo sự toàn vẹn: việc duy trì tập tin trên một mạng lớn rất khó khăn Ví dụ: khi tập tin HOST.TXT vừa cập nhật chưa kịp chuyển đến máy chủ ở xa thì đã có sự thay đổi địa chỉ trên mạng rồi - Tóm lại, việc sử dụng tập tin HOST.TXT không phù hợp cho mạng lớn vì thiếu cơ chế phân tán và mở rộng
Do đó dịch vụ DNS ra đời nhằm khắc phục các nhược điểm này
- Primary name server: Nguồn xác thực thông tin chính thức cho các domain mà nó được phép quản lý
- Secondary name server: server dự phòng cho primary server
- Caching name server: lưu lại các lần truy vấn của client, giúp cho các lần truy vấn sau được nhanh chóng và giảm tải cho server
DNS zone là tập hợp các ánh xạ từ Host đến địa chỉ IP và ngược lại trong một nhánh của Domain Thông tin trong DNS Zone bao gồm các Record với tên Host và địa chỉ IP, được lưu trữ trên DNS server DNS server có nhiệm vụ quản lý và đáp ứng các yêu cầu từ Client liên quan đến thông tin DNS Hệ thống tên miền cho phép phân chia và quản lý tên miền thành các Zone, trong đó mỗi Zone lưu trữ thông tin quản lý tên miền Zone file chứa thông tin Zone dưới dạng văn bản hoặc trong Active Directory.
Zone thuận và Zone nghịch:
- Zone thuận – Forward Lookup Zone để phân giải tên máy thành địa chỉ IP
- Zone nghịch – Reverse Lookup Zone để phân giải địa chỉ IP thành tên máy
Hệ thống cần cung cấp IP mỗi máy tính để các máy này có thể liên lạc với nhau
Trong các mô hình mạng nhỏ, việc cấp phát địa chỉ IP thường diễn ra thuận lợi Tuy nhiên, trong các mô hình mạng lớn, quá trình này trở nên phức tạp hơn Do đó, việc triển khai dịch vụ cấp phát IP tự động cho các máy khách trong hệ thống mạng là rất cần thiết.
- DHCP là một dịch vụ cung cấp IP tự động cho các client
- Hoạt động theo mô hình Client – server
DHCP không chỉ cung cấp địa chỉ IP cho các thiết bị mà còn hỗ trợ nhiều tính năng hữu ích khác, bao gồm việc cung cấp địa chỉ máy tính để giải quyết tên miền DNS và địa chỉ của Gateway router.
Cơ chế sử dụng các thông số mạng được cấp phát động có ưu điểm hơn so với cơ chế khai báo tĩnh các thông số mạng như:
- Khắc phục được tình trạng đụng địa chỉ IP và giảm chi phí quản trị cho hệ thống mạng
- Giúp cho các nhà cung cấp dịch vụ (ISP) tiết kiệm được số lượng địa chỉ IP thật (public IP)
- Phù hợp với máy tính thường xuyên di chuyển qua lại giữa các mạng
- Kết hợp với hệ thống mạng không dây (wireless) cung cấp các điểm Hostpot như: nhà ga, sân bay, trường học…
Các hệ thống Linux sử dụng giao thức TCP/IP để kết nối mạng, trong khi hệ điều hành Microsoft sử dụng giao thức Server Message Block (SMB) kết hợp với NETBIOS để chia sẻ tài nguyên trong mạng cục bộ Để kết nối với các mạng bao gồm cả hệ thống Unix, Microsoft phát triển Common Internet File System (CIFS), vẫn dựa trên SMB và NETBIOS cho mạng Windows Một số phiên bản của SMB được biết đến với tên gọi Samba.
Samba được tạo ra bởi Andrew Tridgell 1991, được phát triển dựa trên giao thức SMB và CIFS Samba là giao thức dùng để giao tiếp giữa Linux và window
Hệ thống Samba cung cấp nhiều chức năng quan trọng như chia sẻ file, chia sẻ thư mục, quản lý máy in và chứng thực người dùng trong môi trường Windows domain Người dùng có thể chia sẻ tài nguyên như tập tin và máy in, đồng thời kiểm soát quyền truy cập thông qua việc yêu cầu mật khẩu Có hai chế độ truy cập: chế độ dùng chung cho phép nhiều người dùng sử dụng cùng một mật khẩu, và chế độ người dùng, trong đó mỗi tài khoản có mật khẩu riêng Để quản lý mật khẩu, Samba sử dụng tệp /etc/samba/smbpassword Để cấu hình và truy cập hệ thống Samba trên Linux, người dùng cần thực hiện một số thủ tục chính.
- Cấu hình dịch vụ và khởi động dịch vụ Samba
- Khia báo tài khoản sử dụng Samba
- Truy nhập dịch vụ Samba
Các tập tin cấu hình dịch vụ:
/etc/samba/smb.conf : tập tin cấu hình của Samba
/etc/samba/smbpassword : chứa mật mã truy nhập của người dùng
Tệp /etc/samba/smbusers chứa tên hiệu cho các tài khoản Samba, trong khi lệnh smbpasswd –a được sử dụng để tạo tài khoản Samba mới Để thay đổi thông tin tài khoản Samba, người dùng có thể sử dụng lệnh smbpasswd Để truy cập dịch vụ SMB, lệnh smbclient là cần thiết, và lệnh smbstatus giúp theo dõi tình trạng kết nối hiện tại.
VSFTP là 1 dịch vụ FTP server, chúng ta sẽ dùng hệ thống VSFTP để có thể chia sẻ tài liệu (tài nguyên) cho người khác
VSFTP là FTP server chạy trên môi trường Linux
VSFTP sẽ phân quyền dựa trên cấu hình và File Permisson
Trong chế độ Active, máy khách sử dụng một cổng ngẫu nhiên (cổng N>1024) để kết nối vào cổng 21 của máy chủ FTP Sau đó, máy khách sẽ lắng nghe trên cổng N+1 và gửi lệnh đến máy chủ FTP Máy chủ FTP sẽ kết nối ngược lại vào cổng dữ liệu của máy khách mà đã được khai báo trước đó Khi máy chủ FTP hoạt động ở chế độ này, máy khách không tạo kết nối trực tiếp vào cổng dữ liệu của máy chủ, mà chỉ thông báo cho máy chủ biết cổng mà nó đang lắng nghe.
FTP Server là máy chủ lưu trữ tài nguyên và hỗ trợ giao thức FTP, cho phép giao tiếp và truyền dữ liệu giữa các máy tính trên Internet.
Một số chương trình FTP Server sử dụng trên Linux: Vsftpd, wu-ftpd, pureFTPd, proFTPD, …
Apache là một phần mềm có nhiều tính năng mạnh và linh hoạt dùng để /làm Webserver, cung cấp source code đầy đủ với license không hạn chế
- Môi trường tốt nhất để sử dụng Apache là Unix
- Hỗ trợ đầy đủ các giao thức HTTP, HTTPS, FTP…
- Chạy trên nhiều hệ điều hành: Unix, Windows, Linux, Netware, OS/2
Một số lỗ hổng bảo mật gây rò rỉ dữ liệu trên LINUX
Một lỗ hổng rò rỉ thông tin trong s390/s390x của Linux Kernel đã được phát hiện, liên quan đến chức năng quản lý bộ nhớ Lỗ hổng này ghi sai vào tệp /proc/sys/vm/cmm_timeout, cho phép người dùng cục bộ truy cập và xem dữ liệu của Kernel.
Hàm sco_sock_recvmsg trong tệp net/bluetooth/sco.c của Kernel Linux trước phiên bản 3.9-rc7 không khởi tạo biến độ dài nhất định, điều này cho phép người dùng cục bộ truy cập thông tin nhạy cảm từ bộ nhớ ngăn xếp Kernel thông qua các lệnh gọi hệ thống recvmsg hoặc recvfrom được tạo thủ công.
Hàm fill_event_metadata trong tệp fs/allow/fanotify/fanotify_user.c của Linux Kernel phiên bản 3.9.4 không khởi tạo một thành viên cấu trúc quan trọng, điều này cho phép người dùng cục bộ truy cập thông tin nhạy cảm từ bộ nhớ Kernel thông qua thao tác đọc trên bộ mô tả fanotify.
Hình 20: Lỗ hổng SSH Weak Algorithms Supported
- Máy chủ SSH từ xa được xác định cấu hình để cho phép các thuật toán mã hóa yếu hoặc không có mã hóa nào cả
Nessus đã phát hiện rằng máy chủ SSH từ xa được cấu hình với mật mã luồng Arcfour hoặc không sử dụng mật mã Theo RFC 4253, việc sử dụng Arcfour không được khuyến nghị do các vấn đề liên quan đến độ an toàn của khóa.
Một số tường lửa trên LINUX
Iptables là một công cụ tường lửa được cài đặt sẵn trên hầu hết các bản phân phối Linux như CentOS và RedHat Mặc dù không phải là tường lửa đa chức năng nhất, nhưng iptables vẫn được sử dụng rộng rãi trong cộng đồng người dùng hiện nay.
Hình 21:Hình minh họa tường lửa Iptable
Iptables là một công cụ quản lý tường lửa trên hệ thống Linux, hoạt động thông qua các dòng lệnh mà không có giao diện cấu hình đồ họa Việc nắm vững cách cấu hình Iptables là điều cần thiết đối với các quản trị viên hệ thống Linux để đảm bảo an ninh mạng hiệu quả.
Nguyên tắc hoạt động của Iptables là thiết lập các quy tắc (ruler) để cho phép hoặc chặn các gói tin tương ứng Iptables có khả năng hoạt động ổn định, vì vậy sau khi cấu hình, bạn chỉ cần để nó tự vận hành mà không cần can thiệp thêm.
Monowall được thiết kế tối ưu cho các thiết bị có tối thiểu 16MB bộ nhớ, mang lại hiệu suất cao Nó cung cấp các tính năng định tuyến QoS mặc định, cho phép người dùng quản lý và ưu tiên lưu lượng truy cập, từ đó cải thiện chất lượng kết nối.
Hình 22: Hình minh họa tường lửa Monowall
Monowall đã ngừng phát triển vào tháng 2-2015 nhưng vẫn có thể tải nó xuống sử dụng
3.3.3 pfSence Được phát triển từ Monowall và hiện đang được sử dụng khá rộng rãi, những năm đầu thời kỳ có internet thì Pfsense là một phải pháp firewall kết hợp cân bằng tải cho hệ thống mạng doanh nghiệp, hiện nó đang bị thay thế bởi các thiết bị firewall cứng kết hợp cân bằng tải
Hình 23: Hình minh họa tường lửa pfSence
Pfsense là tường lửa nhiều tính năng nhất nhưng cũng khá khó để cấu hình hoạt động trơn tru được
Zentyal Server là một hệ điều hành độc lập, được phát triển trên nền tảng Ubuntu Server LTS, chuyên dụng cho việc quản lý email Ngoài chức năng chính là máy chủ email, Zentyal Server còn tích hợp firewall riêng và mở rộng thêm các dịch vụ quan trọng như DNS, DHCP và mail server, mang lại giải pháp toàn diện cho quản trị mạng.
Hình 24: Hình minh họa Zentyal Server
ClearOS, được phát triển dựa trên nền tảng hệ điều hành CentOS, tương tự như Zentyal Server, là một giải pháp firewall dễ sử dụng Người dùng thông thường có thể dễ dàng thiết lập các quy tắc bảo mật cho hệ thống của mình.
ClearOS, còn với những người dùng cao cấp ( chuyên gia) có thể dễ dàng thêm các tính năng nâng cao cho firewall này
Hình 25: Hình minh họa ClearOS
Tổng kết chương 3
Trong chương này, báo cáo trình bày các dịch vụ hệ điều hành như dịch vụ cho người dùng, mạng nội bộ và mạng Internet, đồng thời chỉ ra một số dịch vụ mạng phù hợp cho mô hình doanh nghiệp nhỏ với chi phí hợp lý và đảm bảo an toàn Báo cáo cũng khám phá các lỗ hổng bảo mật có thể gây rò rỉ dữ liệu trên hệ điều hành LINUX và giới thiệu một số tường lửa phổ biến Dựa trên những kiến thức từ chương 1, 2 và 3, nhóm sẽ tiến hành thực nghiệm trên hệ điều hành LINUX ở chương 4.
Đặt vấn đề
Truy cập SSH đến máy Linux để kiểm tra nhật ký đăng nhập
Chuẩn bị
- Máy Window chung dải mạng có
- Phần mềm PUTTY để truy cập SSH
Mô hình triển khai
- Cài đặt hệ điều hành Kali Linux 2021
- Cài đặt mạng trên VMware thành VMnet 2
- Cài đặt dịch vụ SSH
- Cài đặt phần mềm PUTTY
Các bước thực hiện
Sử dụng phần mềm PUTTY từ máy windows truy cập đến máy Kali Linux có địa chỉ 192.168.0.120
Bước 2: Đăng nhập tài khoản phuclocc
Hình 27: Đăng nhập tài khoản phuclocc
53 Đăng nhập thành công, truy cập vào máy Kali Linux
Hình 28:Truy cập thành công vào máy Kali Linux
Bước 3: Kiểm tra nhật ký đăng nhập
- Trên máy Kali vào tài khoản root
- Vào Terminal gõ lệnh “ last “
- Gõ lệnh vi auth.log
Bước 4: Kiểm tra các thông tin đăng nhập
- Cả 2 tài khoản phuclocc và Kali đang được đăng nhập trên Linux
- Tài khoản phuclocc đăng nhập từ IP 192.168.0.108
- Thời gian đăng nhập gần nhất từ 03:28 đến 03:35
- Trong file log /var/log/auth.log theo dõi thông tin đăng nhập SSH được ghi bởi tiến trình chạy nền của dịch vụ bảo mật hệ thống
+ Đăng nhập thất bại do sai hệ thống
+ Đăng nhập thành công user phuclocc có id 1001
+ Nhật ký kết thúc phiên đăng nhập
Tổng kết chương 4
Hệ điều hành LINUX cho phép người dùng quản lý các quy trình quan trọng như khởi động thiết bị, theo dõi nhật ký hệ thống, đăng nhập và truy cập từ xa Nhờ đó, người dùng có thể dễ dàng kiểm soát hệ điều hành của mình và phát hiện các hành động truy cập bất thường.