Hành trình học An ninh mạng: Tại sao Linux là "vũ khí" tối thượng và bài học từ OverTheWire Bandit

07 tháng 4, 2026·7 phút đọc

Đây là bản ghi lại ngày thứ tư trong hành trình học tập an ninh mạng của tác giả. Bài viết chia sẻ những kinh nghiệm thực tế khi làm quen với Linux thông qua OverTheWire Bandit, từ các lệnh cơ bản đến khái niệm quan trọng về quyền SUID và leo thang đặc quyền.

Hành trình học An ninh mạng: Tại sao Linux là "vũ khí" tối thượng và bài học từ OverTheWire Bandit

Tôi đang công khai ghi chép lại hành trình học tập an ninh mạng của mình mỗi ngày. Đây là ngày thứ 4. Các bài viết trước đó đã có trong hồ sơ của tôi nếu bạn muốn theo dõi từ đầu.

Hôm nay, tôi đã tìm hiểu về các nguyên lý cơ bản của Linux thông qua linuxjourney.com, thực hành 18 lệnh trên terminal Kali, hoàn thành các cấp độ 0 đến 3 của OverTheWire Bandit và phần "Linux Fundamentals Part 1" trên TryHackMe.

Tại sao lại là Linux?

Tôi muốn ghi rõ điều này vì nó vô cùng quan trọng.

90% máy chủ trên internet chạy hệ điều hành Linux. Mọi nền tảng đám mây lớn đều hoạt động dựa trên Linux. Kali Linux — hệ điều hành tôi sử dụng cho mọi công việc bảo mật — cũng được xây dựng trên Linux. Khi một chuyên gia kiểm thử xâm nhập (penetration tester) giành được quyền truy cập ban đầu vào một hệ thống, gần như luôn luôn họ sẽ dừng lại ở một shell Linux.

Trong an ninh mạng, Linux không chỉ là kiến thức nền tảng, mà là môi trường làm việc chính. Việc thành thạo nó là sự khác biệt giữa việc có thể thực hiện công việc thực tế và chỉ dừng lại ở lý thuyết suông.

Những lệnh令我 bất ngờ nhất

Tôi từng nghĩ Linux sẽ khó học hơn thế này. Các lệnh thực ra rất ngắn gọn và logic — ls để liệt kê, cd để đổi thư mục, cat để đọc, và find để tìm kiếm. Khó khăn không nằm ở việc ghi nhớ chúng, mà là hiểu điều gì xảy ra khi bạn kết hợp chúng lại với nhau.

Lệnh khiến tôi "ngộ ra" hôm nay là dòng này:

find / -perm -4000 2>/dev/null

Lệnh này tìm kiếm trên toàn bộ hệ thống tập tin các tệp có quyền SUID được thiết lập. SUID (Set User ID) có nghĩa là tệp tin đó sẽ chạy với quyền hạn của chủ sở hữu tệp chứ không phải của người đang chạy nó. Nếu một tệp SUID thuộc sở hữu của root và chứa lỗ hổng, kẻ tấn công có quyền thấp có thể khai thác nó để giành quyền truy cập root.

Đây là lệnh — chỉ một dòng duy nhất — mà mọi kẻ tấn công đều chạy trong vài phút đầu tiên khi có được shell trên hệ thống Linux. Tôi đã chạy nó trên Kali hôm nay và tìm thấy một số tệp SUID. Giờ tôi hiểu tại sao các danh sách kiểm tra leo thang đặc quyền (privilege escalation) luôn bắt đầu bằng việc kiểm tra các tệp nhị phân SUID.

OverTheWire Bandit — Trải nghiệm học tập tốt nhất trong tuần

OverTheWire Bandit có tại overthewire.org/wargames/bandit. Nó hoàn toàn miễn phí. Bạn kết nối qua SSH và vượt qua các cấp độ, mỗi cấp dạy một kỹ năng Linux thực tế thông qua một thử thách cụ thể.

Tôi tham gia với kỳ vọng nó sẽ mang tính giáo dục. Nhưng không, nó cảm giác như đang đi làm thực sự.

Cấp độ 0: Kết nối, tìm tệp và đọc nó. Đơn giản. cat readme. Xong.

Cấp độ 1: Tệp tin được đặt tên là một dấu gạch ngang. Tôi chạy cat - và chẳng có gì xảy ra — nó chỉ chờ nhập liệu từ bàn phím. Tôi mất vài phút cho thử thách này.

Lý do là: trong Linux (và hầu hết các hệ thống kiểu Unix), dấu gạch ngang đơn là ký tự đặc biệt có nghĩa là đầu vào tiêu chuẩn (stdin). Shell sẽ hiểu nó trước cả khi tìm kiếm tệp. Cách khắc phục là cung cấp ngữ cảnh đường dẫn cho shell:

cat ./-

Dấu ./ nói với shell rằng "đây là một tệp trong thư mục hiện tại". Giờ shell coi dấu gạch ngang là một phần của tên tệp thay vì ký tự đặc biệt. Vấn đề được giải quyết.

Thử thach đó đã giải thích một điều về cách phân tích cú pháp lệnh Linux mà tôi chưa từng nghĩ tới trước đây — shell đang thực hiện công việc thông dịch trước khi bất kỳ lệnh nào chạy. Điều này trở nên liên quan trong bảo mật web nữa: cả SQL injection và command injection đều khai thác việc trình thông dịch xử lý các ký tự đặc biệt trước khi coi đầu vào là dữ liệu.

Cấp độ 2: Tệp có dấu cách trong tên. Dấu cách sẽ phá vỡ cú pháp shell vì shell coi mỗi từ được phân cách bằng dấu cách là một đối số riêng biệt. Giải pháp: đặt tên tệp trong dấu ngoặc kép.

cat "spaces in this filename."

Cấp độ 3: Tệp ẩn bên trong một thư mục. Chạy ls không hiện gì cả. Chạy ls -la mới hiện tệp tên .hidden — dấu chấm ở đầu khiến nó trở thành tệp ẩn trong Linux.

cd inhere ls -la cat .hidden

Bốn cấp độ. Mỗi cấp dạy một thứ tôi sẽ dùng trong công việc bảo mật thực tế: các trường hợp tên tệp khó xử lý, cách shell xử lý ký tự, và các tệp ẩn. Đây không phải là khái niệm học thuật. Chúng xuất hiện trong các cuộc thi CTF, trong giai đoạn khai thác sau (post-exploitation) trên hệ thống thật, và trong điều tra số.

Quyền tệp tin — Chìa khóa mở ra bảo mật Linux

Khi tôi chạy ls -la trên Kali, tôi thấy các dòng như sau:

-rwxr-xr-- 1 kali kali 4096 Apr 6 16:00 myscript.sh

Chuỗi ký tự r, w, x và gạch ngang ở đầu là bộ quyền hạn. Nó cho bạn biết chính xác ai có thể đọc, ghi và thực thi tệp — chủ sở hữu, nhóm, và những người khác.

Hiểu về quyền hạn là điều giúp bạn có thể hiểu được leo thang đặc quyền. Quyền hạn được cấu hình sai là một trong những lỗ hổng phổ biến nhất trên hệ thống Linux. Một tệp chỉ nên readable bởi root nhưng lại có thể đọc bởi tất cả mọi người — đó là cấu hình sai làm lộ dữ liệu nhạy cảm. Một script chạy dưới quyền root nhưng lại có thể ghi bởi người dùng quyền thấp — đó là một cuộc leo thang đặc quyền đang chờ được khai thác.

Một khi bạn hiểu về quyền hạn, bạn sẽ bắt đầu thấy tại sao rất nhiều phát hiện bảo mật lại quay trở lại việc "tệp này được đặt quyền hạn không chính xác".

TryHackMe Linux Fundamentals Phần 1

Đã hoàn thành hôm nay. Phòng học này có terminal tích hợp sẵn để bạn thực hành mà không cần máy Linux riêng. Các câu hỏi củng cố lại các lệnh tôi đã thực hành trên Kali, đúng là loại hình lặp lại có chủ đích giúp hình thành phản xạ cơ bắp.

Một khái niệm phòng học này làm rõ: sự khác biệt giữa đường dẫn tuyệt đối và đường dẫn tương đối. Đường dẫn tuyệt đối bắt đầu từ / và hoạt động từ bất cứ đâu. Đường dẫn tương đối phụ thuộc vào vị trí hiện tại của bạn. Trong các script bảo mật, đường dẫn tuyệt đối an toàn hơn vì script sẽ hoạt động ổn định bất kể nó được gọi từ đâu.

Cảm giác sau bốn ngày học

Mô hình tôi nhận thấy: mỗi ngày đều có ít nhất một khoảnh khắc khi điều gì đó trừu tượng trở nên cụ thể. Ngày 2 là xem bắt tay TCP diễn ra trong Wireshark. Ngày 3 là nhìn thấy các cổng mở trên một máy chủ thật qua Nmap. Ngày 4 là khoảnh khắc cat ./- trong Bandit — nhận ra shell đang thực hiện công việc thông dịch mà tôi chưa từng nghĩ tới.

Những khoảnh khắc này không đến từ việc đọc sách. Chúng đến từ việc làm gì đó trong terminal và gặp phải kết quả bất ngờ. Đó là lúc việc học thực sự diễn ra.

Bốn ngày đã trôi qua. Mỗi ngày đều cập nhật trên GitHub. Ngày mai: Các bản ghi DNS, chi tiết HTTP và bắt đầu học Python.

Ghi chú của tôi nằm trên GitHub — liên kết trong hồ sơ nếu bạn muốn theo dõi.

Bài viết được tổng hợp và biên soạn bằng AI từ các nguồn tin tức công nghệ. Nội dung mang tính tham khảo. Xem bài gốc ↗