5 thg 11, 2012

Những cuộc đối thoại với rookie - Phần 4


7. Giềng mối: 
Như tôi đoán trước, lần này quả thật "cuti" im ắng. Suốt hai tuần lễ, tôi không nhận được một thông điệp nào từ "cuti" nhưng lần này tôi không còn ngại "cuti" bỏ cuộc mà tin rằng "cuti" đang 'vật lộn' với mớ khái niệm mới, với môi trường hệ điều hành mới. Tôi biết đây là một đoạn dốc khá cao và căng thẳng với "cuti" vì cu cậu gần như phải bắt đầu lại từ đầu với một hệ điều hành mới mẻ. 

Có sẵn kinh nghiệm dùng máy tính và sử dụng hệ điều hành Windows cộng với dăm ba mẹo vặt không tạo điều kiện thuận lợi cho "cuti" 'vượt dốc' mà ngược lại có thể tạo những khó khăn nặng nề hơn vì chắc chắc cu cậu sẽ không ngừng liên hệ đến những thói quen và kiến thức có sẵn về hệ điều hành Windows. Điều đáng nói là "cuti" không hề gởi một thông điệp nào để than vãn hoặc cầu cứu. Tôi không biết cu cậu có tham gia diễn đàn nào khác và đang tung lên hàng loạt câu hỏi. Dù "cuti" có thử giải quyết cách này, cu cậu chắc chắn sẽ mất một khoảng thời gian dài để đi đến giai đoạn hiểu được mình đang ở đâu. 

Sau hai tuần, tôi nhận được một bức e-mail từ "cuti". Nó có nội dung rất dí dỏm như sau (tôi đã lượt bỏ những chi tiết riêng tư và không phù hợp với tinh thần chủ đề, tôi cũng đã điều chỉnh lại cho ngôn từ nghiêm túc và chuyên nghiệp hơn): 

"Anh già khó tánh kính mến, 

Hai tuần qua em bị con chim cánh cụt 'đè' gần ngất xỉu nhiều lần. Em nhiều lần rất muốn gởi anh một vài thông điệp để cầu cứu nhưng lời anh nói cứ ám trong đầu: "Sao hỏi anh? Cuốn cẩm nang Linux của em đâu?" làm em ngần ngại. Lúc này em không khác gì người đi trong rừng Amazon, chẳng còn biết phương hướng ở đâu nữa. Bây giờ em mới thật sự thấy chuyện đánh cuộc của anh em mình khó đến mức nào. 

Anh già biết hông? sau bao nhiêu là mò mẫm, em mới hiểu ra chỉ có root mới có thể tạo account cho người dùng và mới tìm ra được lệnh dùng để tạo account. Nhìn lại thì thấy những chuyện này không khác gì bên Windows mấy. Tuy nhiên, để khai mở những điểm anh đưa ra về chuyện 'nhìn sự việc như một system admin hay một coder' thì em quả lạc lối mất rồi. Cuốn 'cẩm nang Linux' của em không đề cập bao nhiêu về những điểm này. Vậy em tìm hiểu những thông tin này ở đâu anh? Thật kỳ lạ anh ạ, trước đây hễ thấy cuốn e-book nào dày vài trăm trang là em hết muốn đụng tới. Giờ đây, em lại mong cuốn e-book Linux của em dày hơn, nhiều hơn. Em nghĩ anh là con người nguy hiểm là một điều không sai bởi vì không hiểu tại sao anh có thể biến em từ một đứa không buồn đụng đến cuốn e-book mà bây giờ lại mong nó dày hơn. Hì hì, em nói đùa đó thôi. Có nhiều lúc em muốn bỏ dở để đi bắn Gunbound cho khoẻ nhưng nghĩ lại thì thấy hơi... ê vì thế nào cũng bị anh chửi cho một chặp, nên thôi. 

Em đã tạo được account dành cho người dùng bình thường và có thể login bằng account đó rồi. Tuy nhiên, em đang ở trong giai đoạn 'dậm chân tại chỗ' bởi vì khi dùng account này và thử 'vi' trang index.html của web server trên máy chủ Linux thì nó luôn luôn báo lỗi 'changing read-only file'. Câu hỏi của em là: bằng cách nào mình có thể 'viết' vào nó để thay đổi nội dung hở anh? 

Nếu rảnh anh sớm hồi âm dùm em nhe? Em biết anh chắc bận rộn lắm nhưng không hỏi anh thì hỏi ai bây giờ? Nếu anh quá bận rộn thì chắc em phải đành cho con chim cánh cụt 'đè' thêm ít hôm nữa, chắc cũng không sao đâu. 

Chúc anh và gia đình vui khoẻ. 

Em, 

Cuti." 


Tôi đọc e-mail của "cuti", ngẫm nghĩ tìm cách trả lời cho cu cậu. Câu hỏi cu cậu đưa ra [i]"bằng cách nào mình có thể 'viết' vào nó để thay đổi nội dung hở anh?" là một câu hỏi ở dạng có thể có vô số các câu trả lời. Tôi sẽ chọn câu trả lời nào đây? 

Mấy ngày kế tiếp, tôi vô cùng bận rộn nên vẫn chưa trả lời cho "cuti" nhưng thỉnh thoảng tôi ghi xuống dăm ba điểm quan trọng để dùng chúng mà khai triển câu trả lời. Chiều nay, trên đường đi làm về, ngồi trên tàu lửa, tôi mở laptop ra và quyết định thảo một bức e-mail cho "cuti" như sau:[/i] 

"Cuti thân mến, 

Anh đã nhận được mail của em vài ngày trước đây nhưng lu bu công việc quá nên chưa hồi âm ngay cho em được. Mong em thông cảm. Anh sẽ trả lời các thắc mắc của em theo thứ tự như sau: 

1. Em nên ngần ngại khi hỏi anh nếu như: 
- em chưa đọc kỹ cuốn "cẩm nang" của em 
- em đọc rồi nhưng chưa hiểu rõ và không muốn đọc lại lần nữa để hiểu rõ hơn 

Nói cách khác, nếu em hỏi có cái gì dính dáng với "what" và "how" thì cứ nhớ đến câu: "Sao hỏi anh? Cuốn cẩm nang Linux của em đâu?" . Nếu em hỏi có cái gì dính với "why" thì anh sẽ trả lời thắc mắc của em. 

Lý do anh khuyến khích em đọc và suy nghĩ vì quá trình 'hành xác' này sẽ biến những thứ em đọc và suy nghĩ thành 'tài sản' của em. Anh có thể tổng kết, rút gọn lại những điều em cần đọc và giải thích cho em. Tuy nhiên, mình không nên đi theo hướng này vì nó làm... hư người đi . Em cần tự mình hình thành một lối suy nghĩ, tiếp cận và giải quyết vấn đề riêng cho mình. 

2. Chuyện đánh cuộc của anh em mình sẽ rất khó đối với những ai không hiểu được chiều rộng và bề sâu của điều cần phải làm. Nó sẽ khó với những ai đã hình dung được chiều rộng và bề sâu này và nó sẽ không khó với những ai đã 'thử' đi xuống bề sâu và đi ngang qua chiều rộng này. Đọc mail của em, anh hình dung là em đã bắt đầu hình dung được chiều rộng và bề sâu của vấn đề. Thật tình mà nói, em rất sáng dạ và chịu khó vì em đã đi qua một đoạn đường khá 'chông gai' trong một khoảng thời gian ngắn ngủi như thế. Anh không gặp bao nhiêu người có thể làm như em đâu. Cho nên gắng lên em và nên kiên nhẫn hơn. 

3. Câu hỏi "bằng cách nào mình có thể 'viết' vào nó để thay đổi nội dung hở anh?" thì anh có thể tóm gọn như sau: 

Không riêng gì root làm chủ một (hoặc nhiều) hồ sơ, thư mục... mà bất cứ tài khoản nào cũng vậy, nếu chủ nhân của các hồ sơ này ấn định một số giới hạn đến những thứ họ tạo ra thì tổng quát mà nói, em không thể thay đổi được nó một cách chính diện bằng chính tài khoản của em ngoại trừ... em 'hack' (và ngoại trừ em có 'root' account). Hành động 'hack' ở đây được tiếp cận và phân tích ra sao thì tùy vào mức độ am hiểu hệ thống của người muốn 'hack'. Tuy nhiên có hai trường hợp tổng quát để có thể làm nền tảng cho việc 'thay đổi nội dung hồ sơ' ấy: 
- 'mượn tay' root để thay đổi nội dung vì chỉ có root mới có thể làm chuyện này. 
- 'biến' mình thành root để thay đổi nội dung cũng vì lý do ở trên. 

Ngoài ra, có thể có khả năng khác. Ví dụ như hồ sơ này cho phép những ai trong nhóm (group) điều chỉnh (nếu như attribute của hồ sơ này ấn định như thế). 

Vậy, điều em cần tìm hiểu ở đây là gì? Đây: 
- tìm chủ quyền và giá trị ấn định chủ quyền hồ sơ mình cần thay đổi (cho owner, group và others) xem thử nó là gì? 
- 'mượn tay' root là sao? do đâu có khái niệm 'mượn tay' root? 
- 'biến' mình thành root là sao? do đâu có khái niệm 'biến' mình thành root? 

Đây là cốt lõi của các điểm yếu thường gặp trên hệ thống *nix nếu chế độ mặc định bị lỗi hoặc system admin thiếu kinh nghiệm, thiếu cẩn thận trong quá trình điều chỉnh hoặc chính software trên hệ thống này bị lỗi. Từ ba điểm yếu này mở ra muôn vàn khả năng, biến thái, kết hợp, điều chế, thử nghiệm.... và đây chính là 'hack': hành động tìm kiếm và đi đến tác động để thay đổi thái độ làm việc của hệ thống. Không riêng gì trên *nix mà bất cứ hệ điều hành nào cũng vậy, bất cứ cơ chế xác thực người dùng (authentication) và ấn định chủ quyền người dùng (authorisation) nào đều có cơ hội bị 'xoáy thủng' dựa trên ba điểm trên. 

Anh chỉ có thể trả lời chi tiết hơn khi nào em đã nắm vững cơ chế ấn định chủ quyền của tài nguyên trên một máy chủ. Em còn nhớ đoạn lệnh anh gởi cho em lần trước làm em 'lùng bùng' không? Nó có liên quan trực tiếp đến cái gọi là giá trị ấn định chủ quyền đó. Anh giới thiệu thêm vài từ khoá: ls, umask, chmod, chown, chgrp để em đỡ phải lan man. Sau khi đã hiểu rõ những gì thuộc về mấy từ khoá trên và những giềng mối xung quanh nó, thắc mắc của em sẽ trở nên rõ ràng hơn. 

Thứ năm tới đây anh có ngày nghỉ. Có lẽ anh sẽ bận buổi sáng nhưng buổi chiều thì rảnh. Nếu muốn 'bổ' thêm vài 'thang' thì cho anh biết. Từ đây đến đó còn ba ngày cho nên em nên tham khảo qua mấy từ khoá ở trên trước đi. Em cũng nên chuẩn bị sẵn những điều mình thắc mắc thì anh em mình 'chat' mới có chất lượng. Nên nhớ: ask me why, don't ask me what  

Chúc em một ngày vui. 

Chào cuti." 


Tối hôm ấy tôi gởi "cuti" bức e-mail trên. Sáng ngày hôm sau tôi nhận được hồi âm của "cuti": 
"Hello anh già khó tánh  

Cứ mỗi lần nhận được một thông điệp của anh, bộ não của em lại chạy ro ro. Em lại sinh ra một cái tật mới là miệng hay lẩm bẩm , chắc anh biết lý do tại sao. 

Chiều thứ Năm em cũng rảnh nhưng phải sau một giờ trưa lận bởi vì em phải vào trường. Như vậy khoảng sau 4 giờ chiều nơi anh ở. Vậy có tiện không anh? 

Em sẽ 'lên danh sách' những điều em thắc mắc để được anh 'châm' cho vài phát. Em đang lùng thêm vài cuốn e-book Linux, không biết anh có cuốn nào khác không? 

Vậy anh nhé? Hẹn gặp lại chiều thứ Năm. 

Chúc anh một tuần làm việc vui vẻ. 

Cuti." 

Suốt mấy ngày tiếp theo, tôi vùi đầu vào công việc và ba ngày đi qua nhanh chóng. Chiều thứ Năm ấy tôi quên bẵng mình có 'hẹn' với "cuti", vẫn đi chơi với gia đình. Mãi đến sau 4 giờ chiều mới sực nhớ. Khi tôi về nhà và logon, "cuti" vẫn chưa online. Tôi cười, thầm nghĩ "Chà, tưởng đâu mình cho cuti leo cây, không ngờ lại bị cuti cho mình leo cây". Tôi gởi "cuti" một offline message: 
"Cuti, anh đã online. Khi nào em vào, hú một tiếng cho anh biết." 

Mãi mười lăm phút sau tôi mới nhận được thông điệp hồi báo của "cuti". Cu cậu có vẻ "hớt hãi" lắm: 
"Dạ em đây, em đây. Trên đường đi học về bị xẹp lốp anh à cho nên trễ nãi hết. Cho em xin lỗi nhe. May mà không có anh ở đây chớ không thì chắc cũng bị ăn vài cái 'kí' trên đầu rồi. Hi hi." 

Tôi trả lời: 
"Không sao em, anh cũng mới online chừng 15 phút thôi. Em ăn cơm chưa? cứ thong thả đi." 

"cuti" lại hóm hỉnh: 
"Dạ em đang vừa 'đớp', vừa 'chat' đây. Hông phải vừa đốp, vừa chát đâu nghe? Ai mà dám đốp chát với anh ." 

Tôi cười, đáp: 
"Vậy em thong thả ăn cơm đi rồi mình nói chuyện sau. Anh duyệt web, trả lời e-mail cũng được." 

"cuti" rối rít: 
"Dạ không, được mà anh. Bụng đớp kệ bụng, não đớp kệ não. Em ăn hai thứ một lượt cũng được mà." 

Phì cười vì tính dí dỏm cố hữu của cu cậu, tôi cũng hóm hỉnh với cu cậu: 
"Vậy thì được thôi, anh chỉ sợ cơm thì lên não mà chữ thì xuống ruột... già thì công toi thôi, hì hì. Vậy em đã 'lên danh sách' những điều em muốn hỏi chưa?" 

"cuti" nhanh nhẩu: 
"Ha ha, anh cũng biết nói chuyện tếu lâm nữa sao? Em cứ tưởng anh là một lão đạo mạo chỉ có số với chữ không chớ! Còn chuyện danh sách thì có rồi chớ anh. Lúc máy mó trên con Linux thì bao nhiêu là câu hỏi. Lúc đọc mail của anh lại thêm cả đống câu hỏi. Vậy mà khi ngồi xuống liệt kê lại thì chẳng còn được bao nhiêu câu hết. Lạ thật." 

Tôi đáp: 
"Vậy em cứ hỏi rồi tự nhiên câu hỏi này sẽ dẫn đến câu hỏi kia thôi. Còn chuyện em nghĩ anh đạo mạo thì em lầm to rồi đó ." 

"cuti" trịnh trọng: 
"Em hỏi nhe? Anh sẵn sàng chưa?" 

Tôi bật cười, trả lời: 
"Shoot!" 

"cuti" chộp ngay câu trả lời của tôi và hỏi liền: 
"shoot là gì vậy anh? đá banh hả?" 

Tôi không nén nổi, bật cười xoà vì tính con nít và năng động (và có phần thiếu tập trung) của "cuti". Tôi đáp: 
"Thôi đi ông thần. Ráng tập trung vào vấn đề, đừng thấy gì hỏi đó. Em chỉ cần biết 'shoot' là 'hỏi đi' là đủ. Đó chỉ là một cách nói." 

"cuti" ra vẻ nghiêm trang: 
"Câu 1: tại sao anh nói: "ask me why, don't ask me what" vậy? Em hiểu nghĩa tiếng Anh là hỏi tại sao, đừng hỏi cái gì. Vậy ý anh là thế nào?" 

Tôi đáp: 
"Rất đơn giản. 
- 'What' là 'cái gì', 'cái gì' có thể tìm thấy trong sách giáo khoa và sách tham khảo. Công việc của em là tìm ra câu trả lời cho các cái 'cái gì' bởi vì anh không thể trả lời hết cái 'cái gì' được. 'cái gì' là kiến thức căn bản. 

- 'Why' là 'tại sao', 'tại sao' cũng có trong sách giáo khoa và sách tham khảo nhưng cần phải được đúc kết, rút tỉa. Một người thể chưa đủ 'cái gì' để hình thành 'tại sao', có thể chưa đủ kinh nghiệm để hình thành 'tại sao' và cũng có thể chưa đủ suy luận để hình thành 'tại sao'. 'tại sao' là kiến thức mở rộng. 

Cho nên anh có thể giúp em những cái 'why' mà không thể giúp em những cái 'what'. Nên nhớ, sau khi có 'what' rồi thì mới có 'why'. 

Rồi, câu kế tiếp." 

"cuti" thảng thốt: 
"Trời! anh giải thích y như kiểu suy luận toán học hông bằng. Ùm... để em xem lại một phát nữa cái. Ùm... hình như lần trước anh đề cập đến sách giáo khoa và sách tham khảo cũng có giềng mối với chuyện này phải hông anh?" 

Tôi cười và trả lời cu cậu: 
"Ái chà, em cũng dùng chữ 'giềng mối' sao? Đúng vậy, sở dĩ anh đưa ra chuyện đọc sách, phân loại sách và phương pháp tổng hợp, thâu thập từ sách là vì anh có ý muốn em phải đi qua cái 'what' trước sau đó mới có thể khai triển đến cái 'why'. Rồi, câu thứ hai?" 

"cuti" liếng thoắn: 
"Ái chà, chữ 'giềng mối' là chữ em copy anh đó thôi. Chữ này ít thấy dùng nhưng em thấy hay hay. Chắc mình phải đi sâu vào chi tiết kỹ thuật đọc sách và rút tỉa từ sách quá anh à, tại vì em vẫn thấy những thứ trong sách muôn trùng. Điều mình cần tìm hiểu thì ít ỏi, điều mình không cần tìm hiểu thì quá nhiều. Cái khó là tìm ra được những phần mình cần trong một cuốn sách. Nhưng thôi, để mình bàn chuyện này sau. Câu thứ hai của em là: anh có thể cho em vài ví dụ kỹ thuật về cái 'giềng mối' mà anh nói ở đây không?" 

"cuti" quả không đơn giản tí nào. Tôi trầm ngâm vài giây rồi trả lời: 
"Được rồi. Cái gọi là 'giềng mối' chính là những mắc xích từ phần này đến phần kia một cách logic trong một chuỗi sự việc, hiện tượng, thể trạng. Trên bình diện kỹ thuật và nhất là trong khuôn khổ những gì mình đang đi qua, 'giềng mối' nói một cách tổng quát, là những bước dẫn mình đi đến mục đích cuối. Ví dụ: 

- em đọc sách đúng phương pháp để hình thành cái 'what', rồi từ 'what' đi đến 'why, thiếu 'what' không thể hình thành 'why', thiếu 'why' không thể đi đến đích: đây là 'giềng mối' sự việc. 

- em không thể điều chỉnh nội dung index.html kia: đây là hiện tượng. Nếu phân tích hiện tượng này thì em thấy rằng, để có thể thực hiện việc điều chỉnh này em phải có đủ chủ quyền, để có đủ chủ quyền em phải là 'root', để biến em thành 'root' hoặc mượn tay 'root' thì em phải hiểu rõ những điểm nào trong hệ thống có thể cho phép cho em thực hiện: đây là 'giềng mối' hiện tượng. 

- em cần phải tham khảo và hiểu rõ ls, umask, chmod, chown và chgrp là vì ls cho phép em liệt kê tính chất và thể trạng của các hồ sơ và thư mục, umask ấn định các thể trạng này cho tình trạng mặc định và chmod, chown và chgrp thay đổi hoặc ấn định lại thể trạng hiện có sang thể trạng mới: đây là 'giềng mối' thể trạng. 

Em đọc ba ví dụ trên rồi suy gẫm đi " 

"cuti" lặng thinh hồi lâu rồi đáp, có phần gay cấn: 
"grừ... anh nói chuyện độc thiệt, nhưng anh dùng nhiều từ làm em lùng bùng rồi . Em chưa hề thấy có sách giáo khoa nào về IT mà đề cập những điểm: sự việc, hiện tượng và thể trạng như anh. Một lệnh là một lệnh, một quyển sách là một quyển sách.... em chưa hề thấy qua lối diễn giải sự việc như anh. Thật tình em hơi bị lùng bùng đây anh ạ. Em không hiểu tại sao em phải hiểu rõ giềng mối thể trạng của các lệnh. Bộ muốn trở thành một người rành rẽ về IT thì phải hiểu rõ các 'giềng mối' mà anh đưa ra sao?" 

Tự nhủ là mình nên kiên nhẫn vì "cuti" đã 'lỡ' ám ảnh với lối suy nghĩ cục bộ, tôi tiếp tục trả lời: 
"Những ví dụ về 'giềng mối' trên là đúc kết logic của những trường hợp anh em mình đang đi qua. Nếu em chỉ hiểu ở mức độ 'một lệnh là một lệnh', em chỉ cần biết gõ lệnh nào đó còn chuyện gì gì xảy ra đằng sau là chuyện em không muốn biết thì em chỉ dừng lại ở mức độ người dùng bình thường. Em còn nhớ chi tiết chuyện 'nhấn nút' trước đây không? Người dùng bình thường chỉ... nhấn nút và chờ kết quả. script kiddie cũng nhấn nút và chờ kết quả. Tuy nhiên, hacker nhấn nút và biết rõ ngay sau khi nút được nhấn, chuyện gì đã và đang xảy ra. Bởi vì hacker đã khiến cho cái 'nút' kia thực thi những điều cụ thể mà anh ta muốn. 'Lệnh' cũng như 'nút' vậy, chúng đều là phương tiện để tác động đến hệ thống. 'hacker' không những biết những phương tiện tác động căn bản, hiểu rõ cơ chế và giềng mối làm việc của chúng mà còn phải có khả năng tạo 'nút' và 'lệnh' để thoả mãn đòi hỏi của mình. Nếu chưa nắm được 'nút' và 'lệnh' làm những gì đến hệ thống thì việc tạo thêm 'nút' và 'lệnh' là chuyện không thể xảy ra. Đây chính là vấn đề thuộc về giềng mối. 

Riêng chuyện ngôn từ anh dùng thì... em thông cảm hả? anh quen dùng những từ ấy rồi. Vả lại anh không biết em dùng những từ nào tương đương nên đành phải dùng những từ anh quen thuộc, hì hì." 

"cuti" tiếp tục vặn: 
"Vậy anh có thể nói rõ hơn cái 'giềng mối' giữa ls, umask và chmod được không anh? Tại sao anh đơn cử mấy lệnh này? Em thấy vấn đề 'giềng mối' anh đưa ra ở đây chưa tỏ lắm. Hay là em lù khù quá nên chưa nắm được ý anh." 

Tôi đáp: 
"Anh nghĩ anh đã giải thích khá rõ trong e-mail và trong câu trả lời trên rồi mà? Em nên xem lại. Có lẽ mình đi xuyên qua vấn đề hơi nhanh nên em chưa có đủ thời gian để suy gẫm đó thôi. Rồi, câu hỏi tiếp theo là gì?" 

"cuti" vẫn kiên trì: 
"Đúng là anh đã giải thích về chuyện 'giềng mối' rồi nhưng em vẫn thắc mắc là làm sao mình biết khi nào mình cần dùng lệnh ls, khi nào mình cần dùng lệnh chmod chẳng hạn? Em cần được đả thông khúc mắc này trước khi em có thể hỏi câu tiếp theo." 

Tôi trả lời "cuti": 
"Chà, điều em cần đả thông ở đây là sự nhuần nhuyễn một hệ điều hành và những phương tiện tác động đến nó để thực hiện điều mình muốn. Để đạt được chuyện này, em phải dùng nó, phải thử nghiệm, phải biến 'lạ' thành 'quen'. Nói một cách khác, em phải là một 'user' thật sự trên hệ điều hành này trước khi em trở thành một 'hacker'. Nếu em dùng hệ điều hành đến mức nhuần nhuyễn, tự nhiên em biết được khi nào em cần dùng lệnh nào để thực hiện chuyện gì. Đây là cái 'what' mà em phải thực hiện." 

"cuti" trở nên gàn bướng: 
"Nhưng đợi đến khi em thành thạo hết những 'lệnh' kia thì biết cho đến bao giờ hở anh? Điều em thắc mắc là có một quy trình gì đó để thao tác những lệnh đó không anh?" 

Tôi hơi thất vọng vì lại phải quay lại giai đoạn này. Tôi đáp: 
"Hèm, anh nghĩ mình đã thống nhất với nhau là: em phải hiểu rõ hệ thống trước khi có thể 'hack' hệ thống rồi mà? Việc em dành thời gian cài một cái Linux server và cố gắng làm quen với nó chính là quá trình hiểu hệ thống đó. Ở đây anh giúp em một điều: giới hạn lại những điểm cần tìm hiểu cho việc điều chỉnh nội dung index.html kia thì cần tham khảo những lệnh nào. Anh không khuyến khích học 'lệnh' mà anh chỉ khuyến khích học 'system'. Tuy nhiên để em đỡ mất thời gian, anh giới thiệu vài 'lệnh' để em tập trung vào một phần nào đó của system. Còn chuyện quy trình thì anh nghĩ là không có quy trình gì cả. Các bước thẩm định, dò xét để chọn lựa hướng giải quyết của mỗi người đều khác nhau. 

Đến một mức nào đó, quá trình hình thành hướng giải quyết và cách giải quyết cụ thể chỉ thuần tuý phụ thuộc vào khả năng sáng tạo của mỗi cá nhân mà thôi. Những lệnh căn bản như ls, umask là những lệnh không thể thiếu để thẩm định. Thẩm định còn có thể mở rộng ra bằng cách phối hợp một số 'lệnh' để mang lại kết quả nhanh chóng và trung thực hơn. Anh cho rằng không có một công thức hay quy trình nào cả. Cùng lắm là mọi người đều chọn chung một hướng giải quyết là đi từ dễ đến khó, từ đơn giản đến phức tạp." 

"cuti" reo lên: 
"Vậy thế nào là đơn giản, thế nào là phức tạp? thế nào là dễ và thế nào là khó hở anh?" 

Tôi cười, đáp: 
"Em không đùa đấy chứ? Em không biết thế nào là đơn giản, phức tạp, dễ và khó hay sao? Hay ý em muốn nói trong khuôn khổ điều chỉnh nội dung index.html ở đây mà thôi?" 

"cuti" đáp một cách thoả mãn: 
"Đúng rồi anh, có vậy mới được chớ? hì hì. Em chỉ muốn biết cách nào là cách đơn giản, dễ để điều chỉnh nội dung index.html kia. Cách nào là cách khó và phức tạp. Anh nói qua chuyện này đi?" 

Tôi đáp: 
"Hì hì, em vẫn chưa thoát khỏi con ma 'thiếu kiên nhẫn', nó cứ đi theo em và 'ám' em mãi vậy? . Em chỉ muốn thấy kết quả liền liền thôi. Anh có thể nói đến các thao tác để em nghe nhưng làm như vậy bị hỏng hết kế hoạch của anh em mình. Làm như vậy em không còn có chuyện để tìm hiểu và thâu thập nữa." 

"cuti" chống chế: 
"Hì hì, dạ đúng rồi. Em đúng là muốn thấy ngay kết quả. Nhưng anh thông cảm cho em tí đi. Dù gì em cũng còn nhỏ dại, thiếu kiên nhẫn mà. Nếu em mà điềm đạm, kiên nhẫn thì em đã thành một ông... già khó tánh như anh rồi . Nếu anh nghĩ rằng mình không nên đốt giai đoạn thì em không tò mò thêm nữa đâu." 

Tôi mỉm cười, nghĩ ngợi vài giây rồi trả lời "cuti": 
"Hèm.... 'nhỏ dại' thì phải làm gì đó mới 'lớn lên' được chớ em? Không nên viện lý do 'nhỏ dại' để làm sai hướng mình đi. Hơn nữa, nếu lúc nào cũng chống chế bằng sự 'nhỏ dại' thì khó mà 'lớn lên' được. Thật ra anh có thể tổng hợp lối giải quyết vấn đề một cách chung chung cho em xem. Tuy nhiên, em nên nhớ đây không phải là một quy trình hay công thức gì cả, đây chỉ là những thẩm định và thực thi mang tính thói quen và kinh nghiệm mà thôi. Giả sử em đánh cuộc với anh là làm sao anh có thể đổi nội dung index.html thì anh sẽ làm như sau, không nhất thiết phải theo đúng thứ tự: 
- trước tiên, dùng ls để xem chủ quyền ấn định đến hồ sơ này. Nếu nó cho phép mọi người 'viết' và 'đọc' --> game's over. 
- nếu nó cho người tạo ra hồ sơ này và một nhóm người dùng nào đó (group) được phép 'viết' và 'đọc', anh xem thử umask ấn định chế độ chủ quyền theo mặc định ra sao để đánh giá mức cẩn thận của người làm chủ server này --> anh tìm cách đưa tài khoản của anh vào group này --> nếu được, game's over. 
- nếu nó chỉ cho người tạo ra hồ sơ này muốn làm gì thì làm, ngoài ra mọi người chỉ được phép 'đọc' --> cái này dẫn đến nhiều chọn lựa. 

a. anh xem thử sudo được ấn định thế nào. Nếu sudo ấn định lỏng lẻo và cho phép anh thay đổi một script nào đó hoặc mượn tay root để làm gì đó --> game's over 

b. nếu sudo quá chặt chẽ, em mới dò tìm xem trên system này có 'world-writeable' script nào không. script cần cho root thực thi thì càng tốt. Nếu có --> game's over 

c. nếu không tìm ra được gì hết, anh mới chuyển qua tìm xem có binary nào trên system có SUID và bị lỗi. Nếu có --> game's over. 

d. nếu tìm không ra SUID có lỗi, anh mới nghĩ đến chuyện tìm những chương trình hay dịch vụ nào chạy với chủ quyền super user và cần tạo hồ sơ tạm thời ở /tmp. Nếu các chương trình này thiếu sanity check trước khi tạo temp file thì anh dùng symlink để mượn tay 'su' đổi chủ quyền một file nào đó anh chọn trước để khai thác password hoặc những thứ tương tự --> game's over 

e. nếu system này... chiến quá, không có chương trình nào hoặc dịch vụ nào thiếu sót trong phần sanity check trước khi tạo temp file thì anh mới nghĩ đến shellcoding. Tìm cách dò ra một vị trí nào đó trên memory đang được 'su' dùng và bắt nó thực thi một chuyện gì đó tiện lợi cho anh để biến anh thành 'root' --> game's over. 

Nếu đi xuyên qua các dạng thẩm định trên (cộng với các phối hợp) mà vẫn không tìm ra kẻ hở --> bó tay. 

Nếu xét về mặt khó hay dễ, đơn giản hay phức tạp thì a -> e tạm xem là thứ tự. Tuy vậy, mỗi dạng thăm dò và quyết định phương hướng có thể mở ra nhiều khả năng khác nhau, mức đơn giản và phức tạp sẽ thay đổi. Bởi vậy, trình tự cụ thể và rõ ràng là chuyện không thể có được." 

"cuti" khoái chí đáp: 
"Thấy chưa? em 'moi' một chặp cũng ra thôi. Anh đưa ra a -> e không đơn giản và dễ hiểu hơn sao?" 

Tôi đáp: 
"Tất nhiên là 'đơn giản và dễ hiểu' nếu như em vẫn còn đeo cứng lối khai triển và thực hiện theo kiểu 'step-by-step'. Nếu em hiểu rõ việc ứng dụng các cơ chế làm việc trên máy chủ, tự nhiên em hiểu rõ vấn đề và hiểu rất sâu về nó. Nếu em không hiểu rõ việc ứng dụng các cơ chế mà chỉ làm theo các 'steps' thì sự thất bại chiếm trên 90% vì khi gặp trở ngại, em không biết cách đổi hướng hay vận dụng thêm các chọn lựa khác để thay đổi tình hình. Nên nhớ, anh không 'chỉ vẽ' chuyện 'khai thác' ở đây. Anh chỉ đưa ra ví dụ và phân tích cái gọi là 'giềng mối' cho em thấy rõ 'giềng mối' là thế nào mà thôi. Nếu em hỏi anh SUID là gì, làm sao khai thác nó thì anh sẽ không trả lời vì anh không biết phải trả lời thế nào. Cho đến khi em tìm ra SUID là gì, nó có tác dụng gì, tại sao có nó thì tự nhiên em sẽ có câu trả lời 'làm sao để khai thác nó' mà thôi ." 

"cuti" bức xúc thấy rõ: 
"Trời, anh lúc nào cũng úp úp, mở mở . Anh đúng là làm khó em." 

Tôi cười phá lên vì "cuti" bị lạc đề và đi đến việc ngộ nhận vấn đề một cách trầm trọng. Tôi nói tiếp: 
"Này ông thần nước mặn, anh em mình đang nói chuyện 'giềng mối' hay anh em mình đang bàn chuyện 'exploit' ở đây vậy? Em đừng nóng nảy như thế. Liệu trước giờ em đã 'chat' với ai ở cấp độ anh em mình đang 'chat' chưa? Nếu chưa thì em không nên cho là anh 'úp úp, mở mở' ." 

"cuti" chống chế và phụng phịu: 
"Hông phải, hông phải. Ý em trách móc gì anh hết. Em thấy 'giềng mối' được thể hiện qua quy trình exploit là dễ thấy và dễ hiểu nhất. Anh dùng ví dụ a -> e tự nhiên em thấy thông hẳn ra. Thế nhưng anh lại quay về chuyện khái niệm. Để em tiêu hoá được mớ khái niệm này chắc chết mất." 

Tôi quyết định trở nên cứng rắn với "cuti" không thì hỏng bét. Tôi đáp: 
"Nếu em không tiêu hoá nổi mớ 'khái niệm' kia thì em sẽ không bao giờ có thể 'hack' được. Anh phải nhấn mạnh điều này bởi vì có ba điểm quan trọng như sau: 
- những cái em gọi là 'khái niệm' kia chính là kỹ năng lập luận và định hướng. Không có nó, em không làm gì được (và chỉ có thể ngồi đó chờ được mách nước). Kỹ năng này giúp cho em không chỉ mở một 'ổ khoá' mà nhiều 'ổ khoá'. Em chọn lựa lối tiếp thu 'step-by-step' thì chắc chắn em chỉ có thể mở được một 'ổ khoá' mà thôi. 
- từ những thứ gọi là 'khái niệm' kia, nó tạo điều kiện cho em tìm hiểu và hiểu những kiến thức cần thiết để hình thành những 'giềng mối' của cả một hệ thống làm việc. 
- nếu em chỉ 'nhắm mắt' mà thực thi các 'lệnh', em vướng vào một thế giới cực kỳ mơ hồ và nguy hiểm." 

"cuti" cố chống chọi: 
"Trời, có gì mà nguy hiểm anh? Cùng lắm là làm không được thôi mà ." 

Tôi cười, đáp: 
"Nếu anh cho em một đoạn script hoặc một đoạn mã nguồn và anh nói rằng: 'chạy nó đi, nó sẽ thực hiện điều em muốn' nhưng bên trong đoạn script hoặc đoạn mã nguồn này tàng chứa những 'thứ' nguy hiểm khác mà em không biết. Liệu em có chạy nó không?" 

"cuti" cười giã lã: 
"Chẳng lẽ anh mà lại 'chơi' em sao? Tất nhiên là em chạy nó liền mà chẳng ngần ngại." 

Tôi đáp: 
"Đó chính là điểm nguy hiểm mà em không nhận ra. Cứ cho là anh không làm chuyện đó nhưng làm sao em dám chắc là một chương trình nào đó em download từ Internet về hoàn toàn đáng tin cậy nếu em không soi xét nó kỹ lưỡng? Và để soi xét kỹ lưỡng nhất định em phải có đủ kiến thức cần thiết. Em dùng một thứ công cụ, một đoạn script, một đoạn mã nguồn với mục đích 'exploit' mà bị 'exploit' bởi chính công cụ mình dùng thì... hack hiếc cái nỗi gì?" 

"cuti" đáp: 
"Trời, em chưa bao giờ nghĩ đến điểm này. Có lẽ em chưa có đủ kinh nghiệm 'chiến trường' mà thôi." 

Tôi trả lời: 
"Ừa, chưa đủ kinh nghiệm 'chiến trường' thì quá rõ nhưng vấn đề mình đang bàn ở đây là mình phải có đủ kiến thức để xem thử mình đang 'chơi' với cái gì và chắc chắn lối khai triển 'step-by-step' sẽ không giúp được em. Hơn nữa, nếu hiểu rõ, mình có thể dùng nó để 'cải thiện' cho mục đích cụ thể của mình. Nhưng thôi, anh nghĩ mình đi hơi xa chủ đề rồi đó. Em nên lưu lại trọn bộ nội dung cuộc nói chuyện của anh em mình hôm nay và về đọc kỹ lại đi. Nếu được, lần sau em làm một bản 'tổng kết' những gì mình bàn cãi cho đến lúc này. Được không 'cuti'?" 

"cuti" nhanh nhảu: 
"Dạ được chớ anh, chuyện nhỏ như con thỏ thôi mà. Anh phải đi à?" 

Tôi đáp: 
"Ừa, anh phải đi. Anh dính chặt vào cái máy cả tiếng đồng hồ rồi. Anh phải đi có công chuyện. Cần gì cứ YIM cho anh nha. Chào cuti." 

"cuti" vẫn hóm hỉnh: 
"Chào anh già... dễ tánh". 

Và tôi logoff. 

12/7/2005 
<còn tiếp>

Không có nhận xét nào:

Đăng nhận xét